2013-06-20 15 views
11

Tôi phải xử lý hàng loạt một số lượng rất cao (200.000+) của mp4 ngắn (ít hơn 10 giây) thành hình động. Tôi nghĩ rằng tôi đã thử mọi cách thực hiện dòng lệnh có thể, nhưng nó vẫn mất quá nhiều thời gian để tạo ra các gif chất lượng. Hiện tại tôi sử dụng ffmpeg để giải nén các khung hình (jpg), và hình ảnh magick chuyển đổi thành tập hợp chúng. Nó tạo ra gifs chất lượng cao, nhưng mất quá nhiều thời gian và sử dụng quá nhiều bộ nhớ và CPU, thậm chí với tinh chỉnh với bộ nhớ -limit và giới hạn bản đồ.Cách nhanh nhất để tạo các hình ảnh động từ mp4

Tôi cũng đã thử tạo gifs động trực tiếp bằng cách sử dụng ffmpeg, nhưng chất lượng là khủng khiếp nhất. Ngoài ra, tôi đã thử sử dụng gifsicle, mà có vẻ nhanh, nhưng nó chỉ mất gifs như đầu vào, và sử dụng ffmpeg để tạo ra chúng sản xuất gifs chất lượng kém.

Có ai có một số công thức nấu ăn dòng lệnh để tạo gif chất lượng cao nhanh không?

+0

Tôi đã có một chút tiếp xúc với một số công cụ này.Có thể vượt qua đầu ra thông qua đường ống đến các giai đoạn khác nhau. Điều đó có thể cải thiện đáng kể thời gian xử lý (đôi khi!). Ngoài ra, trong các nghiên cứu quản lý dự án, bạn sẽ biết rằng hầu như luôn có một sự cân bằng giữa thời gian, nguồn lực và chất lượng. ; - /. Chúc may mắn. – shellter

+1

Cũng thấy [ffmpeg chuyển đổi video .flv thành .gif với chất lượng khủng khiếp] (http://superuser.com/a/556031/110524). – LordNeckbeard

Trả lời

0

Nó có thể cải thiện đi từ hình ảnh không nén, như .ppm, ví dụ với mplayer dòng lệnh sẽ là:

mplayer -benchmark -noframedrop -nosound -vf format=rgb24 -vo pnm *.avi -osdlevel 0 

Đây sẽ lưu jpg nén/giải nén chu kỳ.

Nó cũng sẽ giúp làm việc với Ổ đĩa thể rắn.

17

Trước tiên, bạn nên tạo một bộ hình ảnh jpg với chất lượng tối đa bằng cách sử dụng các tùy chọn mplayerjpeg đặt thành 100 (jpeg: quality = 100).

mplayer -ao null -ss 0:00:00 -endpos 10 mts.flv -vo jpeg:outdir=jpeg_dir:quality=100 

Tiếp theo, bạn cần phải chuyển đổi jpgs tạo ra để gifs sử dụng convert, chỉ cần gõ:

for i in ./jpeg_dir/*.jpg; do convert "$i" "${i%.jpg}.gif"; done 

Và cuối cùng sử dụng gifsicle tạo gif động:

gifsicle --delay=10 --loop ./jpeg_dir/*.gif > anim.gif 

Ngoài ra, bạn có thể sử dụng cờ mức tối ưu hóa --optimize=03. Nó có thể hữu ích để giảm kích thước tập tin:

gifsicle --delay=10 --optimize=03 --loop *.gif > anim.gif 

Ngoài ra, bạn có thể thao tác với số lượng màu sắc --colors num của bảng hiện và --color-method method để xác định bảng màu phù hợp nhất.

Đối với tôi phương pháp thích hợp nhất là median-cut

median-cut is the median cut algorithm described by Heckbert 

Ngoài ra, tôi cố gắng để thao tác với cờ mô tả và tìm thấy tùy chọn hữu ích nhất để đạt được chất lượng tốt hơn về tạo gif-image:

gifsicle --delay=3 --optimize=03 --color-method median-cut --loop *.gif > anim.gif 

Chính xác với --delay=NUM để tương ứng với tốc độ hoạt ảnh. Thông số này phụ thuộc vào FPS của video gốc.

+0

Như đã đề cập trong bình luận ban đầu của tôi, tôi đã thử tuyến đường đó. Các sản phẩm ffmpeg gif cá nhân có chất lượng rất thấp. Những điều này dẫn đến gifs động chất lượng thấp cuối cùng. – stinkypyper

+0

Tôi đã cập nhật câu trả lời của mình bằng cách thêm một vài bước bổ sung để có được bộ hình ảnh với chất lượng cao hơn có thể cung cấp ffmpeg: mplayer -ao null -ss 0:00:00 -endpos 10 video.flv -vo jpeg: outdir = jpeg_dir; và cho i in * .jpg; chuyển đổi "$ i" "$ {i% .jpg} .gif"; làm xong –

0

Sử dụng chương trình "animate" từ gói hình ảnh ảo sau khi tách video thành hình ảnh. Như thế này animate ./*.jpg. Sau đó, chỉ cần lưu mở được hợp nhất trong hình ảnh chương trình ImageMagick dưới dạng gif. Nhưng nó có thể lớn/Sau đó nеed để tối ưu hóa và thay đổi kích thước (tốt hơn để làm điều đó với mplayer quy mô đầu tiên = 240: 180).

Các vấn đề liên quan