Tôi muốn làm một .gif
hình ảnh hoạt hình từ một bộ .jpg
hình ảnh nhất định.
Tôi muốn làm điều đó từ dòng lệnh, vì vậy các công cụ dòng lệnh sẽ rất được hoan nghênh.
Tôi muốn làm một .gif
hình ảnh hoạt hình từ một bộ .jpg
hình ảnh nhất định.
Tôi muốn làm điều đó từ dòng lệnh, vì vậy các công cụ dòng lệnh sẽ rất được hoan nghênh.
Câu trả lời:
Bạn có thể sử dụng gói ImageMagick . Cài đặt nó bằng lệnh:
sudo apt-get install imagemagick
Bây giờ bạn có thể tạo gif
từ một số hình ảnh ( jpg
) bằng cách sử dụng:
convert -delay 20 -loop 0 *.jpg myimage.gif
-resize 50%
.
-deconstruct
. Tôi cũng đã phát hiện ra rằng ImageMagick rất đói bộ nhớ, xem điểm chuẩn: Askubfox.com/a/1102183/52975
convert -delay 0 -loop 0 *.tif myanimated.gif
hoạt động độc đáo, trên 720 tệp tif
Để hoàn thành câu trả lời @Maythux:
-resize
tùy chọn:Trong trường hợp của tôi, tôi có 4608x3456 hình ảnh và gif được tạo là hơn 300M cho 32 hình ảnh
convert -resize 20% -delay 20 -loop 0 *.jpg myimage.gif
hoặc là
convert -resize 768x576 -delay 20 -loop 0 *.jpg myimage.gif
*.jpg
hút một chút khi xử lý các giá trị số, bạn có thể tạo một gif với các bức ảnh chưa được sắp xếp.
$ ls|cat
21-33-26_1.jpg
21-33-26_10.jpg // <--- this one
21-33-26_2.jpg
21-33-26_3.jpg
21-33-26_4.jpg
21-33-26_5.jpg
21-33-26_6.jpg
21-33-26_7.jpg
21-33-26_8.jpg
21-33-26_9.jpg
21-33-28_1.jpg // <--- should be here
21-33-28_2.jpg
21-33-28_3.jpg
...
Vì các bức ảnh được chụp rất nhanh (10 / s), tất cả chúng đều có cùng thời gian sửa đổi và bạn không thể sử dụng ls -t
ví dụ. Trên Ubuntu, bạn có thể sử dụng ls -v
thay thế, đại loại như:
convert -resize 768x576 -delay 20 -loop 0 `ls -v` myimage.gif
Sắp xếp số lượng khá khó khăn trên Mac OS X, tôi đoán bạn sẽ cần xây dựng một tập lệnh tùy chỉnh.
find
, sort
mở rộng cú đúp, và như vậy. Công ls
cụ này nổi tiếng là không phù hợp với loại điều này. Sử dụng find
. Có một chút đường cong học tập, nhưng nó đáng giá.
Bạn có thể dễ dàng làm điều này với GIMP. Trước tiên hãy cài đặt nó nếu nó chưa được cài đặt
sudo apt-get install gimp
Từ GIMP, đi tới Tệp -> Mở dưới dạng Lớp để mở tất cả các png trên lớp của riêng họ.
Từ đây, bạn có thể thực hiện các chỉnh sửa trên các lớp và sau khi hoàn tất, hãy chuyển đến Tệp -> Xuất dưới dạng . Từ hộp thoại, đảm bảo đặt loại tệp thành GIF.
Từ đó bạn sẽ đi đến các tùy chọn xuất GIF. Chọn tùy chọn ' As Animation ' và đặt các tham số theo yêu cầu.
giải pháp ffmeg + dữ liệu thử nghiệm
Kể từ Ubuntu 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8, tôi đã thấy rằng ffmpeg nhanh hơn nhiều và sử dụng ít bộ nhớ hơn .
Lệnh chuyển đổi đơn giản nhất là:
ffmpeg \
-framerate 60 \
-pattern_type glob \
-i '*.png' \
-r 15 \
-vf scale=512:-1 \
out.gif \
;
Bạn có thể lấy dữ liệu thử nghiệm của tôi với:
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
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 và chứa 256 ảnh 1024x1024 PNG.
Và đây là một dữ liệu thử nghiệm khác mà bạn có thể tạo trực tiếp trong trình duyệt của mình ngay bây giờ! https://stackoverflow.com/questions/19235286/convert-html5-canvas- resultence-to-a-video-file / 57153718 # 57153718
Các ffmpeg
tùy chọn quan trọng tôi muốn nêu bật là:
-pattern_type glob
: cách thuận tiện để chọn hình ảnh
-framerate 60
: giả sử 60 FPS trên các hình ảnh đầu vào và xuất ra cùng một FPS.
ffmpeg
không thể biết khác, vì không có dữ liệu FPS trong hình ảnh vì có định dạng video.
256 khung hình đầu vào mất khoảng 4 giây để hoàn thành.
-r 15
: không bắt buộc. Chọn một trong 4 hình ảnh để giảm kích thước ( 4 == 60 / 15
).
Với nó, identify out.gif
nói rằng GIF chỉ chứa 64 khung hình.
Nó vẫn mất 4 giây để chơi, vì vậy độ trễ được thay đổi để làm cho mọi thứ khớp.
-vf scale=512:-1
: không bắt buộc. Đặ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.
Để ImageMagick hoạt động, trước tiên tôi phải sửa đổi giới hạn ổ đĩa và bộ nhớ của nó /etc/ImageMagick-6/policy.xml
như được giải thích tại: https://superuser.com/questions/1178666/imagemagick-convert-quits-after-some-pages
Xem thêm:
Điểm chuẩn của ImageMagick vs ffmpeg
Tôi đã so sánh các lệnh:
/usr/bin/time -v convert *.png -deconstruct -delay 1.6 out-convert.gif
/usr/bin/time -v ffmpeg \
-framerate 60 \
-pattern_type glob \
-i '*.png' \
out-ffmpeg.gif \
;
Các lệnh được xây dựng để tạo ra các đầu ra càng gần càng tốt để làm cho phép so sánh hợp lệ:
/usr/bin/time -v
: được sử dụng để tìm mức sử dụng bộ nhớ tối đa như được giải thích tại: https://stackoverflow.com/questions/774556/peak-memory-usage-of-a-linux-unix- process
-deconstruct
: Ảnh GIF chỉ có thể chứa hình chữ nhật được sửa đổi tối thiểu từ khung trước để làm cho GIF nhỏ hơn.
ffmpeg
tính toán các khác biệt theo mặc định, nhưng ImageMagick thì không, trừ khi -deconstruct
được sử dụng.
Về cơ bản, bạn sẽ muốn sử dụng tùy chọn đó mỗi lần với ImageMagick.
Chúng ta có thể quan sát sự khác biệt với:
identify out.gif
Với phiên bản nén, tất cả các khung có kích thước nhỏ hơn kích thước ban đầu, ví dụ:
out.gif[0] GIF 1024x1024 1024x1024+0+0 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
out.gif[1] GIF 516x516 1024x1024+252+257 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
out.gif[2] GIF 515x520 1024x1024+248+257 8-bit sRGB 256c 16.7865MiB 0.010u 0:00.010
Trong ví dụ này, khung thứ hai chỉ 516x516
thay vì 1024x1024 đầy đủ và được đặt ở vị trí bù 252+257
. Do đó, nó chỉ chứa tam giác giữa.
Xem thêm: làm cách nào để thay đổi kích thước tệp GIF động bằng ImageMagick?
-delay
: giá trị khớp với 60FPS của ffmpeg
. Không quan trọng đối với hiệu suất chuyển đổi, nhưng tôi không muốn mạo hiểm.
Các GIF đầu ra có cùng kích thước và trông giống hệt nhau.
Chúng tôi nhận được cho ImageMagick:
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:56.16
Maximum resident set size (kbytes): 2676856
và cho ffmpeg:
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:04.41
Maximum resident set size (kbytes): 97172
từ đó chúng ta thấy rằng:
Kiểm tra phần cứng: máy tính xách tay Lenovo ThinkPad P51 , Intel Core i7-7820HQ, 32GB (16 + 16) DDR4 2400 MHz SODIMM, 512GB SSD PCIe TLC OPAL2.
-r
và -v
ra lệnh, vẫn gif đầu ra có chất lượng thấp hơn nhiều so với các tệp png gốc. Làm thế nào để giữ chất lượng gif như các tệp png đã cho?
-framerate 60 -r 60
. Kiểm tra GIF được tạo và nhập hình ảnh bằng các công cụ ImageMagick identify
để thử và tìm hiểu điều gì đang xảy ra.
Bạn có thể sử dụng một chương trình có tên là convert được bao gồm trong gói hình ảnh. Nó là dòng lệnh điều khiển, nhưng rất dễ sử dụng. Cài đặt nó thông qua trung tâm phần mềm hoặc đi đến dấu nhắc lệnh và nhập
sudo apt-get install imagemagick
Bây giờ để tạo .gif.
convert -delay 100 -size 100x100 xc:SkyBlue \
-page +5+10 balloon.gif -page +35+30 medical.gif \
-page +62+50 present.gif -page +10+55 shading.gif \
-loop 0 animation.gif
* Lưu ý ví dụ trên là trực tiếp từ ví dụ về Image Magick
convert -delay 20 -loop 0 *.png out.gif
tạo một vòng lặp GIF.