Ffmpeg 模拟电视噪声

Ffmpeg 模拟电视噪声,ffmpeg,noise,television,Ffmpeg,Noise,Television,我在谷歌上搜索了一下,但始终找不到答案。我的第一个模拟屏幕上电视的视频和音频噪声的方法应该是什么?我的意思是,当我的电视天线被移除但电视仍然开着的时候(就像日本恐怖电影中有时出现的那样)。我可以使用ffmpeg或任何其他技术,但最简单的信号形式是什么?它是白噪声 使用随机强度创建灰度图像,使用完全随机采样创建音频使用ffmpeg 噪音 使用过滤器 (视频“通用公式”)过滤器(作为其“空白画布”)可以创建视频噪声,并且过滤器可以创建白噪声音频: ffmpeg -f lavfi -i nullsrc

我在谷歌上搜索了一下,但始终找不到答案。我的第一个模拟屏幕上电视的视频和音频噪声的方法应该是什么?我的意思是,当我的电视天线被移除但电视仍然开着的时候(就像日本恐怖电影中有时出现的那样)。我可以使用ffmpeg或任何其他技术,但最简单的信号形式是什么?

它是白噪声

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

使用
ffmpeg
噪音 使用过滤器 (视频“通用公式”)过滤器(作为其“空白画布”)可以创建视频噪声,并且过滤器可以创建白噪声音频:

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

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

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

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

这将产生彩色视频噪声。如果您只需要黑白,可以添加过滤器


向现有视频添加随机视觉噪声和错误 使用
噪音
:

原始版本和修改版本

根据报告:

比特流过滤器对编码流数据进行操作,并执行以下操作: 不执行解码的比特流级修改

此位流过滤器可以接受一个值来增加或减少噪声量。它是相反的,所以数字越大,噪音越小,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
音频,但我建议进行试验。有关显示不同编码器对噪声损坏的反应的视频,请参见()

输出
noise.mkv
已损坏,但您可以对其进行重新编码,使其在播放机中正常工作:

ffmpeg -i noise.mkv -codec:v libx264 -pix_fmt yuv420p output.mkv
ffmpeg -i macroblock.ts -codec:v libx264 -pix_fmt yuv420p output.mp4
有关更多编码信息,请参阅FFmpeg Wiki上的和编码指南

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

ffmpeg -i input.mp4 -bsf:v noise -c:v mpeg2video -q:v 2 -c:a copy macroblock.ts
如果您想要更“编码”的外观,请将
-q:v
值增加到~20。如果需要更多噪波,请添加一个噪波值,如上一节所示

输出
宏块.ts
已损坏,但您可以对其重新编码,使其在播放机中工作:

ffmpeg -i noise.mkv -codec:v libx264 -pix_fmt yuv420p output.mkv
ffmpeg -i macroblock.ts -codec:v libx264 -pix_fmt yuv420p output.mp4
有关噪波比特流过滤器的更多信息,请参见上面的部分

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

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


强制使用像素格式 你可以对ffmpeg撒谎,让它认为颜色空间和色度子采样是不同的,它实际上会产生奇怪的、类似错误的效果

原始版本和修改版本

  • 探索你的输入

    ffmpeg -i original.mp4
    
    请注意帧速率和视频帧大小

  • 请参阅
    ffmpeg-pix_fmts
    并选择一种可用格式,如
    yuv420p16le

  • 创建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
    
    -framerate
    -video\u size
    值是从步骤1的控制台输出中显示的原始输入文件信息复制而来的。当然,您也可以操纵这些以获得各种效果

  • 如果需要,多路复用器音频

    ffmpeg -i video.mp4 -i original.mp4 -map 0 -map 1:a -c copy output.mp4
    

  • 是的,您可以使用
    ffmpeg

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

    为了比较,我测试了3种不同的生成伪随机数的方法。 正如你所看到的,速度是非常不同的。 对于高宽度,我建议第一种解决方案。 您可以在此处找到来源:

    顺便说一下,震源可以进一步优化,以获得更好的速度

    $ ./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%            
    

    为视频帧中的每个像素指定一个随机RGB值。对下一帧重复此操作。对于声音(和视频),您基本上希望生成白噪声。另请参见@LordNeckbeard我在我的问题注释中引用的另一个问题中得到了一些例子注意,
    /dev/uradom
    提供了安全的随机数据,因此可能无法以足够快的速度提供给定图片大小和帧速率的数据。查看或考虑使用过滤器方法如何做,但只使用FFPATH?@ Zibri,你想在FFPLAY中使用哪种方法?用/DEV/ururOM(或我写的一个更快的程序)模拟电视噪声……像dd if=/dev/urandom | ffplay-f u8-ar 48000-ac 1-###或##dd if=/dev/urandom | ffplay-fs-f rawvideo-pixel|u格式灰度8-视频大小1920x1080-帧速率30-####我就是找不到同时拥有这两种格式的方法together@Zibri应该作为一个新问题来问。如何做同样的事情,但只使用ffplay?@Zibri我现在已经测试过了,似乎必须用
    ffplay
    替换
    ffmpeg
    。。如果我用管道将ffmep传输到ffplay,它就会工作。。。我似乎找不到一个ffplay命令。。。这项工作:cat/dev/uradom | ffmpeg-f rawvideo-pixel|u格式rgb24-video|u大小1920x1080-framerate 60-i--f s16le-ar 48000-ac 2-i--c:a pcm_s16le-c:v rawvideo-f avi-| ffplay-fs-####但我希望在不使用管道的情况下只使用ffplay