ffmpeg を使用してビデオの最初の 30 秒間にロゴを追加するにはどうすればよいですか?

ffmpeg を使用してビデオの最初の 30 秒間にロゴを追加するにはどうすればよいですか?

ffmpeg を使用して、ビデオの最初の 30 秒間にロゴを追加しようとしています。 というビデオd1.mp4と というロゴがありますlogo.png

ビデオが始まると、透かしはビデオの左上または右上隅に表示され、30 秒後に消えます。

追加する方法を教えていただけますか?

答え1

ffmpeg -i in.mp4 -framerate 30000/1001 -loop 1 -i logo.png -filter_complex
  "[1:v] fade=out:st=30:d=1:alpha=1 [ov]; [0:v][ov] overlay=10:10 [v]" -map "[v]"
  -map 0:a -c:v libx264 -c:a copy -shortest out.mp4

これは、ロゴがアルファ チャネルを持つ単一の静止画像であり、フレーム レートが 30000/1001 (NTSC レート) のビデオにオーバーレイすることを前提としています。-framerateが異なる場合は、入力ビデオに合わせて を変更します。ロゴがビデオの場合は、 を省略します-framerate 30000/1001 -loop 1。ロゴにアルファ チャネルがない場合は、format=yuva420p,の直前に例を挿入してアルファ チャネルを追加しますfade

これにより、ロゴが x,y 位置 10,10 に 30 秒間表示され、その後 1 秒間フェードアウトします。

答え2

使用overlayビデオフィルタービデオにロゴを追加するには:

ここに画像の説明を入力してください

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay" \
-codec:a copy out.mp4

このコマンドを理解するには、ストリーム指定子であり、読んでいるFFmpeg フィルタリング入門が役立ちます。[0:v]は最初の入力 ( ) のビデオ ストリームを参照しvideo.mp4[1:v]は 2 番目の入力 ( logo.mp4) のビデオ ストリームを参照します。これにより、overlay使用する入力を判断できます。 を省略しても機能します[0:v][1:v]overlay、明示的に指定し、不明な可能性のあるデフォルトに依存しないようにすることをお勧めします。

デフォルトでは、ロゴは左上に配置されます。

-codec:a copywillの使用ストリームコピーオーディオ。これはオーディオを再エンコードするのではなく、単にオーディオを再多重化するだけです。オーディオの「コピー アンド ペースト」と考えてください。

ロゴの移動

この例では、ロゴを右に 10 ピクセル、下に 10 ピクセル移動します。 ここに画像の説明を入力してください

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=10:10" \
-codec:a copy out.mp4

この例では、ロゴを右側から 10 ピクセル、下へ 10 ピクセル移動します。

ここに画像の説明を入力してください

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=main_w-overlay_w-10:10" -codec:a copy out.mp4

main_wは「メイン」入力(背景または[0:v])の幅を指し、 はoverlay_w「オーバーレイ」入力(ロゴまたは )の幅を指します。したがって、この例では、これはまたは[1:v]に変換できます。overlay=320-90-10:10overlay=220:10

オーバーレイのタイミング

一部のフィルターはタイムライン編集これにより、算術式フィルターをいつ適用するかを決定します。ffmpeg -filtersタイムライン編集をサポートするフィルターを確認するには、を参照してください。

この例では、ロゴが 30 秒間表示されます。

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=10:10:enable=between(t\,0\,30)" -codec:a copy out.mp4

ロゴを消したい場合は、mark4oの回答

関連情報