¿Cómo convierto un gif animado a mp4 o mv4 en la línea de comando?

79

¿Qué comando usaría para convertir un archivo de video mp4 o mv4 a un gif animado, y viceversa? Es decir, convertir un gif animado a mp4 o mv4.

Gilles
fuente

Respuestas:

109

Esto es lo que funcionó para mí:

ffmpeg -i animated.gif -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" video.mp4

movflags : esta opción optimiza la estructura del archivo MP4 para que el navegador pueda cargarlo lo más rápido posible.

pix_fmt : los videos MP4 almacenan píxeles en diferentes formatos. Incluimos esta opción para especificar un formato específico que tenga la máxima compatibilidad en todos los navegadores.

vf : los videos MP4 que usan H.264 deben tener dimensiones que sean divisibles por 2. Esta opción garantiza que ese sea el caso.

Fuente: http://rigor.com/blog/2015/12/optimizing-animated-gifs-with-html5-video

Bóveda Vico
fuente
44
Gracias, esta es la única versión que funcionó para mí en osx.
Pykler
1
Esto funcionó para mí en Ubuntu 16.10 con ffmpeg 3.0.2, donde la respuesta principal no lo hizo
cat
1
También puede recortar en lugar de escalar (reemplazar scalecon crop), ya que solo va a cortar como máximo 1 píxel. La escala podría hacer que las cosas se
vuelvan
Esto cortó los últimos segundos para mí. El mp4 resultante terminó temprano.
callum
38

En mi caso, usar ffmpegdirectamente hizo el truco y proporcionó el mejor resultado:

$ ffmpeg -f gif -i infile.gif outfile.mp4
BenC
fuente
2
produjo un video en blanco (corrupto) en os x
Pykler
2
@Pykler probablemente deberías aumentar la verbosidad y / o consultar el archivo de registro para comprender lo que está sucediendo.
BenC
Yo también, probablemente el "divisible por 2 dimensiones" sugerido en la respuesta de vico Vault. (que funcionó para mí)
lapo
Este método funcionó perfectamente para mí. (La respuesta principal provocó que se cortaran 3 segundos al final). EDITAR: oh, pero no se reproduce en iOS :(
callum
Una página web dice que solo debe agregar -pix_fmt yuv420p
beefeather
2

Otra forma de convertir animación GIF a video:

ffmpeg -i your_gif.gif -c:v libvpx -crf 12 -b:v 500K output.mp4

-crf valores pueden ir de 4 a 63. Valores más bajos significan mejor calidad. -b: v es la tasa de bits máxima permitida. Mayor significa mejor calidad.

usuario8547
fuente
2

Si desea realizar la salida en "n bucles" , mire esta solución de una vez

Entonces, convirtamos un normal.gif a loop.mp4

para el ejemplo de la película de 2 bucles:

ffmpeg -stream_loop 2 -i normal.gif loop.gif -y;ffmpeg -i loop.gif -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" loop.mp4 -y

por ejemplo de película de 5 bucles:

ffmpeg -stream_loop 5 -i normal.gif loop.gif -y;ffmpeg -i loop.gif -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" loop.mp4 -y

TENGA EN CUENTA: hay un -y [para sobrescribir]

PYK
fuente
Si ejecuta el primer ffmpegcomando sin -y , tendrá muchas menos posibilidades de sobrescribir accidentalmente algo que no desea. (También es probable que haya una manera de ffmpegcanalizar el video en sí mismo, y hacerlo en un comando canalizado sin el archivo intermedio y la sobrescritura).
FeRD