Yanıtlar:
İş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
scale
ile crop
yalnızca en 1 pikselde keserek olacağız gibi). Ölçekleme işleri bulanıklaştırabilir
Benim durumumda, ffmpeg
doğrudan hile yaparak ve en iyi sonucu sağladı:
$ ffmpeg -f gif -i infile.gif outfile.mp4
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.
Çı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
ffmpeg
komutu onsuz çalıştırırsanız, -y
istemediğ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 .)
MacOs sürümü aşağıdaki gibidir:
$ ffmpeg -i input.avi -pix_fmt yuv420p output.mp4