4

Я хочу конвертировать GIF-файл в видео с помощью ffmpeg. Я использую:

ffmpeg -y -i /gif/583fd7661b46d.gif -strict -2 -an -b:v 32M /gif/mp4/583fd7661b46d.avi

Продолжительность моего gif-файла в фотошопе составляет 27 секунд, но продолжительность созданного видео "583fd7661b46d.avi" составляет 15 секунд. Как я могу получить ту же продолжительность моего GIF в видео, сгенерированном?

2 ответа2

3

Используя ваш пример, я определил проблему:

В вашем GIF последний (пустой) кадр имеет продолжительность 10370ms . Кажется, что ffmpeg игнорирует его, создавая разницу.

Если я изменю формат вывода на .mp4 , продолжительность станет правильной. Смена кодера не имеет никакого эффекта.

Итак, это ошибка в ffmpeg . Это может быть связано с ограничением формата вывода, что очень маловероятно (проблема также существует для .mkv), но в этом случае следует хотя бы напечатать предупреждение. Просматривая их отслеживания ошибок, я нашел # 4235 (Преобразование GIF в MP4 с помощью FFmpeg производит видео, который не соответствует тайминги GIF кадров.) - выглядит как это было зафиксировано в формате .mp4 , но не для других.

0

Просто примените фильтр метки времени представления с коэффициентом, равным дробному original time / achieved time в вашем случае - 27/15 . Таким образом, вы добавляете фильтр -filter:v "setpts=27/15*PTS" перед именем выходного файла.

Подробнее об изменениях частоты кадров на вики FFmpeg: https://trac.ffmpeg.org/wiki/How%20to%20speed%20up%20/%20slow%20down%20a%20video

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