使用するtrim
とconcat
-ソースファイルを別のコーデックで
このため、個々のファイルが同じ解像度、理想的には同じフレームレートやクロマサブサンプリングなどであることを確認してください。これにより、連結中のエラーやグリッチを防ぐことができます。
trim
およびconcat
フィルターを使用して、ファイルを分割せずにすべてを一度に実行できます。
ffmpeg -i edv_g24.mp4 -i short-video.mp4 -filter_complex "\
[0:v]trim=0:10,setpts=PTS-STARTPTS[v0]; \
[1:v]trim=0:5,setpts=PTS-STARTPTS[v1]; \
[0:v]trim=15:30,setpts=PTS-STARTPTS[v2]; \
[v0][v1][v2]concat=n=3:v=1:a=0[out]" \
-map "[out]" output.mp4
ここで、trim
は0:v
、1:v
後で連結する入力ビデオストリーム(、)の個々の部分を指定するために使用されます。これらのパーツにはから名前が付けられv0
ますv2
。(setpts
フィルターはこれらの個々の部分のタイムスタンプを0にリセットします。これは連結に必要です)。その後、3つの部分を連結します。
特定のタイムスタンプから最後までトリミングtrim=start=15
する場合は、範囲を指定する代わりにを使用します。
ファイルにオーディオがある場合は、これらのストリームを個別にトリミングする必要があります。
ffmpeg -i edv_g24_2.mp4 -i short-video.mp4 -filter_complex "\
[0:v]trim=0:10,setpts=PTS-STARTPTS[v0]; \
[0:a]atrim=0:10,asetpts=PTS-STARTPTS[a0]; \
[1:v]trim=0:5,setpts=PTS-STARTPTS[v1]; \
[1:a]atrim=0:5,asetpts=PTS-STARTPTS[v1]; \
[0:v]trim=15:30,setpts=PTS-STARTPTS[v2]; \
[0:a]atrim=15:30,asetpts=PTS-STARTPTS[a2]; \
[v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" output.mp4
この場合、ビデオとオーディオは再エンコードされることに注意してください–適切な出力品質ターゲットを指定してください(例:-crf
x264、x265、またはlibvpx-vp9)。これについての詳細は、FFmpeg Wiki(VP9やH.264など)で読むことができます。
個別のセグメントを使用する
クリップを分割して後で再構成する場合:
ffmpeg -i edv_g24.mp4 -ss 0 -to 10 -c copy part1.mp4
ffmpeg -i edv_g24.mp4 -ss 10 -to 15 -c copy part2.mp4
ffmpeg -i edv_g24.mp4 -ss 15 -c copy part3.mp4
ffmpeg -i part1.mp4 -i short-video.mp4 -i part3.mp4 -filter_complex \
"[0:v][1:v][2:v]concat=n=3:v=1:a=0[outv]" \
-map "[outv]" -t 30 output.mp4
ファイルに音声が含まれている場合は、上記と同じ方法を使用します。
ffmpeg -i part1.mp4 -i short-video.mp4 -i part3.mp4 -filter_complex \
"[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" -t 30 output.mp4
これにより、ビデオストリームが再度エンコードされます。もう少し簡単ですが、それ以外の点では上記の方法と同等です。
concat
demuxerの使用
原則として、concat demuxerを使用して、再エンコードせずにビットストリームを連結することもできます。というファイルを作成しconcat.txt
、次のエントリを追加します(上記で作成したビデオクリップに対応)。
file 'part1.mp4'
file 'short-video.mp4'
file 'part3.mp4'
次に、これらの個々のファイルを連結します。
ffmpeg -f concat -i concat.txt -c copy output.avi
ただし、これには、クリップのコーデック、解像度、フレームレートなどが同じである必要があるため、すべての種類の異種ソースでは機能しません。
使用するconcat
プロトコルを
上記の種類のファイルレベルの連結はconcat
、上記と同じ種類の制約(同じコーデック、解像度など)を使用して、プロトコルを使用しても実現できます。
ffmpeg -i "concat:part1.avi|part2.avi|part3.avi" -c copy output.mp4
連結の詳細については、それぞれのFFmpeg Wikiページを参照してください。