Jak przekonwertować animowany gif na mp4 lub mv4 w wierszu poleceń?


79

Jakiego polecenia użyłbym do przekonwertowania pliku wideo mp4 lub mv4 na animowany gif i odwrotnie. Oznacza to konwersję animowanego gifa na mp4 lub mv4.

Odpowiedzi:


107

Oto, co zadziałało dla mnie:

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

movflags - Ta opcja optymalizuje strukturę pliku MP4, aby przeglądarka mogła go załadować tak szybko, jak to możliwe.

pix_fmt - filmy MP4 przechowują piksele w różnych formatach. Uwzględniamy tę opcję, aby określić konkretny format, który ma maksymalną kompatybilność we wszystkich przeglądarkach.

vf - filmy MP4 korzystające z H.264 muszą mieć wymiary, które można podzielić przez 2. Ta opcja zapewnia, że ​​tak jest.

Źródło: http://rigor.com/blog/2015/12/optimizing-animated-gifs-with-html5-video


4
Dzięki, to jest jedyna wersja, która działała dla mnie na osx.
Pykler

1
To działało dla mnie na Ubuntu 16.10 z ffmpeg 3.0.2, gdzie najlepsza odpowiedź nie zadziałała
kot

1
Może także przyciąć zamiast skalowania (wymienić scalez crop), jak jesteś tylko będzie odcięcie co najwyżej 1 piksel. Skalowanie może powodować rozmycie
Jezzamon

To odcięło mi ostatnie kilka sekund. Wynikowe MP4 zakończyło się wcześnie.
callum

38

W moim przypadku skorzystanie ffmpegbezpośrednio z tej sztuczki zapewniło najlepszy wynik:

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

2
wyprodukował pusty (uszkodzony) film na os x
Pykler

2
@Pykler prawdopodobnie powinieneś zwiększyć gadatliwość i / lub sprawdzić plik dziennika, aby zrozumieć, co się dzieje.
BenC

Ja też, prawdopodobnie „podzielny przez 2 wymiary” sugeruje odpowiedź vico Vault. (co dla mnie zadziałało)
lapo

Ta metoda działała dla mnie idealnie. (Najlepsza odpowiedź spowodowała odcięcie 3 sekund.) EDYCJA: och, ale nie gra na iOS :(
callum

Strona mówi, należy po prostu dodać -pix_fmt yuv420p
beefeather

2

Innym sposobem konwersji animacji GIF na wideo:

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

Wartości -crf mogą wynosić od 4 do 63. Niższe wartości oznaczają lepszą jakość. -b: v to maksymalna dozwolona przepływność. Wyższy oznacza lepszą jakość.


2

Jeśli chcesz stworzyć wyjście w „n pętlach” , spójrz na to rozwiązanie w jednym ujęciu

Przekształćmy więc plik normal.gif w loop.mp4

przykład filmu z 2 pętlami:

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

na przykład filmu z 5 pętlami:

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

UWAŻAJ: istnieje opcja -y [do zastąpienia]


Jeśli uruchomisz pierwsze ffmpegpolecenie bez -y , będziesz mieć znacznie mniejsze szanse na przypadkowe zastąpienie czegoś, czego nie chcesz. ( Prawdopodobnie istnieje również sposób na ffmpegprzesłanie wideo do siebie i zrobienie tego jednym poleceniem bez pliku pośredniego i nadpisywania).
FeRD

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.