我有一个 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
...但我通常发现第一种方法更灵活。