web-dev-qa-db-ja.com

ffmpegを使用した2つのビデオ間のクロスフェード

私はffmpegを使用して2つのビデオクリップ間のクロスフェードトランジションを実現しようとしましたが、今のところ失敗しています。私はffmpegを使い始めたばかりで、オンラインでドキュメントや既存のサンプルで見つけられるものを調整することに主に依存しています。これまで読んだことから、blendまたはoverlayフィルターを使用すると、目的を達成するのに役立ちますが、私はできますコマンドラインの詳細を理解して動作させないでください。

fadeおよびconcatフィルターは、ビデオ1のフェードアウト、ビデオ2へのフェードイン、および2を1つのクリップに連結するのに最適ですトランジションを入力しますが、間にビデオが黒に移行することなく、ビデオ1からビデオ2にトランジションするコマンドを取得するのに役立ちます。私はこの問題の例をどこにも見つけることができませんでした、おそらく間違ったキーワードを探しています...?

より具体的には、私のビデオはmp4(h264ビデオ、重要なのはサウンドなし)で、それぞれ5秒の長さで、約。 4.5秒のビデオ1から0.5秒のビデオ2。

MLTとフレームを使用してこのチュートリアルが行うこと(フェードの例については2:25を参照)と同様ですが、他のプログラムを呼び出さずにffmpegでこれを行う方法を探しています。 http://www.youtube.com/watch?v=3PRZ9L_KLdI

このようなフェードを取得するためのポインタまたはコマンドラインは、大いに感謝されます。

28
Mugba

私はそのようにすることをお勧めします:

  • 出力ビデオと同じ長さと解像度で黒い背景を作成します
  • 各ビデオにアルファチャネルを追加する
  • 各ビデオにアルファ効果へのフェードを追加します
  • 背景が黒の各ビデオにオーバーレイを使用する

したがって、クロスフェードを2ビデオ(5秒)にそれぞれ追加するコマンドは次のようになります。

ffmpeg -i 1.mp4 -i 2.mp4 -f lavfi -i color=black -filter_complex \
"[0:v]format=pix_fmts=yuva420p,fade=t=out:st=4:d=1:alpha=1,setpts=PTS-STARTPTS[va0];\
[1:v]format=pix_fmts=yuva420p,fade=t=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+4/TB[va1];\
[2:v]scale=960x720,trim=duration=9[over];\
[over][va0]overlay[over1];\
[over1][va1]overlay=format=yuv420[outv]" \
-vcodec libx264 -map [outv] out.mp4

これは、最初のビデオをアルファに4秒(st = 4)で1秒間(d = 1)フェードインし、2番目のビデオを0秒(st = 0)で1秒間(d = 1)フェードインし、ディスプレイを移動します。 4秒に進む時間(+ 4/TB)。次に、黒色の9秒をカットし、出力ビデオのサイズに合わせて拡大縮小してオーバーレイします。

それが役に立てば幸い。

23
ptQa

これは私がやった方法です:

  • ffmpegバージョンN-77197-gdf2ce13
  • それぞれ4秒の動画2本。
  • それらの間のフェードでそれに参加する必要があります。
  • ビデオは25 fpsです。

1)1番目の終わりにフェードアウト(明から暗)を追加し、2番目の始まりにフェードイン(暗から明)を追加します。

ffmpeg -i 1.mp4 -y -vf fade=out:76:24 1f.mp4

ffmpeg -i 2.mp4 -y -vf fade=in:0:25 2f.mp4

76:24は、フェードアウトがフレーム76を開始し、24フレーム後に終了することを意味します= 1秒のフェードアウト。

0:25は、フェードインがフレーム0から始まり、25フレーム後に終了することを意味します。

2)2つのビデオをマージする

すべてTSに変換

ffmpeg -i 1f.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts 1f.ts

ffmpeg -i 2f.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts 2f.ts

マージ

ffmpeg -i "concat:1f.ts|2f.ts" -bsf:a aac_adtstoasc -c copy output.mp4

おかげで:

http://www.bogotobogo.com/FFMpeg/ffmpeg_fade_in_fade_out_transitions_effects_filters.php

7
Erwan

ffmpeg-concat は、必要なことを達成する最も簡単な方法であり、一連のセクシーなOpenGLトランジションを使用できます。デフォルトはクロスフェードです。

ffmpeg-gl-transition は、GLSLを使用して2つのビデオストリーム間をスムーズに移行できるカスタムffmpegフィルターです。このフィルターは、ここにリストされている代替案よりも使用およびカスタマイズが大幅に簡単です。

このフィルターは、大きな list 遷移タイプをサポートし、デフォルトはクロスフェードです。

./ffmpeg -i 0.mp4 -i 1.mp4 -filter_complex "gltransition=duration=4:offset=1.5" out.mp4
7
fisch2