Làm cách nào để chuyển đổi một gif hoạt hình thành mp4 hoặc mv4 trên dòng lệnh?


79

Tôi sẽ sử dụng lệnh nào để chuyển đổi tệp video mp4 hoặc mv4 thành gif hoạt hình và ngược lại. Đó là, chuyển đổi một gif hoạt hình thành mp4 hoặc mv4.

Câu trả lời:


108

Đây là những gì làm việc cho tôi:

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

Movflags - Tùy chọn này tối ưu hóa cấu trúc của tệp MP4 để trình duyệt có thể tải nó nhanh nhất có thể.

pix_fmt - Video MP4 lưu trữ pixel ở các định dạng khác nhau. Chúng tôi bao gồm tùy chọn này để chỉ định một định dạng cụ thể có khả năng tương thích tối đa trên tất cả các trình duyệt.

vf - Các video MP4 sử dụng H.264 cần phải có kích thước chia hết cho 2. Tùy chọn này đảm bảo trường hợp đó.

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


4
Cảm ơn đây là phiên bản duy nhất làm việc cho tôi trên osx.
Pykler

1
Điều này làm việc với tôi trên Ubuntu 16.10 với ffmpeg 3.0.2, trong đó câu trả lời hàng đầu là không
con mèo

1
Cũng có thể cắt thay vì chia tỷ lệ (thay thế scalebằng crop), vì bạn sẽ chỉ cắt tối đa 1 pixel.
Thu nhỏ

Điều này cắt đứt vài giây cuối cùng cho tôi. Kết quả mp4 kết thúc sớm.
callum

38

Trong trường hợp của tôi, sử dụng ffmpegtrực tiếp đã thực hiện thủ thuật và cung cấp kết quả tốt nhất:

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

2
đã tạo một video trống (bị hỏng) trên os x
Pykler 14/07/2016

2
@Pykler có lẽ bạn nên tăng mức độ chi tiết và / hoặc kiểm tra tệp nhật ký để hiểu những gì đang xảy ra.
BenC

Tôi cũng vậy, có lẽ là "chia hết cho 2 chiều" được đề xuất trong câu trả lời của vico Vault. (làm việc cho tôi)
lapo

Phương pháp này làm việc hoàn hảo cho tôi. (Câu trả lời hàng đầu khiến 3 giây bị cắt đứt.) EDIT: oh nhưng nó không phát trên iOS :(
callum

Một trang web nói rằng bạn chỉ nên thêm -pix_fmt yuv420p
coweather

2

Một cách khác để chuyển đổi hình ảnh động GIF thành video:

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

Giá trị -crf có thể đi từ 4 đến 63. Giá trị thấp hơn có nghĩa là chất lượng tốt hơn. -b: v là bitrate tối đa được phép. Cao hơn có nghĩa là chất lượng tốt hơn.


2

Nếu bạn muốn tạo đầu ra trong "n vòng" , hãy xem giải pháp này trong một lần

Vì vậy, hãy chuyển đổi normal.gif thành loop.mp4

ví dụ phim 2 vòng:

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

ví dụ phim 5 vòng:

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

ĐƯỢC TUYỆT VỜI: có một -y [cho ghi đè]


Nếu bạn chạy ffmpeglệnh đầu tiên mà không có -y , bạn sẽ ít có cơ hội vô tình ghi đè lên thứ gì đó mà bạn không muốn. (Có lẽ cũng một cách để ffmpegchuyển video thành chính nó và thực hiện điều này trong một lệnh đường ống mà không cần tệp trung gian và ghi đè.)
FeRD

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.