【问题标题】:map metadata stream by filter in ffmpeg通过ffmpeg中的过滤器映射元数据流
【发布时间】:2020-08-07 13:03:07
【问题描述】:

我尝试从 mpegts 流中仅提取一个(元)数据流

这是 ffprobe 返回的流

Stream #0:0[0x12c]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:1[0x12d]: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 256 kb/s
Stream #0:2[0x5]: Data: bin_data ([6][0][0][0] / 0x0006)
Stream #0:3[0x262]: Data: bin_data (FBID / 0x44494246)
Stream #0:4[0x258]: Data: klv (KLVA / 0x41564C4B)

我只需要视频、音频和 klv 流 (0:4)。

虽然我可以通过指定它的索引来映射这个流
ffmpeg -i udp://[IP] -map 0:4 -map 0:v -map 0:a -f mpegts udp://[IP]

我不想依赖容器中的 klv 流位置。
我也试过了
ffmpeg -i udp://[IP] -map 0:d:m:klv -map 0:v -map 0:a -f mpegts udp://[IP]
但这是更多的猜测。

如何在不指定流索引的情况下包含视频、音频和 klv 或排除流 0:20:3,以便生成的 mpegts 流看起来像?

Stream #0:0[0x12c]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:1[0x12d]: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 256 kb/s
Stream #0:2[0x258]: Data: klv (KLVA / 0x41564C4B)

【问题讨论】:

  • 只是猜测:-map_metadata -1 可能有用吗?

标签: ffmpeg


【解决方案1】:

您可以使用ffprobe来确定索引:

ffprobe -v error -select_streams d -show_entries stream=index,codec_name -of csv=p=0 udp://[IP]

结果:

2,klv

使用ffprobeawk 自动获取KLV 索引的Bash 示例:

ffmpeg -i udp://[IP] -map 0:v -map 0:a -map 0:"$(ffprobe -v error -select_streams d -show_entries stream=index,codec_name -of csv=p=0 udp://[IP] | awk -F, '/klv/ {print $1}')" -c copy -f mpegts udp://[IP]

【讨论】:

  • 虽然我想要实现的目标看起来相当复杂,但它就像一个魅力
  • print $1 之后,我需要添加以使其正常工作的;exit。由于某种原因,它在终端中调用时有效,但在从 C 代码生成时失败。也许这对其他人也有帮助
猜你喜欢
  • 2011-06-30
  • 2017-11-13
  • 1970-01-01
  • 2019-05-19
  • 2014-07-23
  • 2019-04-09
  • 2021-09-02
  • 2021-08-26
  • 2011-04-10
相关资源
最近更新 更多