ffmpegを使用するときに最後のフレームを保持する方法


9

ffmpegでいくつかのビデオをカット/変換しています。私が本当に望んでいるのは、出力に最後のフレームを数秒間保持できるようにすることです(音声は無音)。そのようなことは可能ですか?または、どういうわけか最後のフレームを取得して、そこから新しいビデオを作成する必要がありますか?

回答:


11

1つの方法は、overlayビデオフィルターを使用することです。あなたのビデオが640x480、30秒の持続時間、25フレームレートであると仮定します:

ffmpeg -f lavfi -i nullsrc=s=640x480:d=35:r=25 -i video.mp4 -i audio.wav -filter_complex \
"[0:v][1:v]overlay[video]" -map "[video]" -map 2:a -codec:a copy -shortest output.mkv
  • nullsrcソースフィルターの期間を5秒より長く設定しましたinput.mkv

  • オーバーレイのデフォルトの動作は、オーバーレイされたソースの最後のフレームを繰り返すことです。eof_action他の動作については、オプションを参照してください。

  • この例のオーディオは、再エンコードされるのではなく、ストリームコピー(再多重化)されています。

  • 欠点は、この例ではフィルターが使用されているため再エンコードが必要ですが、コマンドが1つしかないため、他の方法よりも簡単な場合があります。


それは素晴らしいように聞こえますが、オーディオストリームもwavファイルで置き換える場合は、それを行うことができますか?また、ソースビデオのサイズを知る必要がありますか?
xorsyst 2014年

1
@xorsystはい、オーディオを置き換えることができます。例を更新しました。はい、この方法では、ソースビデオのフレームサイズ、継続時間、およびフレームレートを知っている必要がありますが、これらの変数はすべてスクリプト化できます。FFprobeのヒントを参照してください。
llogan 14年

0

あなたの質問に対する答えは「はい」だと思います。私はFFMPEGに精通していませんが、あなたの目標を達成するために見ることができる最も簡単な方法は、最初に最後のフレームを画像に抽出し、数秒のビデオを作成してから、メインビデオとあなたのビデオを連結するエンコードを実行することですワンパスで新しく作成されたビデオ。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.