FFMPEG H264 分割解复用流视频

FFMPEG H264 分割解复用流视频

我有一个 H264 视频(存储在 264 文件中)。使用 ffplay 我看到:

[NULL @ 00000000003454a0] start time for stream 0 is not set in estimate_timings _from_pts
[mpeg @ 0000000000344560] Could not find codec parameters for stream 0 (Audio: mp2, 0 channels): unspecified frame size
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Input #0, mpeg, from 'int_max.264':
 Duration: 03:37:45.30, start: 35437.583167, bitrate: 6574 kb/s
   Stream #0:0[0x1c0]: Audio: mp2, 0 channels
   Stream #0:1[0x1e1]: Video: h264 (Constrained Baseline), yuv420p, 704x576, 25 tbr, 90k tbn
   Stream #0:2[0x1e2]: Video: h264 (Constrained Baseline), yuv420p, 704x576, 25 tbr, 90k tbn
   Stream #0:3[0x1e0]: Video: h264 (Constrained Baseline), yuv420p, 704x576, 25 tbr, 90k tbn
   Stream #0:4[0x1e3]: Video: h264 (Constrained Baseline), yuv420p, 704x576, 25 tbr, 90k tbn

是否可以将此文件拆分为四个单独的 h264 文件,每个文件对应一个流?我可以使用 ffmpeg 执行此操作吗?这怎么可能?可以给我一些建议吗?

我有 FFmpeg 和 x264。我很乐意使用 FFmpeg 命令行,或者我自己的与 x264 库的 ffmpeg 链接的程序。

答案1

您可以使用-map选择所需的流,以及-codec copy(或-c copy别名)使用流复制模式而不是重新编码:

ffmpeg -i input \
-map 0:v:0 -codec copy output0 \
-map 0:v:1 -codec copy output1 \
-map 0:v:2 -codec copy output2 \
-map 0:v:3 -codec copy output3

0:v:3指的是:选择第一个输入(0),选择视频流类型(v),选择第四个视频流(3)。注意 是ffmpeg从 0 开始计数的-map,所以3是第四个流。

就您而言,上述示例与以下内容相同:

ffmpeg -i input \
-map 0:1 -codec copy output0 \
-map 0:2 -codec copy output1 \
-map 0:3 -codec copy output2 \
-map 0:4 -codec copy output3

...但我通常发现第一种方法更灵活。

相关内容