Tạo hoạt hình GIF từ các tệp PNG


83

Có một công cụ để tạo một gifhình ảnh động từ một tập hợp các pngtập tin?

Tôi đã thử convertlệnh từ bộ ImageMagick , nhưng điều này không phải lúc nào cũng thành công. Ngoài ra, tôi có một số vấn đề với điều này:

  1. Tôi không thể biết tiến độ là gì.
  2. Bất kể tôi cố gắng gì, -delaycờ không thay đổi tốc độ khung hình của hoạt hình gif.
  3. convertxác định thứ tự khung dựa trên thứ tự chữ cái của tên tệp. Điều này có nghĩa rằng name500.pngsẽ được đặt ngay sau name50.pngvà không phải sau khi name450.pngtôi có thể khắc phục điều này bằng cách thêm 0 nhưng đây là gây phiền nhiễu.

[Tin tức] Có sự chồng chéo lớn giữa Ubuntu Stackexchange và Unix Stackexchange. Tôi đã cố gắng để phân loại một số chủ đề ở đây .
hhh

Về mục 3., bạn vẫn có thể sử dụng convertsau khi sắp xếp các tệp. Có lẽ, một cái gì đó như thế này hoạt độngfiles=$(ls name*png | sort -n -tname -k1); convert $files animation.gif
altroware

Đối với Điểm 1: convert có một -monitortham số theo dõi quá trình
Curlew

Câu trả lời:


50

Các phiên bản mới hơn của ffmpeg không có -sameq ( xem faq ) nhưng có hỗ trợ GIF.

ffmpeg -i %03d.png output.gif

Trong đó% 03d là ID khung có 3 chữ số.

Bạn cũng có thể thử sử dụng ffmpegđể tạo phim từ một chuỗi hình ảnh và sau đó chuyển đổi phim thành hoạt hình GIF (sử dụng lại ffmpeg).

# cf. http://pages.uoregon.edu/noeckel/MakeMovie.html

# first convert an image sequence to a movie
ffmpeg -sameq -i %03d.jpg output.mp4

# ... and then convert the movie to a GIF animation
ffmpeg -i output.mp4 -pix_fmt rgb24 -s qcif -loop_output 0 output.gif

10
Hướng dẫn này đã hết hạn.
nguồn gốc cao cấp

3
Các sameqtùy chọn là không có sẵn nữa. Hơn nữa, đối với tôi, điều này ghi đè lên các tệp hình ảnh gốc và không tạo ra một tệp phim hợp lệ.
Lode

Điểm để lại -sameqmã ở đó là gì? Tại sao bạn thậm chí muốn sử dụng định dạng video bị mất ( output.mp4) tạm thời? Và nếu vậy, tại sao "cùng chất lượng" với đầu vào, thay vì tốc độ bit rất cao? Tạo tác từ đó sẽ khiến mọi thứ trở nên tồi tệ hơn đối với bộ mã hóa GIF. Nếu bạn cần sử dụng video tạm thời, bạn sẽ muốn sử dụng thứ gì đó không mất dữ liệu như huffyuv. Hoặc MJPEG không có chuyển mã, chỉ cần chuyển lại các jpeg đầu vào thành MJPEG. ( -codec:video copy).
Peter Cordes

80

convertlà một công cụ dòng lệnh tiện dụng để làm điều đó. cdvào thư mục chứa png -files của bạn và chạy lệnh này:

convert -delay 10 -loop 0 *.png animation.gif

Nguồn: http://ubuntuforums.org/showthread.php?t=1132058


5
Câu hỏi đề cập convertvà một số vấn đề sử dụng nó. Câu trả lời của bạn không giải quyết bất kỳ trong số họ.
Mat

3
Đối với phiên bản ImageMagick, 6.8.7-4 2013-11-02 Q16điều này làm việc cho tôi.
Rudy Matela

7
Điều này hoạt động, nhưng 10có nghĩa là 10 * 10ms, vì vậy khá nhanh. Độ trễ của a 100là 1 giây.
Anne van Rossum

7
sử dụng tùy chọn -dispose previoushoặc -dispose 2nếu bạn đang làm việc với các PNG trong suốt
Hải Phong

4
lưu ý với bản thân tôi: mở rộng cú đúp có thể hữu ích cho việc chỉ định danh sách các hình ảnh làm đối số, ví dụ như pic_{0..20..2}.pngmở rộng pic_0.png, pic_2.pngtất cả các cách đểpic_20.png
Yibo Yang

19

Các convert's --delaylựa chọn duy nhất áp dụng đối với hình ảnh tiếp theo trên dòng lệnh. Vì vậy, convert -delay 10 *sẽ chỉ đặt độ trễ của khung đầu tiên thành 0,1 giây. Tùy chọn cần phải được lặp lại:

convert $(for a in *; do printf -- "-delay 10 %s " $a; done; ) result.gif

Đối với nhu cầu sắp xếp của bạn, chuyển đổi không sắp xếp các khung, vỏ hói *. Nếu bạn biết các khung của mình được đánh số từ 0 đến 700, bạn có thể tự mình tính toán các số:

convert $(for ((a=0; a<700; a++)); do printf -- "-delay 10 name%s.png " $a; done;) result.gif

5
Tôi không gặp phải hành vi này với converttôi convert -delay 1000 -loop 0 *.png animation.gif, thêm một độ trễ 10 giây giữa mỗi hình ảnh.
Lode

1
Bạn cũng có thể sử dụng phiên bản sắp xếp của lslệnh. Đó là:convert -delay 1000 $(ls -v name*png) output.gif
erik

7

Cập nhật:

Sử dụng convertcho png-to-gif, sau đó sử dụng gifsicle cho hình ảnh động. Đó chắc chắn không phải là một ứng dụng để làm tất cả, nhưng có thể viết thành kịch bản.


GIMP có thể tạo gif hoạt hình và cung cấp kiểm soát thời gian / độ trễ và lặp lại, v.v.


3
Tôi biết về gimp nhưng tôi không biết cách viết kịch bản. Bên cạnh đó, việc sử dụng gimp để tạo hoạt hình cũng giống như giết một con ruồi bằng đại bác
Yotam

1
Đó là một ý tưởng tồi; chất lượng sẽ rất tệ, vì mỗi khung hình sẽ được lượng tử hóa một cách riêng biệt.
Clément

2

ImageMagick có thể tạo ra một hình ảnh động gif chất lượng tốt. Kiểm tra video này - http://www.youtube.com/watch?v=OFusYizJ-bA


6
Chào mừng bạn đến với Unix & Linux! Nói chung, chúng tôi thích câu trả lời trên trang web để có thể tự đứng vững - Liên kết rất tuyệt, nhưng nếu liên kết đó bị hỏng, câu trả lời sẽ có đủ thông tin để vẫn hữu ích. Vui lòng xem xét chỉnh sửa câu trả lời của bạn để bao gồm chi tiết hơn. Xem Câu hỏi thường gặp để biết thêm.
slm

Thật là một nhận xét hữu ích ở trên ....
Luke

convert -delay 200 -loop 0 *.jpg output.gif
Lu-ca

2

ffmeg tùy chọn GIF quan trọng + dữ liệu thử nghiệm

Để bổ sung cho câu trả lời này :

wget -O opengl-rotating-triangle.zip https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.zip?raw=true
unzip opengl-rotating-triangle.zip
cd opengl-rotating-triangle
ffmpeg \
  -framerate 60 \
  -pattern_type glob \
  -i 'tmp.*.png' \
  -r 15 \
  -vf scale=512:-1 \
  out.gif \
;

Dữ liệu thử nghiệm được tạo với: https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292

Các ffmpegtùy chọn quan trọng tôi muốn nêu bật là:

  • -patter_type glob: cách thuận tiện để chọn hình ảnh
  • -framerate 60-r 15: giả sử 60 FPS trên hình ảnh đầu vào ( ffmpegkhông thể biết khác vì không có dữ liệu FPS trong hình ảnh như ở định dạng video), hãy chọn một trong 4 hình ảnh để giảm kích thước ( 4 == 60 / 15)
  • -vf scale=512:-1: đặt chiều rộng, tỷ lệ chiều cao theo tỷ lệ, thường để giảm kích thước và tiết kiệm không gian

Xem thêm:

Đã thử nghiệm trong Ubuntu 18.10, ffmpeg 4.0.2.


-1

Liên quan đến điểm 2

Phiên bản ImageMagick "display" mà tôi có (ImageMagick 6.7.2-7 2017-01-12) bỏ qua tốc độ khung hình được đặt bằng lệnh convert để tạo gif hoạt hình. Hãy thử một chương trình khác để xem gif animate như firefox.

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.