FFmpeg — цепочка фильтров и вывод сопоставления

FFmpeg — цепочка фильтров и вывод сопоставления

Возможно ли в FFmpeg отобразить вывод из середины цепочки фильтров?

Например, в этой команде:

ffmpeg -f lavfi -i smptehdbars=rate=25:size=1920x1080 -filter_complex "[0:v]drawtext=text=text1:x=100/2:y=100:fontsize=50[txt1];[txt1]drawtext=text=text2:x=200/2:y=200:fontsize=50[txt2];[txt2]drawtext=text=text3:x=300/2:y=300:fontsize=50[txt3];[txt3]drawtext=text=text4:x=400/2:y=400:fontsize=50[txt4]" -map "[txt4]" -t 10 -y ~/Desktop/mapping.mp4

Это работает: -map "[txt4]". При попытке -map "[txt3]" (или txt2, или txt1) я получаю "

Вывод с меткой «txt3» не существует ни в одном определенном графе фильтров или уже использовался в другом месте.

Я хочу вызвать полную команду и использовать разные части цепочки фильтров ( -map [$val]) для вывода разных файлов.

Спасибо

решение1

Это возможно, но мы должны использоватьрасколотьфильтр для «среднего фильтра».

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


Вот пример создания видеофайлов из всех «средних фильтров» с помощью одной команды:

ffmpeg -y -f lavfi -i smptehdbars=rate=25:size=1920x1080 -filter_complex "[0:v]drawtext=text=text1:x=100/2:y=100:fontsize=50:fontfile=arial.ttf,split[txt1][txt1out];[txt1]drawtext=text=text2:x=200/2:y=200:fontsize=50:fontfile=arial.ttf,split[txt2][txt2out];[txt2]drawtext=text=text3:x=300/2:y=300:fontsize=50:fontfile=arial.ttf,split[txt3][txt3out];[txt3]drawtext=text=text4:x=400/2:y=400:fontsize=50:fontfile=arial.ttf[txt4]" -t 10 -map "[txt1out]" mapping1.mp4 -t 10 -map "[txt2out]" mapping2.mp4 -t 10 -map "[txt3out]" mapping3.mp4 -t 10 -map "[txt4]" mapping4.mp4


Для кодирования каждого файла отдельно мы можем добавитьstreamselectфильтр, в конце цепочки фильтров:

[txt1out][txt2out][txt3out][txt4]streamselect=4:map=1[out]

Набор map=0для выбора [txt1out], набор map=1для выбора [txt2out]...

Пример команды:

ffmpeg -y -f lavfi -i smptehdbars=rate=25:size=1920x1080 -filter_complex "[0:v]drawtext=text=text1:x=100/2:y=100:fontsize=50:fontfile=arial.ttf,split[txt1][txt1out];[txt1]drawtext=text=text2:x=200/2:y=200:fontsize=50:fontfile=arial.ttf,split[txt2][txt2out];[txt2]drawtext=text=text3:x=300/2:y=300:fontsize=50:fontfile=arial.ttf,split[txt3][txt3out];[txt3]drawtext=text=text4:x=400/2:y=400:fontsize=50:fontfile=arial.ttf[txt4];[txt1out][txt2out][txt3out][txt4]streamselect=4:map=1[out]" -t 10 -map "[out]" mapping2.mp4


Примечание:
добавление fontfile=arial.ttfпотребовалось для drawtextработы в Windows.

Связанный контент