模拟电视噪音

Ale*_*tin 23 ffmpeg television noise

我用谷歌搜索了一下,却从来没有找到答案.我应该首先采用哪种方法来模拟屏幕上电视的视频和音频噪音?我的意思是,当我的电视天线被移除但电视仍在播放时(就像他们有时会在日本恐怖电影中播放一样).我可以使用ffmpeg或任何其他技术,但最简单的信号形式是什么?

llo*_*gan 55

使用创建视频和音频噪音,工件和错误 ffmpeg

噪声

使用过滤器

geq(视频"通用公式")过滤器(与nullsrc它的"空白画布")可以创建视频噪音,和aevalsrc过滤器可以创建白噪音的音频:

单声道噪音

ffmpeg -f lavfi -i nullsrc=s=1280x720 -filter_complex \
"geq=random(1)*255:128:128;aevalsrc=-2+random(0)" \
-t 5 output.mkv
Run Code Online (Sandbox Code Playgroud)

请注意,这将产生黑白视频噪音.

运用 /dev/urandom

虽然我建议使用geq滤镜,但您也可以使用它/dev/urandom来生成视频和音频噪音(Windows用户必须使用geq如上所示的滤镜).这是一个小型的screeenshot,但当然视频不是静态图像:

有色噪音

ffmpeg -f rawvideo -video_size 1280x720 -pixel_format yuv420p -framerate 25 \
-i /dev/urandom -ar 48000 -ac 2 -f s16le -i /dev/urandom -codec:a copy \
-t 5 output.mkv
Run Code Online (Sandbox Code Playgroud)

这将产生彩色视频噪音.如果您只想要黑白,可以添加hue过滤器.

单声道噪音

ffmpeg -f rawvideo -video_size 1280x720 -pixel_format yuv420p -framerate 25 \
-i /dev/urandom -ar 48000 -ac 2 -f s16le -i /dev/urandom -codec:a copy \
-t 5 -vf hue=s=0 output.mkv
Run Code Online (Sandbox Code Playgroud)

向现有视频添加随机视觉噪音和错误

使用noise 比特流过滤器:

原始图像在此输入图像描述 原始版本和修改版本.

ffmpeg -i input.mp4 -codec:v huffyuv -bsf:v noise -codec:a copy noise.mkv
Run Code Online (Sandbox Code Playgroud)

根据文件:

比特流滤波器对编码流数据进行操作,并执行比特流级别修改而不执行解码.

该比特流滤波器可以接受一个值来增加或减少噪声量.它是反向的,因此较高的数字是较少的噪声,1是最低的数字,因此噪声最大.您需要进行试验,看看什么最适合您.

第一个示例流复制了音频并且只对视频进行了屏蔽,但是您可以通过删除流说明符将过滤器应用于音频和视频:

ffmpeg -i input.mp4 -codec:v huffyuv -c:a pcm_s16le -bsf noise=1000000 noise.mkv
Run Code Online (Sandbox Code Playgroud)

或者为视频和音频提供单独的值:

ffmpeg -i input.mp4 -codec:v huffyuv -c:a pcm_s16le -bsf:v noise=1000000 -bsf:a noise=100 noise.mkv
Run Code Online (Sandbox Code Playgroud)

这似乎是一道很好地工作rawvideohuffyuv为视频和pcm_s16le音频,但我建议尝试.有关不同编码器如何对噪声损坏做出反应的视频,请参阅无损与损坏(注释).

输出noise.mkv已损坏,但您可以对其进行重新编码,以便它可以在您的播放器中使用:

ffmpeg -i noise.mkv -codec:v libx264 -pix_fmt yuv420p output.mkv
Run Code Online (Sandbox Code Playgroud)

有关更多编码信息,请参阅FFmpeg Wiki上的H.264AAC编码指南.

宏块效应

有几种方法可以做到这一点,但在本例中,将使用噪声比特流滤波器.在TS中输出到MPEG-2视频,因为这将更容易受到期望的影响:

ffmpeg -i input.mp4 -bsf:v noise -c:v mpeg2video -q:v 2 -c:a copy macroblock.ts
Run Code Online (Sandbox Code Playgroud)

增加-q:v,如果你想要更多的"编码"期待值〜20.如果您想要更多噪音,请添加噪音值,如上一节所示.

输出macroblock.ts已损坏,但您可以对其进行重新编码,以便它可以在您的播放器中使用:

ffmpeg -i macroblock.ts -codec:v libx264 -pix_fmt yuv420p output.mp4
Run Code Online (Sandbox Code Playgroud)

有关噪声比特流过滤器的更多信息,请参阅上面的部分.

结果可能会有所不同,因此您可能无法获得所需内容.请参阅下面的hex编辑器方法

使用十六进制编辑器

另一种方法是使用十六进制编辑器,您可能会发现它更容易,更可控,更一致.看到:


强制像素格式

你可以欺骗ffmpeg并让它认为颜色空间和色度子采样是不同的,它实际上导致奇怪的,类似错误的效果.

原始图像在此输入图像描述 原始版本和修改版本.

  1. 探讨你的意见.

    ffmpeg -i original.mp4
    
    Run Code Online (Sandbox Code Playgroud)

    请注意帧速率和视频帧大小.

  2. 请参阅ffmpeg -pix_fmts并选择其中一种可用格式,例如yuv420p16le.

  3. 创建rawvideo并将其传递给另一个ffmpeg实例:

    ffmpeg -loglevel error -i original.mp4 -f rawvideo - | ffmpeg -y -f rawvideo -framerate 25 -video_size 1280x720 -pixel_format yuv420p16le -i - -pix_fmt yuv420p video.mp4
    
    Run Code Online (Sandbox Code Playgroud)

    -framerate-video_size值从在步骤1中的控制台输出当然也可以操作这些用于各种效果中所示的原始输入文件信息复制.

  4. 如果需要,Mux音频

    ffmpeg -i video.mp4 -i original.mp4 -map 0 -map 1:a -c copy output.mp4
    
    Run Code Online (Sandbox Code Playgroud)