Генерация GIF из Mp4 напрямую - ffmpeg

Я пытаюсь создать gif из видеофайла mp4. Я хочу масштабировать его и обрезать при генерации.

Я добился этого (обрезка и масштабирование) от mp4 до mp4 с помощью строки ниже (так что я могу извлечь png с помощью ffmpeg и использовать Imagick для создания анимированного gif), но я считаю, что есть лучший способ достижение чисто с помощью ffmpeg.

ffmpeg -i in.mp4 -filter:v "scale=300:ih*300/iw, crop=200:500:50:80" -c:a copy out.mp4

У меня вопрос, как добиться того же, что и этот код, но для прямого создания gif из mp4.


Затем я начал настраивать преобразование mp4 в gif, но когда пришла палитра, я не мог полностью понять, что происходит.

Я нашел этот ответ и заставил его работать, однако я не мог понять, как адаптировать масштабирование и обрезку.

$ ffmpeg -y -ss 30 -t 3 -i in.mp4 \ -vf fps=10,scale=320:-1:flags=lanczos,palettegen palette.png

$ ffmpeg -ss 30 -t 3 -i in.flv -i palette.png -filter_complex \ "fps=10,scale=320:-1:flags=lanczos[x];[x][1:v]paletteuse" out.gif

Я частично понимаю, что делает этот бит -y -ss 30 -t 3 -i in.mp4 (получение первых 30 секунд и создание из них 3-секундного gif). Но что касается следующих строк, я совершенно не понимаю, что он на самом деле делает.

Было бы замечательно, если бы кто-нибудь мог объяснить, что делает каждая команда, или сослаться на ссылку, объясняющую эту тему.


person senty    schedule 20.01.2016    source источник


Ответы (1)


В вашей первой команде

ffmpeg -y -ss 30 -t 3 -i in.mp4 \
-vf fps=10,scale=320:-1:flags=lanczos,palettegen palette.png

-y заставляет ffmpeg перезаписывать, если выходной файл уже существует, поэтому нет запроса на подтверждение.

-vf, псевдоним для -filter:v, представляет собой цепочку видеофильтров, которая принимает один видеовход и последовательно обрабатывает каждый указанный фильтр. Итак, вход -> фильтр 1 -> фильтр 2 ... -> фильтр n -> выход фильтра

fps=10 преобразует источник в эту частоту кадров, отбрасывая или дублируя кадры по мере необходимости, интерполяция не выполняется. Если ваш источник составляет 20 кадров в секунду, каждый второй кадр будет пропадать. Если это 5 кадров в секунду, он будет дублировать каждый кадр один раз.

scale=320:-1:flags=lanczos изменяет размер видео до ширины 320 пикселей и высоты до длины, чтобы сохранить исходное соотношение сторон. Если вы хотите изменить размер до 320x300, вы должны заменить -1 на 300. Ланцоша - используемый алгоритм масштабирования. См. Список здесь. Ланцош хорош.

palettegen генерирует 256-цветную палитру всего входного потока. Обычно используется в сочетании с paletteuse.

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

person Gyan    schedule 20.01.2016