অনেকগুলি অনুরূপ পিএনজি চিত্রের এই (লসলেস) সংক্ষেপণ পদ্ধতিটি অকার্যকর কেন?


21

আমি কেবল নিম্নলিখিত জিনিসটি পেরিয়ে এসেছি: আমি পিএনজি চিত্রের একাধিক অভিন্ন অনুলিপি একটি ফোল্ডারে রেখেছি এবং তারপরে নিম্নলিখিত পদ্ধতিগুলির সাহায্যে সেই ফোল্ডারটি সংকুচিত করার চেষ্টা করেছি:

  • tar czf folder.tar.gz folder/
  • tar cf folder.tar folder/ && xz --stdout folder.tar > folder.tar.xz (এটি একটি অভিন্ন চিত্রের জন্য ভাল কাজ করে তবে অনুরূপ চিত্রগুলির জন্য লাভটি শূন্য হয়)
  • zip -r folder.zip folder/

যখন আমি মাপ চেক করা .tar.gz, .tar.xz, .zipআমি উপলব্ধি এটা প্রায় যে কোন একটির মত যে folder/
আমি বুঝতে পেরেছি যে একটি পিএনজি ইমেজ নিজেই একটি উচ্চ স্তরের সংক্ষেপণ থাকতে পারে এবং তাই আরও সংকোচিত করা যায় না। তবে অনেকগুলি অনুরূপ (এই ক্ষেত্রে এমনকি সাদৃশ্যযুক্ত) পিএনজি চিত্রগুলি কোনও সংরক্ষণাগারে মার্জ করার পরে এবং সংরক্ষণাগারটি সংকুচিত করার সময় আমি প্রয়োজনীয় আকারটি উল্লেখযোগ্যভাবে হ্রাস পেতে আশা করব। অভিন্ন চিত্রগুলির ক্ষেত্রে আমি একক চিত্রের প্রায় আকারের আকার আশা করব।


2
এই আচরণটি কেবল পিএনজি ফাইলের সাথে উপস্থিত?
pdexter

7
এটি একটি অনাকাঙ্ক্ষিত প্রশ্নের উত্তর হিসাবে এটি একটি উত্তর না করা, তবে আপনি যদি জানেন যে আপনি প্রায় একই ধরণের চিত্রের সংকোচনের কাজ করতে চলেছেন তবে আপনি সর্বদা সমস্ত চিত্র প্রতিস্থাপন করতে পারবেন তবে প্রথম চিত্রটির সাথে বাইনারি ডিফের সাহায্যে প্রথমটি তৈরি করতে পারেন। চিত্রটি শোরগোলের নয় বলে ধরে নেওয়া, আপনি খুব সংকোচনযোগ্য আউটপুট দিয়ে শেষ করবেন এবং মূল চিত্রগুলি এখনও পুনরুত্পাদনযোগ্য হবে।
বাল্ড্রিক

আপনি যদি সঙ্কুচিত ফাইলগুলি ব্যবহার করেন (যেমন .bmp) টার.gz ফাইলটি সাদৃশ্যটির সুযোগ নিতে পারে। (কমপক্ষে যদি
মিলটি অনেকগুলি

1
আমি এ সম্পর্কে কিছুই জানি না, তবে উইকিপিডিয়া অনুসারে, "জেডপিএকিউ" সংরক্ষণাগার ফর্ম্যাটটি অনুলিপিকে সমর্থন করে, যা আমি বিশ্বাস করি আপনার পরে কি। en.wikipedia.org/wiki/ZPAQ#Deduplication
coneslayer

আপনি ইতিমধ্যে সঙ্কুচিত এমন কিছু সংকোচনের চেষ্টা করছেন। এখানে দেখুন
কাইল খালাফ

উত্তর:


34

সংক্ষেপণ অ্যালগরিদমগুলি কীভাবে কাজ করে তা একবার দেখুন। কমপক্ষে লেম্পেল-জিভ পরিবারের যারা ( gzip এলজেড 7777 ব্যবহার করে , zipসম্ভবত বেশিরভাগ ক্ষেত্রেই তা করে এবং xz এলজেডএমএ ব্যবহার করে ) কিছুটা স্থানীয়ভাবে সংকোচিত হয় : একে অপরের থেকে দূরে থাকা মিলগুলি সনাক্ত করা যায় না।

পদ্ধতিগুলির মধ্যে বিশদগুলি পৃথক, তবে নীচের লাইনটি এটি হল যে আলগোরিদম দ্বিতীয় চিত্রে পৌঁছানোর সাথে সাথে এটি প্রথমটির শুরুতে ইতিমধ্যে "ভুলে" গেছে। ইত্যাদি।

আপনি চেষ্টা করতে পারেন এবং নিজেই সংক্ষেপণ পদ্ধতির পরামিতি পরিবর্তন করতে পারেন; যদি উইন্ডো আকার (LZ77) সম্মান। ব্লক / অংশ আকার (পরবর্তী পদ্ধতিগুলি) কমপক্ষে দুটি চিত্রের মতো বড়, আপনি সম্ভবত আরও সংক্ষেপণ দেখতে পাবেন।


মনে রাখবেন যে উপরেরটি কেবলমাত্র একইরকম চিত্র বা প্রায় একই ধরণের সঙ্কুচিত ছবিগুলি থাকলে প্রযোজ্য । মতভেদ থাকলে সংকুচিত চিত্রগুলি মেমরির মতো কিছু দেখতে নাও পারে। পিএনজি সংক্ষেপণ কীভাবে কাজ করে তা আমি জানি না; আপনি নিজে ভাগ করা সাবস্ট্রিংগুলির জন্য চিত্রগুলির হেক্স উপস্থাপনা চেক করতে চাইতে পারেন।

আরও মনে রাখবেন যে পরিবর্তিত প্যারামিটার এবং অপব্যবহারের অপ্রয়োজনীয়তার পরেও আপনি কোনও চিত্রের আকারে নেমে যাবেন না। বৃহত্তর অভিধানের অর্থ বৃহত্তর কোড-শব্দের আকার, এবং দুটি চিত্র হুবহু মিল থাকলেও আপনাকে একাধিক কোড-শব্দ ব্যবহার করে দ্বিতীয়টি এনকোড করতে হতে পারে (যা প্রথম দিকে নির্দেশ করে)।


3
আরও সঠিক উত্তর: জিজেপ এবং জিপ একই ল্যান্ডফ্ল্যাড কোডেক ব্যবহার করে যা এলজেড 7777 + হাফম্যান তত্ত্বের উপর ভিত্তি করে।
নায়ুকি

হা! গল্পের অর্ধেকটা; দেখতে আমার উত্তর বাকী অর্ধেক, অথবা Nayuki এর মহান উত্তর
ডিডাব্লু

1
উত্তরাধিকারের জন্য: সংরক্ষণাগার ফর্ম্যাটগুলি যেগুলি ফাইলগুলিকে একক টুকরো টুকরো টুকরো করে সংকুচিত করে শক্ত বলে অভিহিত করে ফাইন্ডের মধ্যে অপ্রয়োজনীয় শোষণ করে । 'দৃ solid়তা' ইত্যাদির মধ্যবর্তী স্তরগুলির জন্য অন্যান্য পদ আছে কিনা তা নিশ্চিত নন
আন্ডারস্কোর_

22

কেন এমন হয়। এখানে দুটি পৃথক প্রভাব ঘটছে:

  • প্রতিটি ফাইল স্বাধীনভাবে সংকুচিত হয়। জিপ সহ কিছু আর্কাইভ প্রোগ্রামগুলি প্রতিটি ফাইল স্বাধীনভাবে সংকুচিত করে, একটি ফাইল থেকে অন্য ফাইলে মেমরি না করে। অন্য কথায়, প্রতিটি ফাইল পৃথকভাবে সংকুচিত হয়, তারপরে সংকুচিত ফাইলগুলি একটি সংরক্ষণাগারে সংযুক্ত করা হয়।

  • স্বল্পমেয়াদী স্মৃতি. কিছু সংরক্ষণাগার প্রোগ্রামগুলি পরের ফাইলটিকে আরও ভালভাবে সংকুচিত করতে সহায়তা করার জন্য একটি ফাইল সম্পর্কিত তথ্য ব্যবহার করতে পারে। তারা কার্যকরভাবে ফাইলগুলি একত্রিত করে, তারপরে ফলাফলটি সংকুচিত করে। এটি একটি উন্নতি।

    এ সম্পর্কে আরও আলোচনার জন্য নায়ুকির উত্তরও দেখুন।

    তবে, দ্বিতীয় সমস্যা আছে। জিপ, জিজিপ এবং বিজিপ 2 সহ কয়েকটি সংক্ষেপণ স্কিমগুলির সীমাবদ্ধ মেমরি রয়েছে। তারা ফ্লাইটে ডেটা সংকুচিত করে এবং অতীত 32KB এর ডেটা মনে রাখে, তবে তারা ফাইলের আগে যে ডেটা ঘটেছিল সে সম্পর্কে কিছুই মনে রাখে না। অন্য কথায়, যদি সদৃশগুলি 32KB এর থেকে আরও দূরে দেখা যায় তবে তারা সদৃশ ডেটা খুঁজে পাবে না। ফলস্বরূপ, যদি অভিন্ন ফাইলগুলি সংক্ষিপ্ত হয় (প্রায় 32KB এর চেয়ে কম), সংক্ষেপণ অ্যালগরিদম সদৃশ ডেটা সরিয়ে ফেলতে পারে, তবে অভিন্ন ফাইলগুলি দীর্ঘ হলে, সংক্ষেপণ অ্যালগরিদম হোজে যায় এবং মূল্যহীন হয়ে যায়: এটি কোনওটি সনাক্ত করতে পারে না আপনার ডেটাতে সদৃশ। (Bzip 32KB এর পরিবর্তে অতীত 900KB বা এর বেশি ডেটা মনে রাখে))

    সমস্ত স্ট্যান্ডার্ড সংক্ষেপণ অ্যালগরিদমের কিছু সর্বাধিক মেমরি আকার থাকে, এর বাইরে তারা নিদর্শনগুলি সনাক্ত করতে ব্যর্থ হয় ... তবে কারও কারও কাছে এই সংখ্যাটি অন্যদের তুলনায় অনেক বড়। Bzip এর জন্য এটি 900KB এর মতো কিছু। এক্সজেডের জন্য এটি 8 এমবি (ডিফল্ট সেটিংস সহ) এর মতো কিছু। 7z এর জন্য এটি 2GB এর মতো কিছু। পিএনজি ফাইলের অনুলিপি অনুলিপি (যা সাধারণত 2 গিগাবাইটের চেয়ে অনেক কম ছোট) সনাক্ত করতে 2 জিবি যথেষ্ট বড়। অতিরিক্তভাবে, 7z এছাড়াও সংরক্ষণাগারটিতে একে অপরের পাশে যে একে অপরের সাথে সমান হতে পারে এমন ফাইল স্থাপন সম্পর্কে চালাক হওয়ার চেষ্টা করে, সংক্ষেপককে আরও ভালভাবে কাজ করতে সহায়তা করে; তার সম্পর্কে কিছুই জানে না।

    আরও দেখুন রাফায়েল এর উত্তর এবং Nayuki এর উত্তর এই মর্মে আরো ব্যাখ্যার জন্য।

এটি আপনার সেটিংসে কীভাবে প্রযোজ্য। আপনার নির্দিষ্ট উদাহরণের জন্য, আপনি পিএনজি চিত্রগুলির সাথে কাজ করছেন। পিএনজি চিত্রগুলি নিজেরাই সংকুচিত হয়, সুতরাং আপনি প্রতিটি পিএনজি ফাইলটি মূলত এলোমেলো-দেখানো বাইটের ক্রম হিসাবে ভাবতে পারেন, কোনও ধরণের ফাইল বা নকলের সাথে ফাইলের মধ্যে নেই। কোনও একক পিএনজি চিত্র দেখলে কোনও সংক্ষেপককে শোষণ করার মতো কিছুই নেই nothing এইভাবে, আপনি যদি একটি একক পিএনজি ফাইল সংকোচনের চেষ্টা করেন (বা একটি জিপ / টার / ... একটি মাত্র পিএনজি ফাইল সমন্বিত সংরক্ষণাগার তৈরি করেন), আপনি কোনও সংক্ষেপণ পাবেন না।

এখন আপনি যদি একই পিএনজি ফাইলের একাধিক অনুলিপিগুলি সংরক্ষণ করার চেষ্টা করেন তবে কী হবে তা দেখুন:

  • ছোট ফাইল। যদি পিএনজি ফাইলটি খুব ছোট হয় তবে জিপ ব্যতীত সমস্ত কিছুই দুর্দান্ত কাজ করবে। জিপ দর্শনীয়ভাবে ব্যর্থ হবে: এটি প্রতিটি ফাইলকে স্বতন্ত্রভাবে সংকুচিত করে, সুতরাং এটির মধ্যে ফাইলগুলির মধ্যে অপ্রয়োজনীয়তা / নকল সনাক্ত করার কোনও সুযোগ নেই। তদুপরি, এটি প্রতিটি পিএনজি ফাইল সংকোচনের চেষ্টা করার সাথে সাথে এটি কোনও সংকোচন অর্জন করে না; একটি জিপ সংরক্ষণাগার আকার বিশাল হবে। বিপরীতে, একটি টার আর্কাইভের আকার (gzip, bzip2, বা xz দিয়ে সংকুচিত করা হোক না কেন) এবং একটি 7z সংরক্ষণাগার ছোট হবে, কারণ এটি মূলত ফাইলটির একটি অনুলিপি সঞ্চয় করে এবং তারপরে লক্ষ্য করা যায় যে অন্যগুলি সমস্ত অভিন্ন - তারা উপকৃত হয় এক ফাইল থেকে অন্য ফাইলের স্মৃতি ধরে রাখা থেকে।

  • বড় ফাইল। যদি পিএনজি ফাইলটি বড় হয় তবে কেবল 7z ভাল কাজ করে। বিশেষত জিপ দর্শনীয়ভাবে ব্যর্থ হতে থাকে। এছাড়াও, tar.zip এবং tar.bzip2 খারাপভাবে ব্যর্থ হয়, যেহেতু ফাইলের আকার কমপ্রেসরের মেমরি উইন্ডোর চেয়ে বড়: ); এটি ফাইলটির দ্বিতীয় অনুলিপিটির শুরু দেখতে শুরু হওয়ার সাথে সাথে এটি প্রথম ফাইলটির শুরুতে প্রদর্শিত বাইট সিকোয়েন্সগুলি ভুলে গিয়েছে এবং এই ডেটাটি আসলে একটি নকল হিসাবে সংযোগ তৈরি করতে পারে না।

    বিপরীতে, tar.xz এবং 7z একটি বড় পিএনজি ফাইলের একাধিক অনুলিপি সহ দুর্দান্ত কাজ চালিয়ে যাচ্ছে। তাদের কাছে "ছোট মেমোরি আকারের" সীমাবদ্ধতা নেই এবং তারা লক্ষ্য করতে সক্ষম হন যে ফাইলটির দ্বিতীয় অনুলিপি প্রথম অনুলিপিটির অনুরূপ, সুতরাং এটি দ্বিতীয়বার সংরক্ষণ করার দরকার নেই।

আপনি এই সম্পর্কে কি করতে পারেন। 7z ব্যবহার করুন। এটিতে একদল হিউরিস্টিক্স রয়েছে যা অভিন্ন বা অনুরূপ ফাইলগুলি সনাক্ত করতে এবং সেই ক্ষেত্রে সত্যিই সংকোচন করতে সহায়তা করবে। আপনি lzop কম্প্রেশন সহ lrzip এ দেখতে পারেন।

আমি কিভাবে জানবো? এলোমেলো বাইটযুক্ত একটি ফাইলের 100 কপি দিয়ে কিছু পরীক্ষা-নিরীক্ষার চেষ্টা করে আমি এটি যাচাই করতে সক্ষম হয়েছি। আমি একটি 4KB ফাইলের 100 কপি, 1MB ফাইলের 100 কপি এবং 16MB ফাইলের 100 কপি চেষ্টা করেছি। আমি যা পেয়েছি তা এখানে:

Size of file      Size of compressed archive (with 100 copies)
                  zip  tar.gz  tar.bz2  tar.xz    7z
         4KB    414KB     8KB     10KB     5KB    5KB
         1MB    101MB   101MB    101MB     1MB    2MB
        16MB    1.6G    1.6GB    1.6GB   1.6GB  401MB

আপনি দেখতে পাচ্ছেন, জিপটি আপনার ফাইলটি যত ছোটই হোক না কেন ভয়ঙ্কর। আপনার চিত্রগুলি খুব বেশি বড় না হলে 7z এবং xz উভয়ই ভাল (তবে xz ভঙ্গুর এবং চিত্রগুলি সংরক্ষণাগারে যে ক্রমে সাজানো হবে তার উপর নির্ভর করবে, যদি আপনার কিছু ডুপ্লিকেট এবং কিছু অ-নকল একসাথে মিশ্রিত করা থাকে)। এমনকি বড় ফাইলগুলির জন্যও 7z বেশ সুন্দর good

তথ্যসূত্র। এটি সুপার ইউজারের বেশ কয়েকটি পোস্টেও ভালভাবে ব্যাখ্যা করা হয়েছে। এটা দেখ:


5
এটিও মনে রাখা উচিত যে ১৯৯৯ সালের দিকে জিপ ফর্ম্যাটটি তৈরি করা হয়েছিল (পিকেজিআইপি ১৯৮৯ সালে জিপ ফর্ম্যাটটি চালু করে উইকিপিডিয়া বলে, এবং ১৯৯৩ সালে ডিফল্ট চালু হয়েছিল)। এই সময়ের মধ্যে, একটি যুক্তিসঙ্গতভাবে সাধারণ পিসি হতে পারে একটি 286 বা 386 (486 1989 সালে প্রবর্তিত হয়েছিল, তবে সর্বদা হিসাবে, ধরতে কিছুটা সময় নিয়েছিল) র্যামের 2-4 এমবি দিয়ে ডস চালানো হতে পারে, কেবল 400- যার মধ্যে 500 কেবি চালাক প্রোগ্রামিং (ইএমএস, এক্সএমএস) সমর্থন ছাড়াই সরাসরি ব্যবহারযোগ্য, যার জন্য উপলব্ধ হওয়ার নিশ্চয়তা ছিল না। এই পরিবেশে, একটি ছোট কম্প্রেশন উইন্ডো আকার বেশ প্রয়োজন ছিল।
একটি সিভিএন

"প্রতিটি ফাইল স্বতন্ত্রভাবে সংকুচিত" - মান এবং সরঞ্জামগুলির মধ্যে এটি বন্যভাবে পরিবর্তিত হয় বলে মনে হয়। উবুন্টুর ডিফল্ট প্যাকেজিং সফ্টওয়্যারটির সাথে আমার অভিজ্ঞতা হ'ল সংরক্ষণাগারটি খোলার সময় মনে হয় এটি সবকিছু সঙ্কুচিত করে। আমি প্রায়শই ভেবেছিলাম যে এটি প্রতিটি ফাইলকে স্বাধীনভাবে সংকুচিত করা উচিত , কারণ ব্যবহারযোগ্যতা লাভগুলি সাধারণত সংকোচনের ত্রুটিগুলি ছাড়িয়ে যায়।
রাফেল

"এলোমেলো বাইটযুক্ত একটি ফাইলের 100 কপি" - "অনুরূপ" ফাইলগুলির কী? (প্রকৃত প্রশ্ন দিকে, কিভাবে অনুরূপ হয় অনুরূপ ইমেজ PNGs?)
রাফায়েল

রাফেল তার উত্তরে এ সম্পর্কে একটি ভাল বক্তব্য রেখেছিলেন। আসলে আমার কাছে অনেকগুলি অনুরূপ (অভিন্ন নয়) চিত্র রয়েছে যা আমি সঞ্চয় করতে চাই। পদগুলির ক্ষেত্রেও তারা একই কাঠামোটি সামান্য প্রকরণের সাথে দেখায় (তীব্রতা এবং পটভূমির প্রতিও) with তবে পার্থক্যগুলি এত কম যে এগুলি খুব কমই দৃশ্যমান। আমি tarতাদের চেষ্টা করেছিলাম এবং তারপরে সংক্ষেপে xz(যা অভিন্ন চিত্রগুলির জন্য খুব ভাল কাজ করেছে) তবে অনুরূপ চিত্রের ক্ষেত্রে লাভটি শূন্য হয়। আমি প্রত্যেকে images 831KB আকারের 71 টি চিত্র নিয়ে চেষ্টা করেছি।
a_guest

2
@a_guest - এটি ভাল যাচ্ছে না। অনুরূপ দেখাচ্ছে পিএনজি চিত্রগুলিতে খুব আলাদা আলাদা বাইট সামগ্রী থাকবে (পিএনজি সংকোচনের কারণে)। আরও দেখুন সুপারুজার . com / q / 730592/ 93541 , superuser.com/q/418286/93541 , superuser.com/q/893206/93541 , superuser.com/q/921140/93541 - মূলত, কোনও ভাল সমাধান নেই।
ডিডাব্লু

10

প্রথমত, দ্রষ্টব্য যে পিএনজি চিত্র বিন্যাসটি মূলত কাঁচা আরজিবি পিক্সেল (কিছু হালকা ফিল্টারিং সহ) ডিফল্ট সংক্ষেপণ বিন্যাসের মাধ্যমে ধাক্কা pushed সাধারণভাবে বলতে গেলে, সংকুচিত ফাইলগুলি (পিএনজি, জেপিইজি, এমপি 3, ইত্যাদি) আবার সংকুচিত হওয়ার কোনও সুবিধা দেখতে পাবে না। সুতরাং ব্যবহারিক অভিপ্রায়গুলির জন্য, আমরা আপনার PNG ফাইলটিকে বাকি পরীক্ষার জন্য সংবিধানহীন এলোমেলো ডেটা হিসাবে বিবেচনা করতে পারি।

দ্বিতীয়ত, নোট করুন যে জিপ এবং জিজিপ ফর্ম্যাটগুলি ডিফল্ট কোডেকও ব্যবহার করে। (এটি ব্যাখ্যা করবে যে কোনও একক ফাইলকে জিপিং করা বনাম জিপ করা কেন একই ধরণের আউটপুট আকার তৈরি করে)


এখন আমাকে প্রতিটি পরীক্ষার ক্ষেত্রে স্বতন্ত্রভাবে মন্তব্য করার অনুমতি দিন:

  • tar czf folder.tar.gz folder/

    এটি এমন একটি (সংকুচিত) টিআর ফাইল তৈরি করে যা আপনার সমস্ত অভিন্ন পিএনজি ফাইলকে সংযুক্ত করে (একটি ক্ষুদ্র পরিমাণের মেটাডেটা এবং প্যাডিং যুক্ত করে)। তারপরে এই একক ফাইলটি একটি সংকুচিত আউটপুট ফাইল তৈরি করতে gzip কমপ্রেসর মাধ্যমে প্রেরণ করা হয়।

    দুর্ভাগ্যক্রমে, ডিফল্ট ফর্ম্যাটটি কেবল 32768 বাইটের একটি LZ77 অভিধান উইন্ডো সমর্থন করে। সুতরাং যদিও টিআর-তে পুনরাবৃত্ত তথ্য রয়েছে, যদি আপনার পিএনজি ফাইলটি 32 কিবি-র চেয়ে বেশি হয় তবে নিশ্চিতভাবে ডিফল্ট সংক্ষেপক একই তথ্য পুনরাবৃত্তি হওয়ার সুযোগটি গ্রহণ করার জন্য যথেষ্ট পরিমাণে ডেটা মনে রাখতে পারে না।

    অন্যদিকে, আপনি যদি এই পরীক্ষার সাথে আবার চেষ্টা করেন, বলুন, একটি 20 কেবি পিএনজি ফাইলটি 10 ​​বার নকল হয়েছে, তবে সম্ভবত আপনি 20 কেবি-র চেয়ে কিছুটা বড় জিজেপ ফাইল পাবেন।

  • tar cf folder.tar folder/ && xz --stdout folder.tar > folder.tar.xz

    এটি আগের মতোই একটি টিআর ফাইল তৈরি করে এবং তারপরে xz ফর্ম্যাট এবং LZMA / LZMA2 সংক্ষেপক ব্যবহার করে। আমি এই পরিস্থিতিতে LZMA সম্পর্কিত তথ্য খুঁজে পাইনি, তবে উইন্ডোজের জন্য 7-জিপ থেকে আমি জানি এটি বড় অভিধান উইন্ডো মাপগুলিকে সমর্থন করতে পারে (উদাঃ 64 এমআইবি)। সুতরাং এটি সম্ভব যে আপনি সাব-হাইমেন সেটিংস ব্যবহার করছিলেন এবং এলজেডএমএ কোডেক টিআর ফাইলটি কেবল একটি পিএনজি ফাইলের আকারেই হ্রাস করতে সক্ষম হতে পারে।

  • zip -r folder.zip folder/

    জিপ ফর্ম্যাটটি "শক্ত" সংরক্ষণাগারগুলি সমর্থন করে না; এর অর্থ হ'ল প্রতিটি ফাইল স্বাধীনভাবে সংকুচিত হয়। আমরা ধরে নিয়েছি প্রতিটি ফাইলই সংবিধানমুক্ত। সুতরাং প্রতিটি ফাইল একইরূপে ব্যবহার করা যায় না এবং জিপ ফাইলটি সমস্ত ফাইলের সরল কনটেন্টেশন হিসাবে বড় হবে।


xzডিফল্টরূপে xz -6মোডে চলে, যা একটি ৮ টি মাইবি এলজেডএমএ ২ অভিধান ব্যবহার করে । আমার দেবিয়ান সিস্টেমে ম্যান পেজটিতে তাত্ক্ষণিকভাবে খুঁজে পেলাম না যে সংক্ষেপকটির জন্য ডিফল্ট উইন্ডো আকারটি।
একটি সিভিএন

ভাল উত্তর! দ্বিতীয় ক্ষেত্রে আমি আসলে নিম্নলিখিতটি করছিলাম: tar czf folder.tar.gz folder/ && xz --stdout folder.tar.gz > folder.tar.gz.xzকোনও প্রভাব ছাড়াই (যা আপনি ব্যাখ্যা করেছেন তা অনুসারে) বোঝায়। আমি অনুমান করি যে এই সমস্ত সংকোচনের জিনিসগুলিতে আমি কিছুটা হারিয়েছি: ডি ব্যবহার করার সময় tar cf folder.tar folder/ && xz --stdout folder.tar > folder.tar.xzআমি আসলে একটি চিত্রের আকারের চেয়ে কিছুটা বেশি শেষ করি (যা Mi৪ মাইব-এর ডিফল্ট ডিক উইন্ডো আকার অনুসারেও বোধগম্য হয়)। আমি আমার প্রশ্নটি সেই অনুযায়ী আপডেট করেছি। ধন্যবাদ!
a_guest

@a_guest ঠিক আছে, আপনার মন্তব্যটি একটি দ্বিতীয় দ্বিতীয় কেস বর্ণনা করে। সেখানে সমস্যাটি হ'ল tar -> gzip -> xz, gzip ডিফল্ট পিএনজি ডেটার প্রতিটি কপি আলাদাভাবে সংকুচিত করতে পারে, তাই এক্স জেড রিডানড্যানসিকে সনাক্ত করতে সক্ষম হবে না।
নায়ুকি

6

সমস্যাটি হ'ল, এটি (বেশিরভাগ) সংক্ষেপণ স্কিমগুলির আপনার কাছে থাকা ডেটা সম্পর্কে জ্ঞানের অভাব রয়েছে। এমনকি যদি আপনি আপনার পিএনজিগুলি বিটম্যাপগুলিতে বিটম্যাপে সঙ্কুচিত করেন এবং সেগুলি তারবেলে সংকুচিত করেন, তবে আপনি (উল্লেখযোগ্যভাবে) ছোট ফলাফল পাবেন না।

অনেকগুলি অনুরূপ চিত্রের ক্ষেত্রে, একটি উপযুক্ত সংক্ষেপণ স্কিমটি একটি ভিডিও কোডেক হবে।

লসলেস কোডিং ব্যবহার করে আপনার প্রত্যাশা করা প্রায় নিখুঁত সংকোচনের ফলাফল অর্জন করা উচিত।

আপনি যদি এটি পরীক্ষা করতে চান তবে এর মতো কিছু ব্যবহার করুন:

ffmpeg -i img%03d.png -c:v libx264 -c:v libx264 -profile:v high444 -crf 0 out.mp4

https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images


একটি ভিডিও এনকোডার ব্যবহার করে ভাল পয়েন্ট! আমি আমার উবুন্টু কারণ আপগ্রেড করার সময় 14.04 এ ডিফল্টরূপে ffmpeg অন্তর্ভুক্ত করব না I'll আমার ধারণা এই ভিডিও এনকোডারটি লসলেস কমপ্রেশন ব্যবহার করছে বা কমপক্ষে এর জন্য কোনও স্যুইচ আছে? তুমি কি জানো?
a_guest

হ্যাঁ, -crf 0 এটিকে ক্ষতিহীন করে তোলে (বা ডক্সে উল্লিখিত মত -QP 0 একই কাজ করে (-কিউপি 0 টি পছন্দনীয়))। trac.ffmpeg.org/wiki/Encode/H.264
জোনাস

4

পিএনজি হ'ল ফিল্ডস + এলজেড 77 + + হাফম্যান (এলজেড 77 + + হাফম্যানের সংমিশ্রণটিকে ডিফলেট বলা হয়) সেই ক্রমে:

পদক্ষেপ 1) যদি ফিল্টারটি কোনওর থেকে পৃথক হয়, তবে পিক্সেলের মান সংলগ্ন পিক্সেল থেকে পৃথক হয়ে যায় (আরও তথ্যের জন্য দেখুন http://www.libpng.org/pub/png/book/chapter09.html ) । যা গ্রেডিয়েন্টগুলির সাথে চিত্রগুলির সংকোচনতা বৃদ্ধি করে (তাই ... 4 5 6 7 হয়ে ... 1 1 1 1) এবং এটি একই রঙের অঞ্চলে সহায়তা করতে পারে (... 3 3 3 5 5 5 5 5 0 হয়ে যায় 0 0 2 0 0 0 0 0)। ডিফল্টরূপে ফিল্টারগুলি 24-বিট চিত্রগুলিতে সক্ষম হয় এবং একটি প্যালেট সহ 8-বিট চিত্রগুলিতে অক্ষম থাকে।

পদক্ষেপ 2) ডেটা এলজেড 7777 দিয়ে সংকুচিত হয়েছে যা ম্যাচের দূরত্ব এবং ম্যাচের দৈর্ঘ্য সমেত একটি টুপলের সাহায্যে বাইটের পুনরাবৃত্ত (ম্যাচ) স্ট্রিংগুলিকে প্রতিস্থাপন করে।

পদক্ষেপ 3) দ্বিতীয় ধাপের ফলাফলটি হাফম্যান কোডের সাথে এনকোড করা রয়েছে যা স্থির দৈর্ঘ্যের চিহ্নগুলিকে ভেরিয়েবল-দৈর্ঘ্যের কোডগুলির সাথে প্রতিস্থাপন করে, যত বেশি সংখ্যক চিহ্নটি সংক্ষিপ্ততর হয় কোডটি সংক্ষেপে।

একাধিক সমস্যা রয়েছে:

একটি ছোট পরিবর্তন যা কয়েকটি পিক্সেলকে প্রভাবিত করে পিএনজি সংক্ষেপণের 3 টি ধাপ থেকে ফলাফল পরিবর্তন করবে:

1) সংলগ্ন পিক্সেলের ফিল্টারকৃত মান পরিবর্তন হবে (ব্যবহৃত ফিল্টারের উপর নির্ভর করে)। এটি ছোট পরিবর্তনগুলির প্রভাবকে প্রশস্ত করবে।

2) পরিবর্তনের অর্থ সেই অঞ্চলের সাথে ম্যাচগুলি আলাদা হবে। উদাহরণস্বরূপ ৩৩৩৩৩৩৩ থেকে ৩৩৩৩৩৩ এ পরিবর্তনের ফলে 33৩৩৩৩-এর আর কোনও ঘটনা আর মিলবে না তাই এটি অন্য ম্যাচটি আলাদা দূরত্বে নিয়ে ৩৩৩৩৩৩ এ নির্বাচন করবে বা এটি একই ম্যাচটি বেছে নেবে তবে সংক্ষিপ্ত দৈর্ঘ্যের সাথে এবং তারপরে আরও একটি ম্যাচ শেষ 3 বাইটের জন্য। নিজে থেকে এটি ফলাফলকে অনেক পরিবর্তন করবে।

3) বৃহত্তম ইস্যুটি পদক্ষেপ 3 The হফম্যান কোড বিটগুলির একটি পরিবর্তনশীল সংখ্যার ব্যবহার করে তাই একটি ছোট্ট পরিবর্তনও ফলস্বরূপ ঘটে যে অনুসরণ করা সমস্ত কিছুই আর প্রান্তিক নয় al আফাইক বেশিরভাগ সংক্ষেপণ অ্যালগরিদমগুলি বাইট সারিবদ্ধ নয় এমন ম্যাচগুলি সনাক্ত করতে পারে না যা ইতিমধ্যে সংক্ষেপিত ডেটাতে সংক্রমণের (বা কমপক্ষে কিছুটা হ্রাস করতে পারে) প্রতিরোধ করবে যদি না সংক্ষেপক বাইট সারিবদ্ধ না হওয়া ম্যাচগুলি সংক্ষেপককে সনাক্ত না করে তবে পরিবর্তনটি অনুসরণ করে।

অন্যান্য ইস্যুগুলি ইতিমধ্যে অন্যান্য জবাব দ্বারা আচ্ছাদিত:

৪) জিজিপ একটি 32KB অভিধানের সাথে একই ডিফল্ট অ্যালগরিদম ব্যবহার করে, তাই পিএনজি ফাইলগুলি 32KB এর চেয়ে বড় হলে ম্যাচগুলি অভিন্ন হলেও সনাক্ত করা যাবে না। Bzip2 সেই দিক থেকে আরও ভাল কারণ এটি 900 কেবি ব্লক ব্যবহার করে। এক্সজেড এলজেডএমএ ব্যবহার করে, যা আইআইআরসি-র ডিফল্ট সংকোচনের স্তরের একটি 4 এমবি অভিধান রয়েছে। 5) জিপ ফর্ম্যাটটি শক্ত সংকোচনের ব্যবহার করে না যাতে এটি অনুরূপ বা অভিন্ন ফাইলগুলিকে আরও ভালভাবে সংক্ষেপ করতে পারে না।

সম্ভবত PAQ বা পিপিএমডি পরিবারের সংক্ষেপকগুলি আরও ভালভাবে সংকোচিত হবে তবে যদি আপনাকে প্রচুর অনুরূপ চিত্রের ফাইলগুলি সংকোচিত করতে হয় তবে আপনি 3 টি পদ্ধতি বিবেচনা করতে পারেন:

1) ছবিগুলিকে সঙ্কুচিত (পিএনজি -0 দিয়ে বা সংক্ষেপণ ছাড়াই বিন্যাসে) সংরক্ষণ করুন এবং একটি বৃহত অভিধান বা ব্লক আকারের সংক্ষেপণ সহ একটি সংক্ষেপককে সংকুচিত করুন। (এলজেডএমএ ভালভাবে কাজ করবে)

2) আরেকটি বিকল্প হ'ল ফিল্টারগুলি রাখা কিন্তু পিএনজিগুলি থেকে ডিফল্ট সংকোচনতা অপসারণ করা। এটি উদাহরণস্বরূপ ( অ্যাডডিফের সাহায্যে করা যেতে পারে ) ) ইউটিলিটি । তারপরে আপনি ফলাফলটি সঙ্কুচিত পিএনজি সংকুচিত করুন। ডিকম্প্রেশন পরে আপনি সঙ্কুচিত পিএনজি রাখতে পারেন বা এ্যাডডিফ দিয়ে আবার সংকোচ করতে পারেন (তবে এতে সময় লাগবে)।

কোনটি সবচেয়ে সংকুচিত করে তা দেখতে আপনার উভয় পদ্ধতির পরীক্ষা করতে হবে।

৩) সর্বশেষ বিকল্পটি পিএনজি চিত্রগুলিকে একটি ভিডিওতে রূপান্তরিত করবে, এটিকে x264 লসলেস (ডান রঙের ফর্ম্যাটটি ব্যবহারের বিশেষ যত্ন নিচ্ছে) এর মতো একটি লসলেস ভিডিও সংক্ষেপক দিয়ে সংকোচন করবে এবং তারপরে এক্সট্রাকশনে ফ্রেমগুলি পৃথক পিএনজি চিত্রগুলিতে বের করবে। এটি ffmpeg দিয়ে করা যেতে পারে। আপনার ফ্রেম নম্বর এবং মূল নামের মধ্যে ম্যাপিং রাখা দরকার।

এটি সবচেয়ে জটিল পদ্ধতির হবে তবে যদি পিএনজিগুলি অ্যানিমেশনের সমস্ত অংশ হয় তবে এটি সবচেয়ে কার্যকর হতে পারে। তবে আপনার প্রয়োজন এমন একটি ভিডিও ফর্ম্যাট যা আপনার প্রয়োজন হলে স্বচ্ছতার সমর্থন করে।

সম্পাদনা: এমএনজি ফর্ম্যাটও রয়েছে যা এটি প্রায়শই ব্যবহার করা হয় না।


2

যখন আপনার বিশেষ ডেটাসেট থাকে আপনি বিশেষ অ্যালগরিদম ব্যবহার করেন, বহুমুখী সরঞ্জামগুলি নয়।

উত্তরটি হ'ল আপনার নির্বাচিত লসলেস কমপ্রেসেশনগুলি আপনি যা করেন তার জন্য তৈরি করা হয় না। নুন আপনার কাছ থেকে একই চিত্রটি দুবার সংকোচনের প্রত্যাশা করে না এবং আপনি যদি এটি করেন (দুর্ঘটনাক্রমে) পূর্ববর্তী সমস্ত ইনপুটটির বিরুদ্ধে পরীক্ষা করা আপনার অ্যালগরিদমকে ও (এন ^ 2) করে তুলবে (সম্ভবত কিছুটা আরও ভাল, তবে নৈব পন্থাটি ন্যূনতম হবে n 2)।

আপনার বেশিরভাগ সংক্ষেপণ প্রোগ্রাম যা আপনি ও (এন) এ রান করার জন্য পরীক্ষা করেছেন, তারা অনুকূল সংকোচনের অনুপাতের চেয়ে গতিকে জোর দেয়। বিশেষত এই দিনগুলিতে কয়েক এমবি বাঁচানোর জন্য নুনি তার কম্পিউটারটি 5 ঘন্টা চালাতে চান। বড় ইনপুটগুলির জন্য ও (এন) এর উপরে যে কোনও কিছু রানটাইম ইস্যুতে পরিণত হয়।

আর একটি ইস্যু রাম। ইনপুট যথেষ্ট বড় হয়ে গেলে আপনি কোনও সময়ে আপনার ইনপুটটির প্রতিটি অংশ অ্যাক্সেস করতে পারবেন না। এমনকি এটিকে উপেক্ষা করেও, বেশিরভাগ লোকেরা কোনও কিছু সংকোচনের জন্য তাদের পুরো মেষ বা সিপিইউ ছেড়ে দিতে চান না।

আপনার ফাইলগুলিতে যে নকশাগুলি সংকুচিত করতে চান তা যদি থাকে তবে আপনাকে সেগুলি সম্পর্কে ম্যানুয়েল অপারেশন করতে হবে, আপনার নিজের সংক্ষেপণ লিখতে হবে বা সম্ভাব্যভাবে একটি "সংরক্ষণাগার" -প্রকার-সংক্ষেপণ (ন্যানো) ব্যবহার করতে হবে। দীর্ঘমেয়াদী স্টোরেজ জন্য একটি সংক্ষেপণ, এটি দৈনন্দিন ব্যবহারের জন্য খুব ধীর।

সম্ভাব্যভাবে অন্য একটি বিকল্প হ'ল লসলেস ভিডিও সংক্ষেপণ।


1
ডিরেক্টরি কাঠামোর পক্ষে বিভিন্ন জায়গায় একাধিক অভিন্ন ফাইল ধারণ করা খুব সাধারণ বলে মনে হচ্ছে, সংরক্ষণাগারে যুক্ত হওয়া কোনও ফাইল সংকুচিত / সঙ্কুচিত হ্যাশ মান এবং আকারগুলি পরীক্ষা করেছে কিনা তা দেখতে একটি ভাল জিপ-স্টাইলের ইউটিলিটির একটি বিকল্প প্রদান করা উচিত seem এটি বিদ্যমান ফাইলের সাথে মেলে। যদি দুটি হ্যাশ এবং উভয় আকারের মিল থাকে তবে প্রথম ফাইলের সাথে সম্পর্কিত ডেটা ব্লকের সাথে একটি দ্বিতীয় নাম সংযুক্ত করা সার্থক মনে হবে। এমনকি জিপ এটি সামঞ্জস্য করতে না পারলেও এটি ভবিষ্যতের যে কোনও বিন্যাসে একটি দরকারী বৈশিষ্ট্য বলে মনে হয়।
সুপারক্যাট

1
আপনার উত্তরটি বোঝায় যে টারের সংকোচনের অ্যালগরিদম কিছু ধরণের অপ্রয়োজনীয়তা সঙ্কুচিত করার জন্য ভাল তবে ওপি-র দৃশ্যে ঘটে যাওয়া ধরণের জন্য নয়। কী ধরণের অপ্রয়োজনীয়তা আপনার পক্ষে ভাল বলে মনে হয় তা বর্ণনা করতে পারেন , কারণ এটি মোটেই সুস্পষ্ট নয়। যে কেউ সম্ভবত এই সংক্ষেপকটি সফলভাবে কখনই ব্যবহার করেননি, তারা যা দেখছে তা হ'ল তারা তাত্ত্বিকভাবে যথেষ্ট সংকোচनीय এমন কোনও কিছুর জন্য এটি চেষ্টা করেছিলেন, এটি কার্যকর হয়নি, সুতরাং হ্যাক এই সংকোচকারী যাইহোক ভাল কি?
ডন হ্যাচ

1
@ লেফটারআউন্ডাবাউট: মেলানো ফাইলগুলির সাথে "কপিরাইট-অন-রাইটিং" শব্দার্থতত্ত্ব ব্যবহার করার আমি জানি এমন কোনও ইউনিক্সের উপায় নেই। অনেক ক্ষেত্রে, রিডানডেন্ট অনুলিপিগুলি আজকের বিষয়গুলি একই রকম হতে পারে, আগামীকাল একই নাও হতে পারে এবং এই জাতীয় ক্ষেত্রে সিমলিংক বা হার্ডলিঙ্কগুলিও যথাযথ বলে মনে হয় না with
ক্যাট

1
@ সুপের্যাট: এই জাতীয় অনেকগুলি ফাইলের সাথে এটি একটি "অফিসিয়াল", কেবলমাত্র পঠনযোগ্য সংস্করণে একটি সিমলিংক ব্যবহার করার জন্য পুরোপুরি ভাল সমাধান। তারপরে যদি আপনি নিজের অনুলিপি পরিবর্তন করতে চান তবে একটি ভৌত ​​অনুলিপি সহ সিমলিংকটি প্রতিস্থাপন করুন।
বাম দিকের বাইরে

1
@ লেফটারআন্ডাবাউট: একটি জিনিস আমি মাঝে মাঝে মনে করি আকর্ষণীয় হবে যদি কেউ ইঞ্জিনযুক্ত হ্যাশের সংঘর্ষের ঝুঁকিটিকে একটি গ্রহণযোগ্য পর্যায়ে হ্রাস করতে পারে তবে হ্যাশ-ভিত্তিক সার্বজনীন রেফারেন্স আইডেন্টিফায়ারটি হ্যাশ-ভিত্তিক সার্বজনীন রেফারেন্স আইডেন্টিফায়ার হিসাবে থাকতে পারে একটি হ্যাশ উপর ভিত্তি করে একটি লিঙ্ক তৈরি করবে। সংরক্ষণাগারগুলি তখন 256 বাইট বা আরও বেশি হ্যাশ রাখে সত্যিকারের বড় ফাইলগুলি সংরক্ষণ করার পরিবর্তে। পরিবর্তনের বিরুদ্ধে রক্ষা করা দরকার এমন ফাইলগুলির ক্যাচিং সক্ষম করতে এই জাতীয় পদ্ধতির বিভিন্নতাও ব্যবহার করা যেতে পারে।
সুপারক্যাট

2

পিএনজি ফাইল ফর্ম্যাটটি ইতিমধ্যে অভ্যন্তরীণভাবে ডিফল্ট সংক্ষেপণ অ্যালগরিদম ব্যবহার করে। Xz, gzip, এবং জিপ দ্বারা ব্যবহৃত একই অ্যালগরিদম - কিছু কিছু পরিবর্তনে। tar.gzএবং tar.xzফাইলগুলির মধ্যে মিলের সুবিধা গ্রহণ করুন, যা zipনা হয়।

সুতরাং, প্রকৃতপক্ষে, আপনি ডিফল্ট সংক্ষেপিত ফাইলগুলির উপর ডিফল্ট সংকোচন সম্পাদন করেন - এজন্য ফাইলগুলি প্রায় আসল আকার রাখে।

bzip2যখন এটি (প্রায়) অভিন্ন ফাইলগুলিতে আসে প্রোগ্রাম (এছাড়াও একটি সম্পর্কিত অ্যালগরিদম) উত্তম।

# for i in $(seq 4); do cp test.png test$i.png; done
# tar -cjf archive.tar.bz2 *.png
# ls -l
-rw-r--r-- 1 abcde users  43813 15. Jul 08:45 test.png
-rw-r--r-- 1 abcde users  43813 15. Jul 08:45 test1.png
-rw-r--r-- 1 abcde users  43813 15. Jul 08:46 test2.png
-rw-r--r-- 1 abcde users  43813 15. Jul 08:46 test3.png
-rw-r--r-- 1 abcde users  43813 15. Jul 08:46 test4.png
-rw-r--r-- 1 abcde users  68115 15. Jul 08:47 archive.tar.bz2

পিএনজি - দয়া করে মনে রাখবেন যে ফিল্টারগুলি ব্যবহৃত হয়, অ-মানক ডিফল্ট (কোনটি প্রমিত হয়?) এবং আপনি ঠিক বলেছেন যে একই অ্যালগরিদম দু'বার চালানো কিছুই দেয় না (বা কমপক্ষে এটি উপকারী হওয়া উচিত নয়), তবে চালানো বিভিন্ন সেটিংস সহ একই অ্যালগরিদম ব্যর্থ হওয়ার গ্যারান্টিযুক্ত নয়। এছাড়াও ডিফলেট 32, ডিফলেট 64, এলজেডাব্লু, এলজেডএমএ এর মধ্যে পার্থক্য রয়েছে, আপনি কেবল এটি বলতে পারবেন না যে এগুলি সমস্ত একই ডিফল্ট ব্যবহার করে।
এভিল

সে কারণেই আমি বলেছিলাম "কিছু কিছু পরিবর্তন"। অবশ্যই, ডিফল্ট নির্দিষ্ট প্রয়োগের পরিবর্তে এক ধরণের অ্যালগরিদমকে বোঝায়।
রেক্সকোগিটানস

3
আমি বুঝতে পারার সাথে এটি এই বিষয়টিকে মিস করে। হ্যাঁ, একটি পিএনজি ফাইল একা ইতিমধ্যে সংকুচিত হয়েছে তাই আমি কোনও ধরণের আরও সংকোচনের বেশি প্রভাব ফেলতে আশা করি না। তবে বেশ কয়েকটি অভিন্ন পিএনজি ফাইলের সমাহার (যা মূলত এখানকার পরিস্থিতি) সম্ভবত তাদের মধ্যে একটির আকারের চেয়ে বেশি না সংকোচনের আশা করা যেতে পারে expected
ডন হ্যাচ

স্পষ্টতই, এই সংকোচনের অ্যালগোরিদমগুলি বিন্দুটি মিস করে। bzip2এটা ক্যাচ: tar -cjf archive.tar.bz2 *.png। আমার উত্তরে আপডেট হয়েছে।
রেক্সকোগিটানস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.