আমার কাছে একটি ভিডিও আছে একটি ক্যামেরার ক্যামেরা থেকে। রেজুলেশন এবং এফপিএস উভয়ই বেশ উচ্চ। আমার কাছে পাওয়া ডেটা বায়ার ফর্ম্যাটে এবং প্রতি পিক্সেলটিতে 10 বিট ব্যবহার করে। আমার প্লাটফর্মে কোনও 10 বিট ডেটা টাইপ না থাকায়, আসল ডেটা 16-বিট শব্দ ব্যবহার করে মেমরিতে সঞ্চয় করা হয়। নেটওয়ার্কের মাধ্যমে ডেটা প্রেরণের আগে আমি ডেটাটির এক ধরণের ক্ষতির বিহীন সংক্ষেপণ বাস্তবায়ন করতে চাই ।
- ক্যামেরাটি সরে না, তাই একটানা ফ্রেমের বড় অংশগুলি প্রায় অভিন্ন - তবে এখনও সম্পূর্ণরূপে নয়, অনিবার্য শব্দের কারণে (নিন্দা করা কোনও বিকল্প নয়, কারণ এটি ক্ষতিহীন বলে মনে করা হয় এবং শব্দটি এমনকি "হারাতে" উচিত নয়) )।
- উচ্চ এফপিএসের কারণে, এমনকি যে অংশগুলি পরিবর্তন হয় সেগুলি টানা দুটি ফ্রেমের মধ্যে খুব বেশি পরিবর্তন হয় না।
- তবে দেখে মনে হচ্ছে ক্যামেরাটিও খানিকটা কাঁপছে। খুব অল্প, তবে এখনও, এমনকি স্থির বস্তুগুলি চিত্রের জায়গাতে সম্পূর্ণ নয়।
- কম্প্রেশনটি ফ্লাইতে করতে হবে, তাই আমি প্রচুর ফ্রেম সংগ্রহ করতে এবং সেগুলি সমস্ত একসাথে সংকুচিত করতে পারি না তবে আমি 1 ফ্রেমটি পিছনে দেখতে এবং এটি একটি রেফারেন্স হিসাবে ব্যবহার করতে পারি।
উপরের ভিত্তিতে, আমার প্রথম চিন্তাটি ছিল ডেটা বিট-প্যাক করা, যাতে those 6 অপ্রয়োজনীয় বিটগুলি প্রতিটি শব্দে নষ্ট না হয়। তবে, আমি ভেবেছিলাম যে আমি যদি কিছু এনট্রপি কোডিং (উদাঃ হাফম্যান ইত্যাদি) ব্যবহার করি তবে সেই অপ্রয়োজনীয়তা স্বয়ংক্রিয়ভাবে বিবেচনায় নেওয়া হবে, সুতরাং অতিরিক্ত প্যাকিংয়ের প্রয়োজন নেই। সুতরাং আমি নিম্নলিখিতটি সম্পন্ন করেছি:
- টানা দুটি ফ্রেমের মধ্যে বাইনারি পার্থক্য নিয়েছে। আসল তথ্য পরিসীমা 0 ~ 1023 (যেমন স্বাক্ষরযুক্ত 10 বিট)। পার্থক্য ডেটা স্বাক্ষরিত হয় এবং পরিসীমা -1023 ~ 1023 এ বৃদ্ধি পায় তবে তথ্য বৈচিত্র (বা সঠিক গাণিতিক শব্দটি কী) মূল তথ্যগুলির তুলনায় অনেক কম হয়ে যায়, বাস্তবে, বেশিরভাগ মানগুলি আশ্চর্যজনকভাবে শূন্যের কাছাকাছি হয় না are ।
- পার্থক্যে চাল কোডিং করা হয়েছে। আমি যা বুঝতে পারি তা থেকে এটি বেশিরভাগ ছোট সংখ্যার মানগুলির ডেটা সেটগুলির জন্য ভাল পছন্দ বলে মনে হচ্ছে।
এটি আমাকে 1280x720 ফ্রেমের আকারে প্রায় 60% হ্রাস দেয়, এবং আমার পরীক্ষা পদ্ধতি (একক কোরের ভার্চুয়ালবক্সে লিনাক্স) প্রতি সেকেন্ডে 40 ডলার যেমন সংকোচন করতে পারে (বেশি অপ্টিমাইজেশন ছাড়াই)। এটি দুর্দান্ত নয়, তবে যুক্তিযুক্ত, আমি অনুমান করি (বা এটি হয়?)।
আরও ভাল উপায় আছে? কোন সাধারণ ভুল আমি করেছি? কোন সাধারণ পদক্ষেপ আমি মিস করেছি? উচ্চতর রেজোলিউশন ফ্রেমগুলি পরে ব্যবহার করা যেতে পারে - আমি কি আরও বড় ফ্রেমের মাপের জন্য আরও ভাল সংক্ষেপণের হার আশা করতে পারি?
UPD .:
- আমি এই লাইব্রেরি রাইস এনকোডিংয়ের জন্য ব্যবহার করেছি। লাইব্রেরিটি খুব ধীর গতির (লেখক নিজে এটি সত্যিকারের ব্যবহারের পরিবর্তে শেখার জন্য কিছু হিসাবে বর্ণনা করেছেন) উদাহরণস্বরূপ এটি লুপগুলিতে বিট একের পর এক পড়ায় এবং লেখায় যা কার্য সম্পাদন করে kill প্রাথমিকভাবে এটি আমাকে 20 ডলার এফপিএস দিয়েছিল, কিছু প্রাথমিক বুনিয়াদীকরণের পরে এটি 40 এফপিএসে পরিণত হয়েছিল (উপরে উল্লিখিত হিসাবে), পরে আমি এটি আরও কিছুটা অনুকূলিত করেছিলাম, এটি 80 হয়ে গেছে That এটি ভেক্টরাইজেশন ছাড়াই একটি একক আই 7 কোরে রয়েছে।
- ভেক্টরাইজেশনের ক্ষেত্রে, যদিও, দুর্ভাগ্যক্রমে আমি ভাত কোডটি ভেক্টরাইজ করার কোনও উপায়ের কথা ভাবতে পারি না (এমনকি এটি আদৌ সম্ভব কিনা তাও জানিনা - রাইস কোডে কোনও ডেটা খুঁজে পেলাম না, হাফম্যান কোড সম্পর্কে আমি যেটা খুঁজে পেতে পারি তাতে বোঝা যায় যে এটি ক্রমযুক্ত এবং কার্যকরভাবে ভেক্টরাইজ করা যায় না, এটি রাইস কোডের পাশাপাশি অন্যান্য পরিবর্তনশীল-দৈর্ঘ্যের কোডগুলিতে প্রয়োগ হতে পারে)।
- আমি সম্পূর্ণ ভিন্ন পদ্ধতির চেষ্টাও করেছি: ডেটাটিকে ছোট ছোট টুকরো (যেমন into৪ পিক্সেলের মতো) মধ্যে ভাগ করুন এবং সাধারণ শূন্য দমন ব্যবহার করুন। আমরা একটি ব্লকে সর্বাধিক সংখ্যা পাই, ব্লকের শুরুতে এটি উপস্থাপনের জন্য প্রয়োজনীয় বিটের সংখ্যা লিখি (আমার ক্ষেত্রে এটির জন্য 4 অতিরিক্ত বিট প্রয়োজন ছিল), তারপরে ব্লকের সমস্ত সংখ্যা একই সংখ্যায় হ্রাস করুন বিট। আমি প্রত্যাশা করেছিলাম যে সংকোচনের হারটি খারাপ হবে, তবে যদি টুকরোগুলি ছোট হয় তবে তাদের মধ্যে অনেকেরই শোরগোল থাকবে না, সুতরাং তাদের বাইনারি পার্থক্যটি মূল্য প্রতি 4 ~ 6 বিটের মতো কিছুতে হ্রাস করা যেতে পারে, এবং এটি ছিল কেবলমাত্র রাইস কোডের চেয়ে প্রায় 5% খারাপ, যখন দ্বিগুণ দ্রুত হয়ে থাকে (যেমন, আমার ক্ষেত্রে 160 টি এফপিএস)। আমি এটি ভেক্টরাইজিং করার চেষ্টা করেছি, তবে আমি ভেক্টরাইজেশনকে স্তন্যপান করি, তাই সম্ভবত এর কারণেই আমি কেবল আরও গতি বাড়ানোর প্রায় x1.8 অর্জন করতে পারি।
নেতিবাচক সংখ্যায় নেতৃস্থানীয় জিরো নেই বলে আমি বাইনারি পার্থক্যের পরে এবং চাল / শূন্য দমন করার আগে জিগজ্যাগ এনকোডিং প্রয়োগ করেছি ।