2017-03-02 6 views
0

任意のソースビデオを使用して、ビデオ全体でさまざまなタイミングで最低3つの.pngオーバーレイ/透かしを独立してフェードイン/フェードアウトしたいと思います。私はフィルタチェーンの構文の権利を取得するのに問題があります。FFMPEGを使用して複数の(3+)オーバーレイ画像をビデオと独立してフェードイン/フェードインするにはどうすればよいですか?

これらの失敗した試みでは、同じサイズのソース入力ビデオを使用して1920x1080の4つの透明な.png画像を使用しています。スケーリング/ポジショニングは必要ありません。定義された時間にオーバーレイがフェードインまたはフェードアウトするだけです。

私はそうのように、「有効にする」unsing、機能がフェードせずに作業があります。

ffmpeg -i vid1.mp4 -loop 1 -i img1.png -i img2.png -i img3.png -i img4.png -filter_complex 
"overlay=0:0:enable='between(t,8,11)' [tmp]; 
[tmp]overlay=0:0:enable='between(t,10,15)'[tmp1]; 
[tmp1]overlay=0:0:enable='between(t,15,138)'[tmp2]; 
[tmp2]overlay=0:0:enable='between(t,140,150)" 
-c:v libx264 -c:a copy 
-flags +global_header -shortest -s 1920x1080 -y out.mp4 

私はちょうどで/フェードアウトを使用して、同じ制御をしたいです。

次のはほぼですが、出力ストリーム全体がフェードアウトしないようにしたいと思います。私は、7行目の8,122,249,9にfade = outを追加すると、(7行目から)合​​成された出力がフェードアウトしていることに気付きましたが、実際には各オーバーレイ画像がフェードアウトしているのと同じくらい近いです。 3行目、4行目、5行目で定義されているフェードは、何にも影響を与えません。それらを出力ストリームにコピーすると、フェードは各オーバーレイ画像で機能しますが、出力ストリーム全体、つまり個々のオーバーレイには影響したくありません。

ffmpeg -i vid1.mp4 -loop 1 -i img1.png -i img2.png -i img3.png -i img4.png -filter_complex 
    "[1:v]fade=out:st=3:d=1[watermark0]; 
    [2:v]fade=out:st=4:d=1[watermark1]; 
    [3:v]fade=out:st=5:d=1[watermark2]; 
    [4:v]fade=out:st=6:d=1[watermark3]; 
    [0:v][watermark0] overlay=0:0 [tmp0]; 
    [tmp0][watermark1] overlay=0:0,fade=out:st=4:d=1 [tmp1]; 
    [tmp1][watermark2] overlay=0:0,fade=out:st=6:d=1 [tmp2]; 
    [tmp2][watermark3] overlay=0:0,fade=out:st=8:d=1 [out]" -map "[out]" -c:v libx264 -c:a copy 
    -flags +global_header -shortest -s 1920x1080 -y out.mp4 

私はまた、上記と同様の結果で「スプリット」しようとしましたが、フェードは(この1つは、同様にフェードを使用しています)最初の画像の上に動作するようです:

ffmpeg -i vid.mp4 -loop 1 -i img1.png -i img2.png -i img3.png -i img4.png -filter_complex 
"[1:v]split=4[wm1][wm2][wm3][wm4]; 
[wm1]fade=in:st=1:d=1:alpha=1,fade=out:st=3:d=1:alpha=1[ovr1]; 
[wm2]fade=in:st=2:d=1:alpha=1,fade=out:st=4:d=1:alpha=1[ovr2]; 
[wm3]fade=in:st=3:d=1:alpha=1,fade=out:st=5:d=1:alpha=1[ovr3]; 
[wm4]fade=in:st=4:d=1:alpha=1,fade=out:st=6:d=1:alpha=1[ovr4]; 
[0:v][ovr1]overlay=0:0[base1]; 
[base1][ovr2]overlay=0:0[base2]; 
[base2][ovr3]overlay=0:0[base3]; 
[base3][ovr4]overlay=0:0[out]" -map "[out]" 
-t 10 -c:v libx264 -c:a copy -flags +global_header -shortest -s 1920x1080 -y out.mp4 

どんな助けでも大歓迎です! :)

答えて

0

使用

ffmpeg -i vid.mp4 -loop 1 -i img1.png -loop 1 -i img2.png -loop 1 -i img3.png 
     -loop 1 -i img4.png -filter_complex 
"[1]fade=st=0:d=1:alpha=1,fade=out:st=2:d=1:alpha=1,trim=0:3,setpts=PTS+12/TB[ovr1]; 
[2]fade=st=0:d=1:alpha=1,fade=out:st=2:d=1:alpha=1,trim=0:3,setpts=PTS+25/TB[ovr2]; 
[3]fade=st=0:d=1:alpha=1,fade=out:st=2:d=1:alpha=1,trim=0:3,setpts=PTS+44/TB[ovr3]; 
[4]fade=st=0:d=1:alpha=1,fade=out:st=2:d=1:alpha=1,trim=0:3,setpts=PTS+73/TB[ovr4]; 
[0:v][ovr1]overlay=0:0:enable='between(t,12,15)'[base1]; 
[base1][ovr2]overlay=0:0:enable='between(t,25,28)'[base2]; 
[base2][ovr3]overlay=0:0:enable='between(t,44,47)'[base3]; 
[base3][ovr4]overlay=0:0:enable='between(t,73,76)'[out]" -map "[out]" 
-c:v libx264 -c:a copy -flags +global_header -shortest -s 1920x1080 -y out.mp4 

単一の画像入力、ループしていない場合は、1つのフレームの映像入力として扱われます。私は他の画像にループを追加しました。これにより、各入力は不定期のビデオストリームになります。

各画像について、フェードインとフェードインが適用されます。ここでの時間値は、ストリームの先頭に適用していると仮定します。オーバーレイの時間オフセットは後で発生します。フェードが終わったら、フェードアウトが終了するまでストリームをトリムしてビデオを維持します。その後、オーバーレイの開始位置に合わせてタイムオフセットを適用します(33秒から始まる画像をオーバーレイするには、PTS+33/TBです)。

次に、あなたが既に行ったように、一連のオーバーレイが表示されます。私は実行時間を短縮する有効条件を追加しました。

+0

これはうまく機能しますが、私は出力ビデオで音声を失います。別にマッピングする必要がありますか、またはプライマリビデオのソースオーディオをどのように含める必要がありますか?お手伝いありがとう! – blahblahber

+0

はい、 '-map 0:a'を追加してください – Mulvya

0

最初にお返事いただき、ありがとうございました。 私の仕事は、20.760秒のビデオ全体で3組のタイトルをフェードインまたはフェードインさせることでした。タイトルは透明なPNGでした。私は自分のコードを投稿しました(私はFFMPEGの専門家ではありません。あなたの最初のコードから、私は次のようにしました:

a。有効(t、開始、終了)をすべて有効に(t、0,999)に変更して、調整や説明の必要がなくなりました(ビデオが999秒より短い場合)。 b。各画像に対して使用される絶対フェードストレートイン/アウト方式。処理時間は長くなりますが、各タイトルの絶対終了時間と開始時間を設定できます。 c。タイトルが追加される基礎となるビデオの合計長を表す-t 20.760が追加されました。これにより、無限ループが防止されます。

ffmpeg -i sourcevideo.mp4 -loop 1 -i servtit1.png -loop 1 -i servtit2.png -loop 1 -i servtit3.png -loop 1 -i servtit4.png -loop 1 -i servtit5.png -loop 1 -i servtit6.png -filter_complex 
"[1]fade=t=in:st=0.5:d=1,fade=t=out:st=2.5:d=1[ovr1]; 
[2]fade=t=in:st=2.5:d=1,fade=t=out:st=4.44:d=1[ovr2]; 
[3]fade=t=in:st=6.8:d=1,fade=t=out:st=9.6:d=1[ovr3]; 
[4]fade=t=in:st=9.6:d=1,fade=t=out:st=12.4:d=1[ovr4]; 
[5]fade=t=in:st=12.5:d=1,fade=t=out:st=15.2:d=1[ovr5]; 
[6]fade=t=in:st=15.2:d=1,fade=t=out:st=17.9:d=1[ovr6]; 
[0:v][ovr1]overlay=0:0:enable='between(t,0,999)'[base1]; [base1] 
[ovr2]overlay=0:0:enable='between(t,0,999)'[base2]; [base2] 
[ovr3]overlay=0:0:enable='between(t,0,999)'[base3]; [base3] 
[ovr4]overlay=0:0:enable='between(t,0,999)'[base4]; [base4] 
[ovr5]overlay=0:0:enable='between(t,0,999)'[base5]; [base5] 
[ovr6]overlay=0:0:enable='between(t,0,999)'[out]" -map "[out]" -c:v libx264 -c:a copy -flags +global_header -t 20.760 -shortest -y outputvideo.mp4 

もう一度お手伝いします。

関連する問題