Nén hình ảnh tương tự?


10

Tôi cần giảm kích thước thư viện ảnh của mình để tôi tự nhiên muốn nén chúng. Nhiều người trong số họ không hoàn toàn giống nhau, nhưng vẫn rất giống nhau (những cảnh quay tiếp theo của cùng một cảnh). Có thuật toán nén nào lợi dụng thực tế này để nén những hình ảnh này một cách hiệu quả không? 7zip (LZMA) là vô dụng.

Câu trả lời:


11

Bạn có thể thử Paq 8 (fp8_v2.zip). Tôi chỉ thử nó trên 1440 hình ảnh PNG tương tự và sau đó một lần nữa trên 111 hình ảnh JPG tương tự. Đây là kết quả.

  • 1440 tệp PNG, được nén 28.631.615 byte => 2.058.653 byte
  • 111 tệp JPG, được nén 15.003.820 byte => 489.096 byte

Quá trình nén các tệp PNG mất khoảng 8 phút và 550 MB bộ nhớ khi sử dụng:

fp8_v2.exe -7 images *.png

Quá trình nén các tệp JPG mất khoảng 5 phút và 125 MB bộ nhớ khi sử dụng:

fp8_v2.exe -5 images image12*.jpg

Xem thêm: kiểm tra nén ảnh không mất dữ liệu jpg


Nén 97% cho JPG có vẻ không thực tế. Các con số trong bài kiểm tra so sánh mà bạn liên kết để cho biết mức nén là khoảng 20%
OneSol biệtNoob

@OneSolitaryNoob Bạn có quên rằng JPEG là tương tự nhau không? 110/111 = 99,1% nén dự kiến. Bài kiểm tra so sánh mà anh liên kết là về việc nén một JPEG.
Navin

@Navin nó thực sự không thể. Ngay cả khi chúng trông gần giống nhau, hầu hết các pixel sẽ hơi khác nhau.
OneSol biệtNoob

@OneSolitaryNoob Vậy thì sao? 1 giây video (30 khung hình) có thể được nén với cùng kích thước với một khung hình duy nhất. Miễn là sự khác biệt nhỏ chiếm một phần nhỏ của dữ liệu, bạn đều ổn cả.
Navin

@Navin đó là nén mất mát, nhiều chi tiết đã biến mất nhưng hầu hết mọi người sẽ không nhận thấy. Paq * là nén không mất dữ liệu
OneSol biệtNoob

1

Tôi sẽ tưởng tượng rằng biến đổi bánh xe burrows với một bộ mã hóa số học sẽ là lý tưởng cho điều này với một cửa sổ đủ lớn. Điều gì xảy ra nếu bạn định cấu hình BZIP2 để sử dụng kích thước khối bằng với một loạt ảnh nhỏ? Nó sẽ chậm hơn và chiếm nhiều bộ nhớ hơn nhưng tỷ lệ nén sẽ tăng vọt. Và bạn đã thử LZMA với kích thước khối lớn hơn chưa?


1

Đây là một giải pháp đơn giản không hoạt động cho ảnh nhưng có thể hoạt động nếu một trong số đó có nhiều ảnh có diện tích giống nhau theo pixel lớn: lưu ảnh ở định dạng không giải nén như BMP (không phải PNG hoặc GIF), sau đó TAR chúng và nén với một máy nén tốt như XZ, ví dụ như trên Linux với một cái gì đó như

tar -c myDirectory | xz -9 >myDirectory.tar.xz

Thay vì TAR và XZ, người ta có thể sử dụng 7-Zip với tùy chọn lưu trữ rắn trên nền tảng cứng để có được hiệu năng tương đương. Bằng cách này, tôi có thể nén 16 ảnh chụp màn hình tương tự, mất khoảng 900 KB mỗi ảnh khi được lưu dưới dạng tệp PNG riêng biệt, vào kho lưu trữ 2 MB. Lợi ích của giải pháp này là nó sử dụng các định dạng tệp phổ biến, vì vậy nó hoạt động mà không cần cài đặt phần mềm mới. (Thật không may, các chương trình cũ hơn và thậm chí phổ biến hơn GZIP và BZIP2 đã không làm tốt cho tôi - có thể vì kích thước khối của BZIP2 không thể được định cấu hình lớn hơn 900 KB.)


0

Không phải là tôi đã thấy. Có lẽ điều gần nhất sẽ là lấy một số JPEG tương tự và đưa chúng vào phim MJPEG. Bạn cũng có thể sử dụng APNG hoặc GIF động cho mục đích tương tự.

Tôi không chắc nó sẽ hoạt động tốt như thế nào, và có vẻ như bạn đã nói về các đoạn phim ngắn, vì vậy việc đóng gói chúng vào một tệp phim nghe có vẻ ... phản tác dụng.

Có lẽ cách tốt hơn, nếu bạn vẫn có các clip mà màn hình xuất phát, chỉ cần tìm một công cụ dòng lệnh có thể trích xuất khung chính xác cho bạn, sao chép định danh duy nhất đó vào một tệp văn bản ở đâu đó, và sau đó bạn luôn có thể dễ dàng giải nén lại khung khi bạn cần


GIF không phù hợp để nén ảnh và GIF hoạt hình thậm chí còn ít hơn. Ngay cả việc nén ảnh vào video MJPEG dường như không hữu ích trong mắt tôi, vì việc khôi phục các ảnh đơn lẻ sẽ khó khăn.
Martin

Tôi không nói rằng đó là một tốt ý tưởng ... :-) Ý tưởng cuối cùng là đặt các bức ảnh vào một phiên bản hoạt hình của định dạng ban đầu của họ.
afrazier
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.