ffmpegはオーディオを追加しますが、ビデオの長さは同じにします(-shortestではありません)


12

私はそのようにffmpegを使用してビデオファイルにオーディオを追加しています

ffmpeg -i videofile.mp4 -i audiofile.wav output.mp4

ただし、これにより、ビデオよりも長い場合、出力ビデオファイルがオーディオファイルの長さに拡張されます。-shortestを使用すると、オーディオファイルがビデオより短い場合、ビデオファイルが短くカットされます。それで、ffmpegに出力ビデオの長さを入力ビデオの長さに保つようにカットするように指示するフラグがありますか?


正しい答えを選んでください。本当の正しいものは、@ Zurechtweiserによるものだけです。
Roel Van de Paar、

回答:


13

-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)。

詳細:https : //www.ffmpeg.org/ffmpeg-filters.html#Examples-68


-filter_complexオプションは再エンコードを強制することに注意してください-たとえば、実行は可能ですが実行はできffmpeg -i videofile.mp4 -i audiofile.wav -c:v copy output.mp4ませんffmpeg -i videofile.mp4 -i audiofile.wav -filter_complex " [1:0] apad " -c:v copy -shortest output.mp4
Eugen Rieck

これは要求されるものの反対の答えです。OPは、オーディオが終了するとビデオを終了するように要求します。与えられた答えは、オーディオがビデオよりも短い場合、オーディオの無音を追加することです。この答えは間違っています。
Roel Van de Paar、

OPが要求したものの「反対」ではありません。OPは、オーディオトラックの長さに関係なく、出力ビデオを入力ビデオの長さにしたいと考えています。私の答えは、入力ビデオがオーディオファイルよりも長い状況に対処します。OPには、入力ビデオがオーディオファイルよりも短い場合の解決策がすでにあります。これは-shortestを使用することです。
デッドコード

12
  • ビデオの長さがオーディオの長さよりも短い場合-shortestは、これで十分です。
  • ビデオの長さがオーディオの長さよりも長い場合、フラグはまったく必要ありません。

この決定を自動化するためのフラグはありません。

編集

@deadcodeの答えに触発されて、私が明確にする必要があります。再エンコードするつもりなら、「自動化するフラグがない」というのはもちろん本当ではありません。この場合apadは、@ deadcodeの提案に従ってください。

ただし、再エンコード(つまり-c:v copy)を避けたい場合は、その答えが有効です。

ffconcatデマルチプレクサを使用する回避策はありますが、少し作業が必要です。

  • 音声ファイルとまったく同じ形式で無音を含むファイルを作成します( "silence.wav")
  • 連結ファイル "audio.ffconcat"を作成します(音声が十分に長いことを確認するために必要な数の無音行を含む):

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フィルターグラフなしでフィルターが合成されるため、再エンコードせずにマルチプレクサを使用できます。


@RoelVandePaar前述のとおり:ビデオの長さがオーディオの長さよりも短い場合は-shortest、再エンコードせずに無音を追加する場合は、この回避策を使用してください。
Eugen Rieck

正解です。レビューで見逃しました。入力を削除しました。同じことをお気軽に。
Roel Van de Paar

5

ビデオファイルの長さがわかっている場合は、

ffmpeg -i videofile.mp4 -i audiofile.wav -t 43 output.mp4

43は、秒単位のビデオファイルの長さです。


作成者の質問は、ビデオが終了していない間にオーディオファイルをループしたいと考えています。これはそのために機能しますか?
Rafael Sanches

@RafaelSanchesいいえ、彼はしません。
Zurechtweiser 2017

著者はオーディオをループしたくありません。この答えは、OPが求めていたことを行う唯一の正しい答えでもあります。入力ビデオが終了したらビデオを終了します。
Roel Van de Paar、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.