Можно ли записать водяной знак имени файла в углу слайд-шоу с объединенными изображениями и изменить его для каждого изображения?

274
Max M.

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

Каково мое текущее состояние : я создал скрипт для извлечения всех .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
Gyan

Демультиплексор 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='%': fontcolor=0x808080: fontsize=14: x=w-tw- 10:y=h-th-10" -r 12 -c:v libx264 filename.mp4 

Похожие вопросы