Escala de sobreposição de marca d'água por tamanho de vídeo com ffmpeg

2

Gostaria de escalar uma marca d'água para 5% da largura do vídeo.

Eu preciso de algo assim:

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

Como posso referenciar a largura do vídeo?

    
por face 10.09.2014 / 17:01

3 respostas

3

Assumindo um ambiente linux (ou cygwin no windows), a única maneira que encontrei é executar 2 comandos.

Primeiro, para obter o tamanho do vídeo principal e fazer a matemática neles (nota: x/20 == x*0.05 :

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

Segundo para dimensionar e sobrepor o vídeo

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

Além disso, você poderia simplesmente substituir $val na segunda linha pela primeira expressão (incluindo as backquotes) e obter o mesmo resultado, mas acho mais fácil ler o comando de divisão em dois.

    
por 10.09.2014 / 18:48
6

Isso agora pode ser executado diretamente usando o filtro 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
    
por 16.03.2016 / 16:14
1

Quanto ao Windows, descobri o seguinte método usando ffprobe e ffmpeg. Aqui está um código de arquivo .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"
)

Aqui SLACE_FACTOR é uma largura de imagem de sobreposição dividida em alguma largura de arquivo de vídeo de referência (por exemplo, 320px / 1280px).

    
por 16.03.2016 / 15:33