ffmpeg - 模拟电视噪音

标签 ffmpeg noise television

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

最佳答案

使用 ffmpeg 创建视频和音频噪音、伪影和错误

噪音

使用过滤器

geq (视频“通用方程”)过滤器(以 nullsrc 作为其“空白 Canvas ”)可以产生视频噪声,而 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 过滤器,如上所示)。这是一个小屏幕截图,但当然视频不会是静态图像:

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 :

A bitstream filter operates on the encoded stream data, and performs bitstream level modifications without performing decoding.



这个比特流过滤器可以接受一个值来增加或减少噪声量。它是相反的,因此数字越大噪音越小,而 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 corruption (notes) 的视频展示了不同的编码器如何对噪声损坏使用react。

输出 noise.mkv已损坏,但您可以对其重新编码,以便在您的播放器中正常工作:
ffmpeg -i noise.mkv -codec:v libx264 -pix_fmt yuv420p output.mkv

H.264AAC FFmpeg Wiki 上的编码指南以获取更多编码信息。

宏 block 效果

有几种方法可以做到这一点,但在本例中将使用噪声比特流过滤器。在 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

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

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

使用十六进制编辑器

另一种方法是使用十六进制编辑器,您可能会发现它更容易、更可控且更一致。看:
  • Make Video Glitch Art: How to Datamosh, in Plain English
  • How to datamosh videos with data corruption


  • 强制像素格式

    您可以对 ffmpeg 撒谎,让它认为色彩空间和色度子采样与实际上会导致奇怪的、类似错误的效果不同。

    original image enter image description here
    原始版本和修改版本。
  • 探索你的输入。
    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_size值是从步骤 1 的控制台输出中显示的原始输入文件信息中复制的。当然,您也可以操纵这些以获得各种效果。
  • 如果需要,多路复用音频
    ffmpeg -i video.mp4 -i original.mp4 -map 0 -map 1:a -c copy output.mp4
    
  • 关于ffmpeg - 模拟电视噪音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15792105/

    相关文章:

    FFmpeg - 为 VP9 编码选择合适的比特率

    ffmpeg - 将 rtmp 流切换为单个编码输出?

    java - 如何将 TV Tuner Card 用于实时视频的 Java 编程

    javascript - 在智能电视浏览器上运行的 create-react-app

    video - 合并 675 个视频文件

    ffmpeg - (ffmpeg) 未设置 VBV 缓冲区大小 - MPG 到 MPG

    ios - 噪声过滤器可消除ios中输入音频流中的噪声

    c++ - C++ 中的固体噪声生成

    java - 使用 Perlin 噪声生成 2d 瓦片 map

    android - Android 中的 "Surface"类到底是什么?