我已经搜索了一些内容,但从未找到答案。如何模拟屏幕上的视频和音频噪声?我的意思是,当我拆下电视天线但电视仍然开着(有时在日本恐怖电影中展示)。我可以使用ffmpeg或任何其他技术,但最简单的信号形式是什么?
我已经搜索了一些内容,但从未找到答案。如何模拟屏幕上的视频和音频噪声?我的意思是,当我拆下电视天线但电视仍然开着(有时在日本恐怖电影中展示)。我可以使用ffmpeg或任何其他技术,但最简单的信号形式是什么?
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
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
滤镜。
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
比特流滤波器:
原始版本和修改版本。
ffmpeg -i input.mp4 -codec:v huffyuv -bsf:v noise -codec:a copy noise.mkv
该位流过滤器可以接受一个值来增加或减少噪音。它是反向的,因此较高的数字表示较少的噪音,1 是最低数字,也就是最多的噪音。您需要尝试不同的值来找到最适合您的选项。位流过滤器在编码的流数据上运行,并且执行位级修改而不进行解码。
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
rawvideo
或huffyuv
的视频和pcm_s16le
的音频,但我建议进行实验。请参见lossless vs corruption(notes)以查看不同编码器对噪声损坏的反应。noise.mkv
已经损坏,但您可以重新编码它以使其在您的播放器中正常工作:ffmpeg -i noise.mkv -codec:v libx264 -pix_fmt yuv420p output.mkv
请参阅FFmpeg Wiki上的H.264和AAC编码指南,以获取更多编码信息。
有几种方法可以做到这一点,但在此示例中将使用噪声比特流过滤器。输出为MPEG-2视频格式的TS,因为这样会更容易受到所需效果的影响:
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,使其认为色彩空间和色度抽样与实际情况不同,从而产生奇怪的错误效果。
原始版本和修改版本。
Probe your input.
ffmpeg -i original.mp4
Note the frame rate and video frame size.
Refer to ffmpeg -pix_fmts
and choose one of the available formats such as yuv420p16le
.
Create rawvideo and pipe it to another ffmpeg
instance:
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
The -framerate
and -video_size
values were copied from the original input file information shown in the console output of step 1. Of course you can also manipulate these for various effects.
Mux audio if desired
ffmpeg -i video.mp4 -i original.mp4 -map 0 -map 1:a -c copy output.mp4
/dev/urandom
提供安全的随机数据,因此可能无法为给定的图片大小和帧速率提供足够快的数据。请参阅 https://blog.kylemanna.com/linux/simple-and-fast-random-data-generator 或考虑使用过滤器方法。 - Axel Heider仅供比较,我测试了三种不同的生成伪随机数的方法。 可以看到速度非常不同。 对于高带宽,我建议使用第一种解决方案。 您可以在此处找到源代码: 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%
是的,你可以使用ffmpeg
:
ffmpeg -s 640x480 -t 8 \
-f rawvideo -pix_fmt gray16be -i /dev/urandom \
-f s32le -i /dev/urandom \
output.mp4
这是白噪声
使用随机强度创建灰度图像和完全随机样本的音频