Объединение Объединение трех команд FFMPEG (наложение Drawtext / -filter_complex / anullsrc=channel_layout)

#windows #batch-file #ffmpeg #drawtext

#Windows #пакетный файл #ffmpeg #drawtext

Вопрос:

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

 @ECHO OFF
ffmpeg -f lavfi -i color=size=1280x720:duration=5:rate=25:color=Black -vf "drawtext=fontfile='GothamRnd-Book.otf':line_spacing=15:fontsize=15:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text=Stack Exchange" "out1.mp4"
ffmpeg -i "out1.mp4" -i logo.png -filter_complex "overlay=x=10:y=10" "out2.mp4"
ffmpeg -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=48000 -i "out2.mp4" -c:v copy -c:a aac -shortest "out3.mp4"
del "out1.mp4"
del "out2.mp4"
pause
 

Ближайшее, к чему я пришел, — это перемещение anullsrc=channel_layout в -filter_complex , но это приводит к длительному кодированию, которое я действительно не понимаю, что происходит, потому что, если я ctrl-c отменю пакет, он все равно будет создан out3.mp4 правильно.

 ffmpeg -f lavfi -i color=size=1280x720:duration=5:rate=25:color=Black -vf "drawtext=fontfile='GothamRnd-Book.otf':line_spacing=15:fontsize=15:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text=Stack Exchange" "out1.mp4"
ffmpeg -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=48000  -i "out1.mp4" -i logo.png -filter_complex "overlay=x=10:y=10" "out3.mp4"
 

Похоже, это можно упростить, чтобы не создавать временные файлы.
Но, возможно, это единственный способ сделать это. Спасибо за любую помощь и извините, если ответ очевиден.

Рори

Ответ №1:

Использовать

ffmpeg -f lavfi -i color=s=1280x720:d=5:r=25:color=black -i logo.png -f lavfi -i anullsrc=cl=stereo:d=5:r=48000 -filter_complex "[0]drawtext=fontfile='GothamRnd-Book.otf':line_spacing=15:fontsize=15:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text=Stack Exchange[vid];[vid][1]overlay=x=10:y=10" -c:v libx264 -c:a aac "out3.mp4"

Комментарии:

1. Сработало ли это для вас? Ошибка I: [Parsed_anullsrc_0 @ 000002316c8a0b80] Option 'd' not found [lavfi @ 000002316c89aa80] Error initializing filter 'anullsrc' with args 'cl=stereo:r=48000:d=5' anullsrc=cl=stereo:r=48000:d=5: Option not found и когда я удаляю параметр продолжительности, он становится: [AVFilterGraph @ 000001c361d76f40] Unable to parse graph description substring: "]vid];[vid][1]overlay=x=10:y=10" Error initializing complex filters. Invalid argument

2. ]vid] это опечатка. Исправлено. d in anullsrc — это новый вариант. Вам понадобится недавняя сборка git. Для более старых версий вы можете добавить -t 5 раньше -i anullsrc .

3. Теперь это работает с -t 5 опцией. -i Все ли входные данные должны быть определены перед чем-либо еще? Я читал о -map 0:v:0 потоках, но нет [vid] . Должно быть, это и есть -filter_complex отображение. Еще раз спасибо.

4. re: -i строго нет, но это рекомендуется для ясности в командах. [vid] внутри filtergraphs находится панель фильтров, см. ffmpeg.org/ffmpeg-filters.html#Filtergraph-description

5. Отлично. Спасибо.