1

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

Каково мое текущее состояние: я создал скрипт для извлечения всех файлов .jpg в папке и составил список, ffmpeg-readable и я знаю, как объединить изображения в слайд-шоу, и все работает как задумано. Я также выяснил, как использовать drawtext FFmpeg, чтобы получить красивый штамп имени файла.

Теперь проблема: в настоящее время FFmpeg извлекает последнее имя файла из списка файлов (например, IMG_9935.jpg) и записывает его во все видео. Но я хочу, чтобы это происходило с каждым «новым» изображением - точно так же, как временные коды менялись в течение видео.

Возможно ли это?

В качестве примечания: «Почему бы вам не записать имя файла заранее?«Я бы хотел сделать его максимально гибким. Так что, если есть другой путь, я бы хотел пойти по этому пути.

for i in *.jpg; do echo "file '$i'" >> files.txt; done

ffmpeg -r 1/3 -f concat -safe 0 -i files.txt -vf
"eq=text=$(echo $i | rev | cut -d / -f 1 | rev): fontcolor=0x808080:
fontsize=14: x=w-tw- 10:y=h-th-10" -c libx264 filename.mp4

1 ответ1

1

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

Вы бы изменили свой сценарий на

for i in *.jpg; do echo "file '$i'" >> files.txt; echo "file_packet_metadata url=$i" >> files.txt; done

ffmpeg -r 1/3 -f concat -safe 0 -i files.txt -vf
"drawtext=text='%{metadata\:url}': fontcolor=0x808080:
fontsize=14: x=w-tw- 10:y=h-th-10" -r 12 -c:v libx264 filename.mp4

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