模拟电视噪音

时间:2013-04-03 15:53:25

标签: ffmpeg noise television

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

4 个答案:

答案 0 :(得分:51)

使用ffmpeg

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

噪声

使用过滤器

geq(视频“通用公式”)过滤器(nullsrc为“空白画布”)可能会产生视频噪音,而aevalsrc过滤器可能会产生白噪声音频:

mono noise

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

请注意,这会产生黑白视频噪音。

使用/dev/urandom

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

colored noise

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

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

mono noise

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

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

使用noise bitstream filter

original image enter image description here 原始版本和修改版本。

ffmpeg -i input.mp4 -codec:v huffyuv -bsf:v noise -codec:a copy noise.mkv

根据documentation

  

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

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

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

ffmpeg -i input.mp4 -codec:v huffyuv -c:a pcm_s16le -bsf noise=1000000 noise.mkv

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

ffmpeg -i input.mp4 -codec:v huffyuv -c:a pcm_s16le -bsf:v noise=1000000 -bsf:a noise=100 noise.mkv

对于视频,rawvideohuffyuv以及音频的pcm_s16le似乎效果很好,但我建议您进行试验。请参阅lossless vs corruptionnotes),了解有关不同编码器如何对噪音干扰做出反应的视频。

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

ffmpeg -i noise.mkv -codec:v libx264 -pix_fmt yuv420p output.mkv

有关更多编码信息,请参阅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

如果您想要更“编码”的外观,请将-q:v值增加到~20。如果您想要更多噪音,请添加噪音值,如上节所示。

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

ffmpeg -i macroblock.ts -codec:v libx264 -pix_fmt yuv420p output.mp4

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

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

使用十六进制编辑器

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


强制使用像素格式

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

original image enter image description here 原始版本和修改版本。

  1. 探测您的输入。

    ffmpeg -i original.mp4
    

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

  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
    

    {1}}和-framerate值是从步骤1的控制台输出中显示的原始输入文件信息中复制的。当然,您也可以针对各种效果操作这些信息。

  4. 如果需要,可以使用Mux音频

    -video_size

答案 1 :(得分:0)

是的,您可以使用ffmpeg

ffmpeg -s 640x480 -t 8 \
-f rawvideo -pix_fmt gray16be -i /dev/urandom \
-f s32le -i /dev/urandom \
output.mp4

答案 2 :(得分:0)

为了进行比较,我测试了三种生成伪随机数的不同方法。 如您所见,速度是非常不同的。 对于高badwidth,我建议第一个解决方案。 您可以在此处找到源: https://github.com/Zibri/rand

顺便说一下,可以进一步优化光源,以获得更快的速度。

$ ./rand|pv -S -s 2G >/dev/null
2,00GiB 0:00:01 [1,58GiB/s] [========================================================================>] 100%            

$ cat /dev/urandom|pv -S -s 2G >/dev/null
2,00GiB 0:00:11 [ 178MiB/s] [========================================================================>] 100%            

$ dd if=/dev/zero bs=1k count=2M 2>/dev/null | openssl enc -rc4-40 -pass pass:weak |pv -S -s 2G >/dev/null
2,00GiB 0:00:04 [ 413MiB/s] [========================================================================>] 100%            

答案 3 :(得分:-1)

是白噪声

使用随机强度创建灰度图像,并使用完全随机的样本创建音频