FFMPEG: использование видеофильтра со сложным фильтром - PullRequest
0 голосов
/ 01 апреля 2019

Я использую библиотеку fluent-ffmpeg Node.js для выполнения пакетных операций с видеофайлами.Видеофильтр, который обрезает входной формат 16: 9, добавляет заполнение и записывает субтитры в заполнение.

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

ff.input(video.mp4)
ff.input(watermark.png)
ff.videoFilter([
  'crop=in_w-2*150:in_h',
  'pad=980:980:x=0:y=0:color=black',
  'subtitles=subtitles.ass'
])
ff.complexFilter([
  'overlay=0:0'
])
ff.output(output.mp4)

Однако, запустив это, я получаю следующую ошибку:

Filtergraph 'crop=in_w-2*150:in_h,pad=980:980:x=0:y=0:color=black,subtitles=subtitles.ass' was specified through the -vf/-af/-filter option for output stream 0:0, which is fed from a comple.
-vf/-af/-filter and -filter_complex cannot be used together for the same stream.

Из того, что я понимаю, параметры видеофильтра и сложного фильтра нельзя использовать вместе.Как можно обойти это?

1 Ответ

0 голосов
/ 01 апреля 2019

Решил это, изучив некоторые основы о графиках фильтров. Вот полная команда ffmpeg. Я считаю, что строки фильтра легче читать, когда они записываются построчно.

ffmpeg \
-i video.mp4 \
-i watermark.png \
-filter_complex " \
  [0]crop = \
    w = in_w-2*150 : \
    h = in_h \
    [a] ;
  [a]pad = \
    width = 980 : \
    height = 980 : \
    x = 0 :
    y = 0 :
    color = black
    [b] ;
  [b]subtitles = 
    filename = subtitles.ass
    [c] ;
  [c][1]overlay = \
    x = 0 :
    y = 0
  " \
output.mp4

Пояснение:

[0]crop=...[a]; => Начните с применения фильтра обрезки к видеовходу 0. Назовите результат a.

[a]pad=...[b]; => Применить пэд-фильтр к потоку a. Назовите результат b.

[b]subtitles=...[c] => Применить фильтр субтитров к потоку b. Назовите результат c.

[c][1]overlay... => Применить фильтр наложения к потоку c, используя ввод 1 (файл png).

Надеюсь, это поможет кому-то бороться с графиками фильтров.

...