Menggunakan trim
dan concat
- sumber file dengan codec yang berbeda
Untuk ini, pastikan bahwa masing-masing file Anda memiliki resolusi yang sama, dan idealnya framerate yang sama dan subsampel kroma dll. Ini akan mencegah kesalahan atau gangguan selama penggabungan.
Anda dapat melakukan semuanya sekaligus tanpa memisahkan file, menggunakan trim
dan concat
filter:
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
Di sini, trim
digunakan untuk menentukan bagian individual dari stream video input ( 0:v
, 1:v
) yang nantinya Anda ingin gabungkan. Bagian-bagian ini dinamai v0
melalui v2
. ( setpts
Filter akan menyetel ulang stempel waktu masing-masing komponen menjadi 0, yang diperlukan untuk penyatuan). Kemudian, kami menggabungkan tiga bagian.
Jika Anda ingin memotong dari cap waktu tertentu hingga akhir, gunakan trim=start=15
alih-alih menentukan rentang.
Jika file Anda memiliki audio, Anda harus memotong aliran itu secara terpisah:
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
Perhatikan bahwa video dan audio akan disandikan ulang dalam kasus ini - pastikan untuk menentukan target kualitas keluaran yang sesuai (misalnya -crf
untuk x264, x265 atau libvpx-vp9). Anda dapat membaca lebih lanjut tentang ini di FFmpeg Wiki, misalnya untuk VP9 atau H.264 .
Menggunakan segmen individual
Jika Anda ingin membagi klip dan kemudian merakitnya:
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
Jika file memiliki audio, gunakan pendekatan yang sama seperti di atas:
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
Ini lagi akan menyandikan ulang aliran video. Ini sedikit lebih mudah tetapi sebaliknya harus setara dengan metode di atas.
Menggunakan concat
demuxer
Pada prinsipnya Anda juga dapat mencoba menyatukan bitstream tanpa meng-encode ulang, menggunakan demuxer concat. Buat file yang dipanggil concat.txt
dan tambahkan entri berikut (sesuai dengan klip video yang dibuat di atas):
file 'part1.mp4'
file 'short-video.mp4'
file 'part3.mp4'
Kemudian gabungkan file-file individual ini:
ffmpeg -f concat -i concat.txt -c copy output.avi
Namun ini membutuhkan klip Anda untuk memiliki codec, resolusi, framerate dll yang sama - sehingga tidak bekerja dengan semua jenis sumber heterogen.
Menggunakan concat
protokol
Jenis penggabungan tingkat file di atas dapat dicapai dengan menggunakan concat
protokol juga, dengan jenis kendala yang sama seperti di atas (codec, resolusi, dll yang sama):
ffmpeg -i "concat:part1.avi|part2.avi|part3.avi" -c copy output.mp4
Untuk info lebih lanjut tentang penggabungan, baca halaman Wiki FFmpeg masing - masing .