Bagaimana cara saya mengkonversi animasi gif ke mp4 atau mv4 di baris perintah?

79

Perintah apa yang akan saya gunakan untuk mengonversi file video mp4 atau mv4 ke animasi gif, dan sebaliknya. Artinya, konversikan gif animasi menjadi mp4 atau mv4.

Gilles
sumber

Jawaban:

108

Inilah yang bekerja untuk saya:

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

movflags - Opsi ini mengoptimalkan struktur file MP4 sehingga browser dapat memuatnya secepat mungkin.

pix_fmt - video MP4 menyimpan piksel dalam berbagai format. Kami menyertakan opsi ini untuk menentukan format tertentu yang memiliki kompatibilitas maksimum di semua browser.

vf - video MP4 yang menggunakan H.264 harus memiliki dimensi yang dapat dibagi oleh 2. Opsi ini memastikan hal itu terjadi.

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

Vico Vault
sumber
4
Terima kasih, ini adalah satu-satunya versi yang berfungsi untuk saya di osx.
Pykler
1
Ini bekerja untuk saya di Ubuntu 16.10 dengan ffmpeg 3.0.2, di mana jawaban teratas tidak
cat
1
Semoga memotong alih-alih menskalakan (ganti scaledengan crop), karena Anda hanya akan memotong paling banyak 1 piksel. Scaling mungkin membuat hal-hal buram
Jezzamon
Ini memotong beberapa detik terakhir bagiku. Mp4 yang dihasilkan berakhir lebih awal.
callum
38

Dalam kasus saya, menggunakan ffmpegsecara langsung melakukan trik dan memberikan hasil terbaik:

$ ffmpeg -f gif -i infile.gif outfile.mp4
BenC
sumber
2
menghasilkan video kosong (rusak) di os x
Pykler
2
@Pykler Anda mungkin harus meningkatkan verbositas dan / atau memeriksa file log untuk memahami apa yang terjadi.
BenC
Saya juga, mungkin "dibagi 2 dimensi" yang disarankan dalam jawaban vico Vault. (yang bekerja untuk saya)
Lapo
Metode ini sangat cocok untuk saya. (Jawaban teratas menyebabkan terputusnya 3 detik.) EDIT: oh tetapi tidak bisa dimainkan di iOS :(
callum
Sebuah halaman web mengatakan Anda hanya harus menambahkan -pix_fmt yuv420p
beefeather
2

Cara lain untuk mengonversi animasi GIF ke video:

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

-RCF nilai bisa dari 4 ke 63. Nilai yang lebih rendah berarti kualitas yang lebih baik. -b: v adalah bitrate maksimum yang diizinkan. Lebih tinggi berarti kualitas yang lebih baik.

pengguna8547
sumber
2

Jika Anda ingin membuat output dalam "n loop" , lihat solusi ini dalam satu kesempatan

Jadi, mari kita konversi normal.gif ke loop.mp4

untuk 2 loop contoh film:

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

untuk 5 loop contoh film:

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

HATI-HATI: ada -y [untuk ditimpa]

PYK
sumber
Jika Anda menjalankan ffmpegperintah pertama tanpa -y , Anda akan memiliki kesempatan jauh lebih sedikit untuk secara tidak sengaja menimpa sesuatu yang tidak Anda inginkan. (Ada juga mungkin cara untuk mendapatkan ffmpegvideo pipa ke dalam dirinya, dan melakukan hal ini dalam satu perintah pipa tanpa file intermediate dan menimpa itu.)
Ferd