FFmpegで別のトラックにウォーターマークを作成する

FFmpegで別のトラックにウォーターマークを作成する

PNG (アルファ) ファイルとビデオ ファイルがあります。最初のトラックが画像で、2 番目のトラックがビデオ (ビデオ上の PNG) であるビデオを作成したいと考えています。問題は、PNG では透明性が維持されないことです。

ビデオ トラック上の ffmpeg を使用して別のトラックに透かし (PNG) を作成する必要があります。

ffmpeg -i base.mov -i logo.png -map 0 -map 1 output.mov

答え1

透かしを追加するための構文は少し異なります。そのためには、FFmpeg にすでにバンドルされているビデオ フィルターが必要です。

透明な透かしを別のトラックに追加できるかどうかはわかりません。その理由は、画像自体 (PNG「ストリーム」) を実際のビデオ トラック (たとえば x264 を使用) に変換する必要があるためです。また、この段階ではビデオ エンコーダーが透明性をサポートしていないため、透明な画像を取得できません。


次のようにすると、右上隅に追加されlogo.pngます。次のパラメータを使用して位置を決定できます。私の例では、境界線から 10 ピクセル離れた場所に配置しました。base.mov

  • main_w(メイン動画の幅)
  • main_h(メイン動画の高さ)
  • overlay_w(オーバーレイビデオの幅)
  • overlay_h (オーバーレイビデオの高さ)

フィルター コマンドは次のようになります。

movie='logo.png' [logo]; [in][logo] overlay=main_w-overlay_w-10:10 [out]

これを完全な FFmpeg コマンドに変換します。

ffmpeg -i base.mov -vf "movie='logo.png' [logo]; [in][logo] overlay=main_w-overlay_w-10:10 [out]" -c:v libx264 -crf 20 out.mov

パラメータ-c:v libx264 -crf 20によって、出力ビデオ コーデックとその品質が決まります (必要な品質に応じて、CRF はおそらく 19 ~ 24 になります。低いほど良いです)。

このテーマに関する非常に良いブログ記事がここにあります:FFmpeg を使用してビデオに透かしを入れる方法位置の詳細について説明します。

関連情報