私はffmpegを使ってビデオファイルにオーディオを追加しています
ffmpeg -i videofile.mp4 -i audiofile.wav output.mp4
ただし、これにより、ビデオよりも長い場合、出力ビデオファイルがオーディオファイルの長さに拡張されます。 -shortestを使用すると、オーディオファイルがビデオより短い場合、ビデオファイルが短くカットされます。では、ffmpegに出力ビデオの長さを入力ビデオの長さに保つようにカットするように指示するフラグはありますか?
-filter_complexオプションとapadフィルターオプションを使用して、ビデオが長い場合、最後に無音でオーディオを埋め込むことで、目的を達成できると思います。あなたのコマンドは:
ffmpeg -i videofile.mp4 -i audiofile.wav -filter_complex " [1:0] apad " -shortest output.mp4
これは、必要なオーディオがaudiofile.wavの最初のストリームにあることを前提としています。[A:B]構文は、A番目の入力からB番目のストリームを取得することを示しています(どちらも0で始まるため、[1:0]は2番目の入力からの最初のストリーム、または上記のaudiofile.wav)。
-shortest
はあなたが欲しいものです。この決定を自動化するためのフラグはありません。
[〜#〜]編集[〜#〜]
@deadcodeの答えに触発されて、私は明確にする必要があります、あなたが再エンコードしたいなら、「自動化するフラグがない」はもちろん真実ではありません:この場合はapad
として@deadcodeによって提案されました。
ただし、再エンコードを避けたい場合(つまり、-c:v copy
)答えはそのままです。
ffconcat
demuxerを使用する回避策がありますが、少し作業が必要です。
。
file 'audiofile.wav'
file 'silence.wav'
file 'silence.wav'
...
file 'silence.wav'
ffmpeg -i videofile.mp4 -f concat -i audio.ffconcat -c:v copy output.mp4
これにより、フィルターグラフなしでapad
フィルターが合成され、再エンコードせずにマルチプレクサを使用できるようになります。
ビデオファイルの長さがわかっている場合は、
ffmpeg -i videofile.mp4 -i audiofile.wav -t 43 output.mp4
ここで、43は秒単位のビデオファイルの長さです。