100 以上のビデオがあり、すべてのビデオの最上層に 5 秒の avi ビデオを 1 つ貼り付ける必要があります (透かしやアニメーションのロゴなど)。Adobe Premiere で実行できますが、長すぎてばかげています。これを実行するためにビデオを操作するための適切なフレームワークはどこにありますか (任意の言語)。またはそれを行う他の方法はありますか?たぶん「ffmpeg」が役立つでしょうか?ヘルプ、リンク、ドキュメントは素晴らしいでしょう。
2 に答える
最上位レイヤーの 5 秒の avi ビデオの意味がよくわかりません。あなたの透かしの長さは5秒で、100以上のビデオは任意の長さで、最初のものを2番目の場所に置きたいと思います
ffmpeg にはオーバーレイ フィルターがあります。: ドキュメントは次のとおりです。
ある動画を別の動画の上に重ねます。
2 つの入力と 1 つの出力を使用します。最初の入力は「メイン」ビデオで、その上に 2 番目の入力がオーバーレイされます。
パラメータを受け入れます: x:y[:options]。
x はメイン ビデオにオーバーレイされたビデオの x 座標、y は y 座標です。x と y は、次のパラメーターを含む式です。
'main_w, main_h'</p>
main input width and height
'W、H'</p>
same as main_w and main_h
「overlay_w、overlay_h」</p>
overlay input width and height
'w、h'</p>
same as overlay_w and overlay_h
options は、":" で区切られた key=value ペアのオプションのリストです。
受け入れられるオプションの説明は次のとおりです。
'rgb'</p>
If set to 1, force the filter to accept inputs in the RGB color space. Default value is 0.
フレームは各入力ビデオからタイムスタンプ順に取得されることに注意してください。したがって、最初のタイムスタンプが異なる場合は、2 つの入力を setpts=PTS-STARTPTS フィルターに渡して、同じゼロのタイムスタンプで開始するようにすることをお勧めします。映画フィルターの例と同様です。
いくつかの例に従ってください:
# draw the overlay at 10 pixels from the bottom right
# corner of the main video.
overlay=main_w-overlay_w-10:main_h-overlay_h-10
これはうまくいきました: ffmpeg -i ./external/bb_high.mp4 -i external/small.mp4 -strict -2 -filter_complex 'overlay=10:10' output.mp4
しかし、5 秒の終わりには、最後のフレームがオーバーレイに残っていると思います。
これは、gstreamer オプションの方が優れているところです。まさにこの種のことを行うために利用できる videomixer 要素があります。
ffmpeg は使用しませんが、Expression Encoder を使用すると、動画の上に画像や「動画」を重ねたり、2 つの動画を簡単につなぎ合わせることができます。
MSDN リンク - ビジュアル オーバーレイの追加
ハウツー ビデオ
MSDN リンク - SDK の使用
Wade Wegner ブログ投稿