用于场景变化的 FFmpeg 过滤器

用于场景变化的 FFmpeg 过滤器

刚刚进入 FFmpeg,想使用过滤器进行一些长时间的视频质量/稳定性测试。到目前为止,我已经使用设置为非常低差异(0,000005)的场景变化过滤器来检测不含其他已知运动的视频序列中已知小伪影的单帧。我在多个不同位置的几帧中的每一帧中插入了一个 2 像素 x 8 像素的小伪影,以提供检测确实有效的控制。可以在测量系统中一小时的循环内容中成功检测到未压缩视频中插入的少量帧,但必须对捕获的文件进行批量过滤。轻度压缩的内容也可以,比如 ProRes——但任何长 GOP 序列都会淹没我们想要确保不存在的小伪影(除了我们为“控制”目的插入的那些……)

我的问题是: 有没有一种简单的方法可以自动化这个想法以处理连续视频而不是批量过滤捕获的文件? 目前,我捕获每个检测到的错误承载帧的 .png,以确保我检测到的就是我插入的内容——不多也不少……

在此先感谢任何指点

更新:我们设计了一个基于流的测试,使用 Decklink INPUT 端口(HDMI 端口……)将原始视频采集到检测场景变化的 FFMPEG 过滤器中。检测器的阈值设置得相当低(0.000005),这使得其绝对差值总和过滤器能够捕捉到持续时间只有一帧且只有几个像素的小图像伪影。我们在 HyperDeck 上运行的 ProRes 循环播放非运动蓝场图像序列,每帧有一到五个白点或黑点,并且这种已知异常帧的注入仅在一个小时长的循环中发生一次,作为控制来验证过滤器是否正常工作。此流通过我们的测试产品,然后由 Decklink 和 FFMPEG 过滤器组合进行分析。我们当然会观察任何已知被注入的缺失参考异常帧,和/或任何其他检测到的帧,这些帧表明我们的测试系统存在处理错误。我们可以仔细检查存储的 .png 帧以查看任何异常的性质。

一切正常,长时间测试运行稳定,但如果我们停止分析并尝试重新启动,似乎会出现问题。可能是 Decklink 中的某些东西没有正确初始化。目前,唯一的解决办法是关闭包含 Decklink 的工作站,等待电源完全放电,然后重新通电并重新启动 FFMPEG 过滤应用程序。

有人知道这个起始值是如何初始化的吗?它是在 Decklink 还是在 FFMPEG 中设置的?

当我们尝试在没有关闭电源步骤的情况下重新启动该过程时,ffmpeg 中的命令窗口显示以下内容:

C:\Users\cvandusen>ffmpeg -f dshow -video_size 1280x720 -rtbufsize 702000k -framerate 60 -i video="Decklink 视频捕获" -vf "select=gt(scene\, 0.000005)" -vsync vfr test2%03d.png

ffmpeg 版本 N-89803-g856b7cae9f 版权所有 (c) 2000-2018 FFmpeg 开发人员使用 gcc 7.2.0 (GCC) 构建配置:--enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-amf --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx libavutil 56. 7.100 / 56. 7.100 libavcodec 58. 9.100 / 58. 9.100 libavformat 58. 3.100 / 58. 3.100 libavdevice 58. 0.100 / 58. 0.100 libavfilter 7. 11.101 / 7. 11.101 libswscale 5. 0.101 / 5. 0.101 libswresample 3. 0.101 / 3. 0.101 libpostproc 55. 0.100 / 55. 0.100 输入 #0,dshow,来自“video=Decklink Video Capture”:持续时间:N/A,开始:71582788.364437,比特率:N/A 流 #0:0:视频:rawvideo(HDYC / 0x43594448),uyvy422(tv),1280x720,60 fps,60 tbr,10000k tbn,10000k tbc 流映射:流 #0:0 -> #0:0 (rawvideo (原生) -> png (原生)) 按 [q] 停止,按 [?] 获取帮助 输出 #0,图像 2,到 '20180215pm%03d.png': 元数据:编码器:Lavf58.3.100 流 #0:0:视频:png,rgb24,1280x720,q=2-31,200 kb/s,60 fps,60 tbn,60 tbc 元数据:编码器: Lavc58.9.100 png 帧= 0 fps=0.0 q=0.0 Lsize=N/A 时间=00:00:00.00 比特率=N/A 速度= 0x 视频:0kB 音频:0kB 字幕:0kB 其他流:0kB 全局标头:0kB 多路复用开销:未知 输出文件为空,未编码任何内容(如果使用,请检查 -ss / -t / -frames 参数)

相关内容