Animasyonlu bir gif'i komut satırında bir mp4 veya mv4'e nasıl dönüştürebilirim?


79

Bir mp4 veya mv4 video dosyasını animasyonlu bir gif'e dönüştürmek için hangi komutu kullanırdım, ya da tam tersi. Yani, bir animasyonlu gif'i bir mp4 veya mv4'e dönüştürün.

Yanıtlar:


108

İşte benim için çalıştı ne:

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

movflags - Bu seçenek MP4 dosyasının yapısını optimize eder, böylece tarayıcı onu olabildiğince çabuk yükleyebilir.

pix_fmt - MP4 videoları pikselleri farklı formatlarda depolar. Tüm tarayıcılarda maksimum uyumluluğu olan belirli bir format belirtmek için bu seçeneği dahil ediyoruz.

vf - H.264 kullanan MP4 videoların 2 ile bölünebilen boyutlara sahip olmaları gerekir. Bu seçenek, durumun böyle olmasını sağlar.

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


4
Teşekkürler, bu benim için osx'ta çalışan tek sürüm.
Pykler

1
Bu benim için Ubuntu 16.10'da ffmpeg 3.0.2 ile çalıştı, en üstteki cevap yoktu
kedi

1
Yanı yerine (replace ölçekleme kırpma Mayıs scaleile cropyalnızca en 1 pikselde keserek olacağız gibi). Ölçekleme işleri bulanıklaştırabilir
Jezzamon

Bu benim için son birkaç saniyeyi kesti. Elde edilen mp4 erken bitti.
callum

38

Benim durumumda, ffmpegdoğrudan hile yaparak ve en iyi sonucu sağladı:

$ ffmpeg -f gif -i infile.gif outfile.mp4

2
os x'de boş (bozuk) bir video hazırladı
Pykler

2
@Pykler olup bittiğini anlamak için muhtemelen ayrıntılarını arttırmalı ve / veya günlük dosyasını kontrol etmelisin.
BenC,

Ben de, muhtemelen "vico Vault'un cevabında önerilen" 2 boyuta bölünebilir ". (Bu benim için çalıştı)
lapo

Bu yöntem benim için mükemmel çalıştı. (En üstteki cevap 3 saniyenin sona erdirilmesine neden oldu.) EDIT: ah, ancak iOS üzerinde
oynanmıyor

Bir web sayfası sadece -pix_fmt yuv420p eklemeniz gerektiğini söylüyor
beefeather

2

GIF animasyonunu videoya dönüştürmenin başka bir yolu:

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

-crf değerleri 4 ile 63 arasında değişebilir. Düşük değerler daha iyi kalite anlamına gelir. -b: v, izin verilen maksimum bit hızıdır. Daha yüksek, daha iyi kalite demektir.


2

Çıktıyı "n döngüler" yapmak istiyorsanız , bu çözüme tek seferde bakın

Yani, bir dönüştürmek izin normal.gif için loop.mp4

2 döngü film örneği için:

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

5 döngü film örneği için:

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

DİKKAT EDİN: [üzerine yazmak için] bir -y var


İlk ffmpegkomutu onsuz çalıştırırsanız, -yistemediğiniz bir şeyin üzerine yanlışlıkla yazma olasılığınız çok daha az olur. ( Muhtemelenffmpeg videoyu kendi içine çekmenin ve bunu ara dosya ve üzerine yazmadan tek bir komutla gerçekleştirmenin bir yolu da vardır .)
FeRD 19

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.