web-dev-qa-db-ja.com

FFMPEGH264スプリットデマルチプレクサストリームビデオ

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

このファイルを4つの単一ファイルh264、任意のストリームに1つのファイルに分割することは可能ですか? ffmpegでこれを行うことはできますか?これはどのように可能ですか?アドバイスをいただけますか?

FFmpegとx264が利用可能です。 FFmpegコマンドライン、またはx264ライブラリのffmpegに対してリンクされた独自のプログラムのいずれかを使用できてうれしいです。

1
Luke

-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)、4番目のビデオストリームを選択(3)を指します。 ffmpeg-mapの0からカウントを開始するため、3が4番目のストリームであることに注意してください。

上記の例は、あなたの場合、次のものと同じです。

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

...しかし、私は一般的に最初の方法がより柔軟だと思います。

2
llogan