【问题标题】:Downsampling / Filtering Data Stream with FFMPEG使用 FFMPEG 对数据流进行下采样/过滤
【发布时间】:2021-11-07 00:54:57
【问题描述】:

我们有一个.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是否可以用来保存对应于上面对视频流执行的下采样操作的“下采样”数据流?

【问题讨论】:

  • 你能分享一个小样本吗?
  • 对缓慢的响应表示歉意 - 我必须获得有关数据共享的指导。但是,是的!我正在使用的确切文件在这里:github.com/sdsawtelle/file-sharing/blob/main/2205Z.ts
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。
  • 请注意,该文件中的数据是 ST 0601(带有一些不符合标准的部分),而不是 ST 0604。

标签: ffmpeg transport-stream


【解决方案1】:

使用最近的 git master build,运行

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

【讨论】:

  • 截至 2021 年 9 月 16 日,这可以完美地从 master 编译。非常感谢 Gyan。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-25
  • 2019-05-09
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
相关资源
最近更新 更多