web-dev-qa-db-ja.com

ffmpegを使用してビデオサイズで透かしオーバーレイをスケーリングします

透かしをビデオ幅の5%に拡大縮小したいと思います。

私はそのようなものが必要です:

ffmpeg -i 1.mp4 -i logo.png -filter_complex "[1:v] scale=1_MP4_VIDEO_WIDTH*0.05:-1 [logo1]; [0:v][logo1] overlay=0:0" -y -b 1600k -c:v libx264 -profile high -level 4.1 -c:a libfaac -q:a 128k 2.mp4

ビデオ幅を参照するにはどうすればよいですか?

3
face

Linux環境(またはWindowsではcygwin)を想定すると、私が見つけた唯一の方法は2つのコマンドを実行することです。

最初にメインのビデオサイズを取得し、それらに対して計算を実行します(注:x/20 == x*0.05

val=`ffmpeg.exe -i 1.mp4 2>&1 | grep Video: | sed 's_.*, \([0-9]*x[0-9]*\) .*_\1_' | awk 'BEGIN {FS="x"} {print int($1/20)"x"int($2/20)}'`

ビデオを拡大縮小してオーバーレイする2番目

ffmpeg -i 1.mp4 -i logo.png -filter_complex "[1:v] scale=$val [logo1]; [0:v][logo1] overlay=0:0" -y -b 1600k -c:v libx264 -profile high -level 4.1 -c:a libfaac -q:a 128k 2.mp4

また、2行目の$valを最初の式(バッククォートを含む)に置き換えるだけで同じ結果を得ることができますが、分割コマンドを2つに分割する方が少し読みやすいと思います。

3
NuTTyX

これは、scale2refフィルターを使用して直接実行できるようになりました。

ffmpeg -i 1.mp4 -i logo.png \
-filter_complex "[1:v][0:v]scale2ref=iw*0.05:-1[logo1][base]; \
 [base][logo1]overlay=0:0[v]" \
-map [v] -map 0:a -y -b:v 1600k -c:v libx264 -profile high -level 4.1 \
-c:a libfaac -b:a 128k 2.mp4
7
Gyan

Windowsに関しては、ffprobeとffmpegを使って次の方法を発見しました。 .batファイルコードは次のとおりです。

@echo off
   SetLocal EnableExtensions EnableDelayedExpansion

   for %%a in ("*.mp4") do (
      For /F "usebackq" %%I In (`ffprobe -v error -show_entries stream"="width -of default"="noprint_wrappers"="1:nokey"="1 "%%~a"`) Do (

      Set V=%%~I
      ffmpeg -i "%%a" -i logo.png -b:v 1M -filter_complex "[1:v]scale=(SCALE_FACTOR*!V!):-1 [wm]; [0:v][wm] overlay=x=(main_w-overlay_w):y=(main_h-overlay_h)" -y -v 2 "new\%%~na.mp4"
)

ここで、SLACE_FACTORは、オーバーレイ画像の幅を参照ビデオファイルの幅(たとえば、320px/1280px)に分割したものです。

1
F'K