2つのビデオを入力として使用して、2つのビデオが毎秒スムーズで繰り返しの方法で互いにフェード(またはディゾルブ)されるビデオを出力したいと思います。 、または他の同様のツールffmpeg
との組み合わせによって、私が望む効果を得ることができると仮定します。基本的に、特定の時間間隔に基づいてビデオAを切り取り、1秒あたりのカットを(自動的に)削除したいと思います。ビデオBの場合も同様ですが、この場合は破棄された部分を維持するためにプロセスが逆になります。私はこれらの部分を一つに編むことを願っています。melt
mkvmerge
ffmpeg
上記のツールのいずれかに従って、ワイルドカードコマンド引数またはバッチリストを使用して結果を関連付けることができるように、ファイル名は正しい形式でなければなりません。変換効果(例えば、「遅延ディゾルブ」)は必ずしも必要ではありませんが、これを達成するためのフィルタもあれば良いでしょう。最後に、このプロセスが完了したらいいと思います。録音がほとんどまたはまったく必要ありません、ビデオ品質を維持するため。
私はすべて読んだこのスレッドそしてMeltフレームワーク文書、ffmpegマニュアルに加えて。
ベストアンサー1
2つのビデオの解像度とサンプルのアスペクト比が同じであると仮定すると、次のことができます。ミックスffmpegでフィルタリングします。
いくつかの例を挙げると、
ffmpeg -i videoA -i videoB -filter_complex \
"[0][1]blend=all_expr=if(mod(trunc(T),2),A,B);\
[0]volume=0:enable='mod(trunc(t+1),2)'[a]; [1]volume=0:enable='mod(trunc(t),2)'[b];\
[a][b]amix" out.mp4
ストレートカット。
出力:
time, in seconds,
[0,1) -> videoB
[1,2) -> videoA
[2,3) -> videoB
...
[2N ,2N+1) -> videoB
[2N+1,2N+2) -> videoA
ffmpeg -i videoA -i videoB -filter_complex \
"[0][1]blend=all_expr='if(mod(trunc(T/2),2),min(1,2*(T-2*trunc(T/2))),max(0,1-2*(T-2*trunc(T/2))))*A+if(mod(trunc(T/2),2),max(0,1-2*(T-2*trunc(T/2))),min(1,2*(T-2*trunc(T/2))))*B';\
[0]volume='if(mod(trunc(t/2),2),min(1,2*(t-2*trunc(t/2))),max(0,1-2*(t-2*trunc(t/2))))':eval=frame[a]; [1]volume='if(mod(trunc(t/2),2),max(0,1-2*(t-2*trunc(t/2))),min(1,2*(t-2*trunc(t/2))))':eval=frame[b];\
[a][b]amix" out.mp4
各入力ビデオ/オーディオは2秒間続き、切り替え時間は0.5秒です。
出力:
time, in seconds,
[0,0.5) -> videoA fades out 1 to 0 + videoB fades in from 0 to 1
[0.5,2) -> videoB
[2,2.5) -> videoB fades out 1 to 0 + videoA fades in from 0 to 1
[2.5,4) -> videoA
[4,4.5) -> videoA fades out 1 to 0 + videoB fades in from 0 to 1
[4.5,6) -> videoB
[6,6.5) -> videoB fades out 1 to 0 + videoA fades in from 0 to 1
[6.5,8) -> videoA
...
[4N ,4N+0.5) -> videoA fades out 1 to 0 + videoB fades in from 0 to 1
[4N+0.5,4N+2) -> videoB
[4N+2 ,4N+2.5) -> videoB fades out 1 to 0 + videoA fades in from 0 to 1
[4N+2.5,4N+4) -> videoA