Bagaimana saya bisa mendapatkan ffmpeg untuk mengubah .mov ke .gif?

99

Saya mencoba mengubah .mov menjadi .gif dan saya tidak berhasil.

Inilah kesalahannya:

ffmpeg -pix_fmt rgb24 -i yesbuddy.mov output.gif
ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers
  built on Jun 12 2012 17:47:34 with clang 2.1 (tags/Apple/clang-163.7.1)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/0.11.1 --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-libfreetype --cc=/usr/bin/clang --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libass --enable-libvo-aacenc --disable-ffplay
  libavutil      51. 54.100 / 51. 54.100
  libavcodec     54. 23.100 / 54. 23.100
  libavformat    54.  6.100 / 54.  6.100
  libavdevice    54.  0.100 / 54.  0.100
  libavfilter     2. 77.100 /  2. 77.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Option pixel_format not found.

Jika saya meninggalkan bagian -pix_fmt rgb24 itu mengeluh. Pikiran tentang cara memperbaikinya?

Daniel Fischer
sumber
3
FYI, Ada solusi yang sangat baik untuk konversi berkualitas tinggi yang diberikan di sini .
ryanjdillon

Jawaban:

161

Urutan argumen baris perintah penting. Baris perintah ini seharusnya berfungsi tetapi akan menghasilkan file raksasa:

ffmpeg -i yesbuddy.mov -pix_fmt rgb24 output.gif

Perhatikan bahwa Anda mungkin ingin mengurangi frame rate dan ukuran saat Anda mengonversi, serta menentukan waktu dan durasi mulai. Anda mungkin tidak ingin mengonversi seluruh file pada resolusi dan frame rate aslinya.

ffmpeg -ss 00:00:00.000 -i yesbuddy.mov -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 output.gif

Ukuran file akan tetap besar. Anda mungkin dapat menggunakan pengoptimal GIF dari ImageMagick untuk mengurangi ukuran:

convert -layers Optimize output.gif output_optimized.gif
Tolong berdiri
sumber
3
Jawaban yang luar biasa, terima kasih :) GIF adalah format gila ... .mov yang asli adalah 250k, .gif yang dikonversi dari ffmpeg adalah 8mb, dan convertversi yang dioptimalkan adalah 10k yang mencengangkan! Impresif!
TooTallNate
19
ffmpeg mengeluh tentang format piksel, dan beralih dari rgb24 ke pal8; haruskah perintah dalam jawaban diperbarui?
user1071136
7
Format piksel tidak kompatibel 'rgb24' untuk codec 'gif'
perawatan tinggi
1
@Andy otomatis diperbaiki ke rgb8 dalam versi ffmpeg saya.
James Campbell
gimana caranya di Android?
Ajay Shrestha
12

Setelah mengonversi:

ffmpeg -i input.mp4 input.gif 

Coba optimalkan bingkai:

convert input.gif -verbose -coalesce -layers OptimizeFrame input_optframe.gif

Dan gunakan gifsicleuntuk membuat optimasi akhir:

gifsicle -O2 input_optframe.gif -o optimized.gif

Dapatkan 6.8mb GIF dari video 12.2mb dengan kualitas yang hampir sama!

Aleksey Kozhevnikov
sumber
3
Pikiran menjelaskan bagaimana langkah-langkah ini bekerja dan apa yang mereka lakukan?
Raystafarian
10

Saya membuat alat yang menggabungkan FFmpeg, ImageMagick, dan giflossy menjadi satu program baris perintah yang mudah digunakan yang dapat Anda instal dalam satu baris: https://github.com/vvo/gifify

Saya sarankan siapa pun yang mau memutar video => GIF untuk menggunakannya alih-alih mencoba menghabiskan banyak waktu menjelajah 3 situs dokumentasi untuk memahami cara mengubah ukuran GIF atau mengubah waktu mulai / berakhir.

vvo
sumber
1
Dan jika Anda memiliki Docker berjalan pada mesin Anda, lakukan saja alias seperti: alias gifify='docker run -it --rm -v $(pwd):/data maxogden/gifify'kemudian gunakangifify screencast.mkv -o screencast.gif --resize 800:-1
sabbour
2
ffmpeg -y -i input.mp4 -f image2pipe -vcodec ppm - | convert -delay 2 -loop 0 -layers Optimize - gif:- | gifsicle -d 3 -O3 -o optimized.gif

pertama-tama gunakan ffmpeg untuk mengonversi file mp4 ke gambar melalui pipa kemudian gunakan imagemagick untuk mengompresnya ke gif akhirnya dioptimalkan dengan gifsicle

Saya tidak tahu mengapa menggunakan gifscicle secara langsung tidak akan berfungsi.

atau Anda dapat membuat gif lebih kecil dengan ini

convert -dither none -matte -depth 8 -deconstruct -layers optimizePlus -colors 32 in.gif out.gif
Shuman
sumber