Saya menambahkan audio ke file video menggunakan ffmpeg seperti itu
ffmpeg -i videofile.mp4 -i audiofile.wav output.mp4
Namun ini memperpanjang file video output menjadi panjang file audio jika lebih panjang dari video. Menggunakan -shortest memotong file video pendek jika file audio lebih pendek dari video. Jadi, apakah ada flag untuk memberitahu ffmpeg untuk memotong panjang dari video output ke panjang video input?
Jawaban:
Saya percaya Anda dapat mencapai tujuan yang Anda inginkan dengan menggunakan opsi -filter_complex dan opsi filter apad untuk mengisi audio Anda dengan diam di akhir jika video lebih panjang. Perintah Anda adalah:
ffmpeg -i videofile.mp4 -i audiofile.wav -filter_complex " [1:0] apad " -shortest output.mp4
Ini mengasumsikan audio yang Anda inginkan ada di aliran pertama audiofile.wav, sintaks [A: B] mengatakan untuk mengambil aliran B'th dari input A'th (keduanya dimulai dengan 0, jadi [1: 0] adalah aliran pertama dari input ke-2, atau audiofile.wav di atas).
Detail di: https://www.ffmpeg.org/ffmpeg-filters.html#Examples-68
sumber
-filter_complex
opsi memaksa reencoding - misalnya dimungkinkan untuk menjalankanffmpeg -i videofile.mp4 -i audiofile.wav -c:v copy output.mp4
tetapi tidakffmpeg -i videofile.mp4 -i audiofile.wav -filter_complex " [1:0] apad " -c:v copy -shortest output.mp4
-shortest
itulah yang Anda inginkan.Tidak ada bendera untuk mengotomatiskan keputusan ini.
EDIT
Terinspirasi oleh jawaban deadcode, saya perlu menjelaskan, bahwa "tidak ada flag untuk diotomatisasi" tentu saja tidak benar, jika Anda bersedia memasukkan ulang : Dalam hal ini, ikuti
apad
seperti yang disarankan oleh @deadcode.Namun jika Anda ingin menghindari pengodean ulang (yaitu
-c:v copy
) jawabannya berdiri.Ada solusi menggunakan
ffconcat
demuxer, tetapi perlu sedikit kerja:.
ffmpeg -i videofile.mp4 -f concat -i audio.ffconcat -c:v copy output.mp4
Ini akan mensintesis
apad
filter tanpa grafik filter, sehingga memungkinkan mux tanpa reencoding.sumber
-shortest
, gunakan solusi ini jika Anda ingin menambahkan keheningan tanpa memasukkan ulang.Jika Anda tahu panjang file video Anda, Anda bisa mencapainya dengan menggunakan
Di mana 43 adalah panjang file video Anda dalam hitungan detik.
sumber