2012-09-24 19 views
6

Tôi tạo ra một GIF sử dụng ffmpeg sử dụng lệnh sau:GIF tạo ra từ một tập tin phim với ffmpeg là thực sự lớn trong kích thước

ffmpeg -i foo.mp4 -ss 00:00:18 -t 00:00:06 -pix_fmt rgb24 bar.gif

Tuy nhiên, kết quả bar.gif là hơn 300 MB trong kích thước trong khi bộ phim file foo.mp4 khoảng 15 MB!

Điều gì mang lại?

+1

đã u cố gắng lựa chọn pix_fmt khác? –

+0

@RyanErickson Theo [tài liệu] (http://ffmpeg.org/ffmpeg.html), tôi không tìm thấy bất kỳ tùy chọn hữu ích nào. Obv Tôi nhìn thấy một cái gì đó như bạn tin tưởng. Bạn sẽ giới thiệu tùy chọn nào? Tất cả những gì tôi thấy là sử dụng '-window_size' nhưng điều đó hoàn toàn không hoàn thành công việc – drN

+0

Tất cả: Vui lòng đọc bảng điểm trò chuyện của @thirdender, (s) anh ấy cung cấp một [link] rất hữu ích (http: //www.alecjacobson .com/weblog /? p = 2102) trong đó. – drN

Trả lời

4

Câu trả lời toàn diện cho câu hỏi này rất khó :-p Tóm lại, nó đi xuống cách nén được thực hiện ở mỗi định dạng.

Trong hoạt ảnh GIF, mỗi khung hình là một hình ảnh GIF riêng biệt. Tất cả các hình ảnh GIF sau đó được lưu trữ trong một tệp GIF lớn, với các hướng dẫn để phát lại các khung hình với độ trễ nhất định giữa các khung hình. Để tối ưu hóa các khung hình, bạn có thể chạy GIF thông qua một chương trình có thể xóa thông tin trùng lặp từ khung này sang khung khác (bộ lọc "Tối ưu hóa hoạt ảnh" của GIMP là cách tốt để làm điều đó: GIMP – Simple Animations).

Mặt khác, các định dạng video như MP4 có cách tiếp cận khác. Họ giả định rằng các khung hình sẽ giống nhau và chỉ lưu trữ sự khác biệt giữa hai khung hình. Ngoài ra, lượng dữ liệu cho mỗi khung hình được giới hạn ở tốc độ bit video được chỉ định khi bạn bắt đầu nén. Nén mất dữ liệu được thực hiện để đưa tệp video xuống tốc độ bit mong muốn. Để tối ưu hóa hơn nữa tệp video, hầu hết các trình chuyển mã video bao gồm các tùy chọn cho "mã hóa hai lần". Điều này chạy qua video hai lần: lần đầu tiên nó tập hợp thông tin về những phần nào của tệp phức tạp hơn và sau đó là lần thứ hai nó nén mọi phần không phức tạp của video mạnh mẽ hơn.

Có nhiều tối ưu hóa khác là một phần của quá trình mã hóa video chỉ đơn giản là thiếu định dạng tệp GIF. Ngoài ra, điều đáng chú ý là một hoạt ảnh GIF sẽ bị giới hạn ở bảng màu 256, điều này có thể dẫn đến phối màu ảnh. MP4 sử dụng một cái gì đó tương tự như một JPEG nén cho các khung hình video (mặc dù với tối ưu hóa bổ sung nhắm mục tiêu cụ thể vào video ... định dạng MJPEG cũ về cơ bản chỉ là đống ảnh JPEG, cũng giống như hình ảnh động GIF là ngăn xếp của hình ảnh GIF).

Nếu bạn có thể cung cấp thêm thông tin về trường hợp sử dụng cụ thể của bạn, chúng tôi có thể giúp bạn tìm ra giải pháp tốt hơn.

+0

Loại thông tin nào cần thiết về trường hợp sử dụng của tôi? Cảm ơn! – drN

+0

Bạn có dự định sử dụng GIF cho một trang web không?Nếu vậy, bạn đã xem thẻ 'VIDEO' thay thế chưa? – thirdender

+0

Có, nó dành cho một trang web. Thẻ 'VIDEO' bạn nói ....? Tôi sẽ xem xét nó. – drN

2

tôi đồng ý với bạn, sử dụng lệnh này không phải là tối ưu:

avconv -i input.mp4 -pix_fmt rgb24 output.gif 

Sử dụng GIMP như sau sau chuyển đổi này:

enter image description here

+0

Sau đó, bạn phải chọn Tệp> Xuất dưới dạng ..., chọn định dạng GIF, nhấp vào xuất, kiểm tra "Làm hình động" và chỉ định độ trễ khung hình phù hợp (bạn có thể lấy tên lớp trong cửa sổ Lớp). –