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

Я пытаюсь просто добавить водяной знак в видео, чтобы начать тестирование с помощью ffmpeg. Но это просто не работает, хотя я не вижу никакой ошибки.

Я тоже пробовал

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

Но и там успеха нет.

Выход:

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

1 ответ1

2

Кажется, что ваш водяной знак больше основного видео. Поскольку вы уже используете фильтры, самый простой способ исправить это с помощью фильтра scale. scale=25:20 уменьшит его до квадрата 25x20 пикселей. Если бы вы использовали scale=25:-1 он бы масштабировал видео (в данном случае водяные знаки) до ширины 25 и уменьшил бы высоту так, чтобы соотношение сторон не изменилось (вы также можете использовать scale=-1:20)

Вот пример использования:

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

Со сложным фильтрующим графом я лично всегда маркирую свои входы и выходы, чтобы улучшить читаемость. Если у вас нет звука или вы не хотите брать звук с test.mkv, то вырежьте -map 0:a .

В графе фильтра [1:v] ссылается на «видео входа 1» (в данном случае watermark.png, так как ffmpeg начинает отсчет с 0). Вы также можете использовать [1:0] для «нулевого потока ввода 1» или просто [1] , так как в этом случае на входе присутствует только один поток. Посмотрите документацию спецификаторов потока для получения дополнительной информации.

[wat] в конце фильтра масштаба просто позволяет остальной части графа фильтра ссылаться на выходные данные фильтра масштаба - подобно установке переменной в сценарии. [outv] в самом конце фильтрующего графа выполняет аналогичную функцию, но здесь я использую его и вне графа фильтра (все метки, установленные в графе фильтра, аналогично доступны за пределами графа фильтра с параметром -map ).

Чтобы получить видео приличного качества, вам нужно установить несколько других параметров; посмотрите этот общий учебник по кодированию или одно из более подробных руководств на вики FFmpeg.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .