Добавление цветного фильтра через определенные промежутки времени в ffmpeg - PullRequest
1 голос
/ 24 февраля 2012

Я хочу добавить цветной фильтр к потоку rtmp в ffmpeg через определенные промежутки времени, скажем, по 10 секунд каждые 10 секунд.Я попробовал два подхода.Первый:

-vf "color=#8EABB8@0.9:480x208,select='gte(t,10)*lte(t,20)' [color];[in][color] overlay [out]"

Этот поток передает только те 10 секунд, на которые указывает select, и применяет цветной фильтр вместо воспроизведения всего потока и применения фильтра только к этим 20 секундам.

Iзатем узнал о split и fifo и попробовал этот подход:

-vf "[in] split [no-color], fifo, [with-color] overlay [out]; [no-color] fifo, select='gte(t,10)*lte(t,20)' [with-color]"

Я ожидал, что это воспроизведет весь поток, а затем выберет указанные 10 секунд, чтобы я мог применить фильтры, но он делает то жепервый подход и просто воспроизводит выбранные 10 секунд, а не весь поток.

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 24 февраля 2012

Как обсуждает этот вопрос , похоже, нет способа применить видеофильтры к определенному периоду времени видеопотока, если не разделить его на части, применить фильтры и рекомбинировать. Пожалуйста, поделитесь, если вы найдете лучший метод.

2 голосов
/ 13 января 2013

Вы изменили порядок потоков, идущих в оверлей.

Похоже, что если поток "select" отправляется в качестве первого входа в фильтр overlay, оверлей также блокирует его вывод в не выбранные моменты времени.

Но если вы сначала предоставите стабильный поток для overlay, а затем для выбранного, он будет выводить поток за все время.

Я пробовал следующий набор фильтров:

-vf "[in]split[B1][B2];[B1]fifo,drawbox=-1:-1:5000:5000:invert:2000,vflip,hflip[B1E];[B2]fifo,select='gte(t,5)'[B2E];[B1E][B2E]overlay[out]"

Моя версия в виде графика:

                _,--[B1]--fifo--drawbox--flip--[B1E]--._
[in]---split--X                                          X--overlay--[out]
                ‾'--[B2]--fifo--select---------[B2E]--'‾

Ваша версия была (фильтр выбора является первым overlay вводом !!):

                _,--fifo--select---[with-color]--._
[in]---split--X                                     X--overlay--[out]
                ‾'--[no-color]--fifo-------------'‾

Причина в том, что

...[B2E];[B1E][B2E]overlay...

и

...,[B1E]overlay...

эквивалентны.

Но, тем не менее, могут оставаться некоторые проблемы: вам нужно один раз или каждые 10 секунд, e. g.?

1 голос
/ 09 апреля 2015

Я имею дело с подобной проблемой, я использовал комбинацию фильтра slpit, overlay и concat, и это работает, вы можете попробовать.

-filter_complex "[0:v]split[v1][v2];[v1]select='lt(t,5)',setpts=PTS-STARTPTS[iv1];[v2]select='gte(t,5)'[over];[over][1:v] overlay=W-w:H-h:shortest=1,setpts=PTS-STARTPTS[iv2];[iv1][iv2]concat=n=2:v=1:a=0"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...