marca d'água FFmpeg

4
ffmpeg –i test.mkv -vf "movie=watermark.png [watermark]; [in][watermark] overlay=10:10 [out]" outputvideo.mkv

Estou tentando simplesmente adicionar uma marca d'água a um vídeo para começar a testar com o ffmpeg. Mas isso simplesmente não funciona, embora eu não consiga ver nenhum erro.

Eu também tentei

ffmpeg -i test.mkv -i watermark.png -filter_complex 'overlay=10:main_h-overlay_h-10' output.mkv

Mas também não há sucesso.

Saída:

ffmpeg version 1.1.1 Copyright (c) 2000-2013 the FFmpeg developers
  built on Jan 20 2013 23:05:28 with gcc 4.7.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 13.100 / 52. 13.100
  libavcodec     54. 86.100 / 54. 86.100
  libavformat    54. 59.106 / 54. 59.106
  libavdevice    54.  3.102 / 54.  3.102
  libavfilter     3. 32.100 /  3. 32.100
  libswscale      2.  1.103 /  2.  1.103
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
Input #0, matroska,webm, from 'test.mkv':
  Metadata:
    creation_time   : 2012-11-01 02:35:10
  Duration: 00:00:59.74, start: 0.000000, bitrate: 5821 kb/s
    Stream #0:0(eng): Video: h264 (High), yuv420p, 1280x720, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc
    Stream #0:1: Audio: ac3, 48000 Hz, 5.1(side), fltp, 384 kb/s (default)
Input #1, image2, from 'watermark.png':
  Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
    Stream #1:0: Video: png, rgba, 1600x200, 25 tbr, 25 tbn, 25 tbc
[Parsed_overlay_0 @ 00328000] Overlay area (10,510)<->(1610,710) not within the main area (0,0)<->(1280,720) or zero-sized
[auto-inserted scaler 0 @ 03da0f60] Failed to configure input pad on Parsed_overlay_0
    
por Milanezi 10.06.2013 / 21:37

1 resposta

2

Parece que sua marca d'água é maior que o vídeo principal. Como você já usa filtros, a maneira mais fácil de corrigir isso é com o scale filter . scale=25:20 irá escalá-lo para um quadrado de 25x20 pixels. Se você usasse scale=25:-1 , dimensionaria o vídeo (marca d'água nesse caso) para uma largura de 25 e reduziria a altura de forma que a proporção permanecesse a mesma (você também pode usar scale=-1:20 ).

Aqui está um exemplo de uso:

ffmpeg -i test.mkv -i watermark.png -filter_complex \
"[1:v]scale=25:20[wat];[0:v][wat]overlay=10:main_h-overlay_h-10[outv]" \
-map "[outv]" -map 0:a output.mkv

Com um filtro gráfico complexo, eu pessoalmente sempre rotulo minhas entradas e saídas para aumentar a legibilidade. Se você não tiver nenhum áudio ou não quiser obter áudio do test.mkv, recorte o -map 0:a .

Dentro do filtro, [1:v] refere-se a 'o vídeo da entrada 1' (watermark.png neste caso, pois o ffmpeg começa a contar a partir de 0). Você poderia igualmente usar [1:0] para 'o fluxo zeroth da entrada 1', ou apenas [1] , já que neste caso existe somente um fluxo na entrada. Consulte a documentação dos especificadores de fluxo para obter mais informações.

O [wat] no final do filtro de escala permite que o restante do filtro se refira à saída do filtro de escala - como definir uma variável em um script. O [outv] no final do filtro serve uma função similar, mas aqui eu estou usando fora do filtro também ( todos rótulos definidos dentro de um filtro gráfico são similarmente acessíveis fora do filtro gráfico, com a opção -map ).

Para obter vídeos de qualidade decente, você precisará definir várias outras opções. confira este primer de codificação geral , ou um dos mais em - guias de profundidade no wiki do FFmpeg .

    
por 11.06.2013 / 10:11

Tags