用FFMPEG下采样/滤波数据流



我们有一个.ts输入文件,其中包含(在其他流中)视频流和符合MISB 0604的KLV数据流。ffprobe对这些流的输出为:

Stream #0:0[0x111]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
...
Stream #0:2[0x1001]: Data: klv (KLVA / 0x41564C4B)

我们希望提取视频的每n帧作为.tiff。我们还需要将这些帧中的每一个与来自MISB 0604兼容数据流的相应KLV数据包相关联。

下面这个选择滤镜并根据相应比例调整原始FPS的命令确实会导致预期的帧被保存为TIFF(在这种情况下,原始视频有1187帧,我希望从选择滤镜中得到12帧)。

ffmpeg -y -i 2205Z.ts -map 0:0 -vf "select='not(mod(n,100))'",fps=30000/1001/100 -compression_algo raw -pix_fmt rgb24 %05d.tif

然而,我似乎无法在数据流上获得任何过滤器。例如,使用filter:d不会抛出错误,但似乎也没有实际过滤。我的问题是ffmpeg是否可以用来保存一个"downsampled"与对上述视频流执行的下采样操作相对应的数据流?

使用最新的git master版本,运行

ffmpeg -i 2205Z.ts -map 0:2 -bsf "noise=drop=mod(n,100)" -f segment -segment_format data -segment_time 0.01 %d.bin

噪声bsf使用一个表达式来删除,而不是选择,即select=EXPR === drop=not(EXPR)

添加-loglevel verbose以查看保留哪些数据包的详细信息,格式如下:

[noise @ 000001cd418a68c0] Stream #2 packet 1099 pts 3420417 - amount 0 drop 1
[noise @ 000001cd418a68c0] Stream #2 packet 1100 pts 3423419 - amount 0 drop 0
[noise @ 000001cd418a68c0] Stream #2 packet 1101 pts 3426423 - amount 0 drop 1

相关内容

  • 没有找到相关文章

最新更新