Câu trả lời:
Đâ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
scale
bằng crop
), vì bạn sẽ chỉ cắt tối đa 1 pixel.
Trong trường hợp của tôi, sử dụng ffmpeg
trự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
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.
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 đè]
ffmpeg
lệ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 có một cách để ffmpeg
chuyể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 đè.)
Phiên bản MacO như sau:
$ ffmpeg -i input.avi -pix_fmt yuv420p output.mp4