Làm cách nào tôi có thể nhận ffmpeg để chuyển đổi .mov thành .gif?


99

Tôi đang cố gắng chuyển đổi .mov thành .gif và tôi không thành công.

Đây là lỗi:

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.

Nếu tôi bỏ phần -pix_fmt rgb24 thì nó sẽ phàn nàn. Suy nghĩ về cách khắc phục?


3
FYI, Có một giải pháp tuyệt vời cho chuyển đổi chất lượng cao được đưa ra ở đây .
ryanjdillon

Câu trả lời:


161

Thứ tự của các đối số dòng lệnh quan trọng. Dòng lệnh này sẽ hoạt động nhưng sẽ tạo ra một tệp khổng lồ:

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

Lưu ý rằng bạn có thể muốn giảm tốc độ khung hình và kích thước khi bạn chuyển đổi, cũng như chỉ định thời gian bắt đầu và thời lượng. Bạn có thể không muốn chuyển đổi toàn bộ tệp ở độ phân giải và tốc độ khung hình ban đầu.

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

Kích thước tập tin vẫn sẽ rất lớn. Bạn có thể sử dụng trình tối ưu hóa GIF của ImageMagick để giảm kích thước:

convert -layers Optimize output.gif output_optimized.gif

3
Câu trả lời tuyệt vời, cảm ơn :) GIF là một định dạng điên rồ ... .mov ban đầu là 250k, .gif được chuyển đổi từ ffmpeg là convert8mb và phiên bản tối ưu hóa là 10k đáng kinh ngạc! Ấn tượng!
TooTallNate

19
ffmpeg phàn nàn về định dạng pixel và chuyển từ rgb24 sang pal8; lệnh trong câu trả lời nên được cập nhật?
dùng1071136

7
Định dạng pixel không tương thích 'rgb24' cho codec 'gif'
nguồn gốc cao cấp

1
@Andy tự động sửa thành rgb8 trong phiên bản ffmpeg của tôi.
James Campbell

Làm thế nào để làm trong Android?
Ajay Shrestha

12

Sau khi chuyển đổi:

ffmpeg -i input.mp4 input.gif 

Thử tối ưu hóa khung:

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

Và sử dụng gifsicleđể thực hiện tối ưu hóa cuối cùng:

gifsicle -O2 input_optframe.gif -o optimized.gif

Nhận 6,8mb GIF từ video 12,2mb với chất lượng gần như tương đương!


3
Tâm giải thích làm thế nào các bước này hoạt động và những gì họ đang làm?
Raystafarian

10

Tôi đã tạo một công cụ kết hợp FFmpeg, ImageMagick và giflossy thành một chương trình dòng lệnh dễ sử dụng mà bạn có thể cài đặt trong một dòng: https://github.com/vvo/gifify

Tôi khuyên mọi người sẵn sàng quay video => GIF để sử dụng nó thay vì cố gắng dành nhiều thời gian để duyệt 3 trang web tài liệu để hiểu cách thay đổi kích thước GIF hoặc thay đổi thời gian bắt đầu / kết thúc.


1
Và nếu bạn có Docker chạy trên máy của mình, chỉ cần thực hiện một bí danh như vậy: alias gifify='docker run -it --rm -v $(pwd):/data maxogden/gifify'sau đó sử dụng nógifify 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

đầu tiên sử dụng ffmpeg để chuyển đổi tập tin mp4 thành hình ảnh qua đường ống, sau đó sử dụng hình ảnh để nén nó thành gif cuối cùng đã tối ưu hóa nó với gifsicle

Tôi không biết tại sao sử dụng gifscicle trực tiếp sẽ không hoạt động.

hoặc bạn có thể làm cho gif nhỏ hơn bằng cách này

convert -dither none -matte -depth 8 -deconstruct -layers optimizePlus -colors 32 in.gif out.gif
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.