Я пытаюсь написать команду FFMPEG, которая:
Для примера вот что должна содержать папка после запуска скрипта:
input.mp4 <-- video to be splitted
pic.jpg <-- Base for thumbnail
[0].mp4 <-- first 20 seconds of input.mp4
[0].jpg <-- thumbnail image with "0" printed on
[1].mp4 <-- second 20 seconds of input.mp4
[1].jpg <-- thumbnail image with "1" printed on
... and so on
Это моя команда на данный момент:
ffmpeg -i input.mp4 -i pic.jpg -f segment -segment_time 20 -map 0:a -map 0:v -vcodec copy -reset_timestamps 1 output[%d].mp4 -map 1:v -vf "drawtext=text=%d:fontcolor=white:fontsize=75:x=1002:y=100:" pic[%d].jpeg
но дает несколько проблем:
%d
не распознается drawtext
(пишет бродячий % до d)%d
из drawtext (заменив его на 'Exampletext'
), скрипт правильно разделит видео, но создаст только рис[1].jpg, на котором ничего не написано. Других файлов .jpg не создается.Уведомление Я не могу использовать скрипты bash или подобные
tl;dr - не могу. Это может быть возможно в 3 шага.
%d is not recognized by drawtext (it says stray % before d)
Как не должно быть. Нигде в его документации не говорится о поддержке строк формата c-printf.
If I remove %d from drawtext (substituting it with 'Exampletext'), the script splits correctly the video, but creates only pic[1].jpg, without anything written on it. No other .jpg files seem to be created.
Это ожидаемое поведение, так как входной поток pic.jpg
умирает после 1 кадра (потому что это неподвижное изображение = всего 1 кадр). Вы можете зациклить входное изображение (посмотрите документацию image2
демультиплексора), но вы должны заранее знать количество сегментов, которые вы собираетесь создать (не говоря уже о том, что это спорный вопрос, потому что предполагаемая drawtext
операция не работает).
Единственный обходной путь, который я могу придумать, - это сделать это в 3 этапа:
segment
pic.jpg
, зациклив его, чтобы получить количество кадров, соответствующее количеству сегментов при частоте кадров 1 кадр/с. Используйте фильтр subtitle
, чтобы записать номера сегментов, указанные в подзаголовке.Очевидно, что автоматическое выполнение вышеуказанного в сценарии имеет большой смысл, но это можно сделать вручную с гораздо меньшими усилиями, чем нумерация каждого эскиза по отдельности.