সংরক্ষণাগার (একরঙা) বৈজ্ঞানিক ভিডিও ডেটা জন্য একটি দোষহীন ভিডিও কোডেক ব্যবহার করা


9

বেসিক প্রশ্ন: নিরবিচ্ছিন্নভাবে বৈজ্ঞানিক ভিডিও ডেটা সংরক্ষণ / সংরক্ষণাগার জন্য উপযুক্ত কোডেক কী?

আমি আমার গবেষণা গোষ্ঠীকে একটি মাইক্রোস্কোপে রেকর্ড করা কিছু ভিডিও সংরক্ষণ / সংরক্ষণাগার দিয়ে সাহায্য করার চেষ্টা করছি। এই (গ্রেস্কেল) ভিডিওগুলি সঙ্কুচিত (কাঁচাভিডিও) বিজিআর 24 ফর্ম্যাট, 660x492 @ 61fps এবং সাধারণত প্রায় 1 মিনিট দীর্ঘ। আমার ল্যাব সাথীরা এই ফাইলগুলির নিখুঁত আকারের (প্রতিটি গিগা বাইট) পাগল হয়ে যাচ্ছেন। আমি একটি লসলেস কোডেক ব্যবহার করে তাদের সংকুচিত করার পরামর্শ দিয়েছিলাম। (এখানে লোকসানহীন হওয়ার প্রয়োজন কারণ ভিডিওগুলি বৈজ্ঞানিক ডেটা; তাই কিছুটা বিপদ রয়েছে যে কোনও ক্ষতিগ্রস্থ কোডেক বিষয়টিকে খারাপ / অপ্রত্যাশিত উপায়ে পরিবর্তন করতে পারে))

এখানে আমি চেষ্টা করেছিলাম। প্রথমত, আমি এই ভিডিওগুলির মধ্যে একটির প্রথম 10 সেকেন্ড ধরেছি এবং এফএফএমপেইগ ব্যবহার করে একরঙা (কাঁচা) ফর্ম্যাটে রূপান্তর করেছি।

ffmpeg -t 10 -i RecordedData.avi -c:v rawvideo -pix_fmt gray raw_gray.mkv

তারপরে, আমি -crf 0ফলস্বরূপ ফাইলটি সংকুচিত করতে libx264 এর (ক্ষতির মাধ্যমে ) ক্ষতির অযোগ্য মোডটি ব্যবহার করার চেষ্টা করেছি

ffmpeg -i raw-gray.mkv -c:v libx264 -crf 0 -pix_fmt yuv420p -color_range pc x264-yuv420p.mkv

অবশেষে, আমি কাঁচা এবং এইচ 264 এমকেভি ফাইল থেকে কাঁচা ওয়াইউভি ডেটা বের করে এনে তুলনা করেছি।

ffmpeg -i raw-gray.mkv -c:v rawvideo -pix_fmt gray raw-gray.yuv
ffmpeg -i x264-yuv420p.mkv -c:v rawvideo -pix_fmt gray x264-decompressed.yuv
diff -sq raw-gray.yuv x264-decompressed.yuv

এখানে, diffকমান্ডটি জানিয়েছে যে যখন ফাইলগুলি একই হওয়ার আশা করত তখন ফাইলগুলি আলাদা হয়। কেন? এটি কি কিছুটা সামান্য রাউন্ডিং ত্রুটি, বা আমি সম্ভবত H264 (অনুমিত ক্ষতিকারক) সংকোচনের পরে কিছু হারাচ্ছি? পিক্সেল ফর্ম্যাটগুলির কিছু রূপান্তর ঘটছে ( gray (YUV400) <-> YUV420), তবে রঙ (ইউভি) চ্যানেলগুলি খালি হওয়া উচিত কারণ ইনপুটটি একরঙা।

আমি যদি সত্যিই কিছু হারাতে পারি তবে এটি ঠিক করার জন্য আমি কি কিছু করতে পারি? এমন কি অন্য কোনও (লসলেস) কোডেক রয়েছে যা আমার ডেটার জন্য আরও উপযুক্ত হতে পারে?


আপডেট 1 : আমি হ্যাক্সডাম্পটি সংক্ষেপিত YUV ডেটার সামগ্রীগুলি raw-gray.yuv(কখনই সংক্ষেপিত নয়) এবং x264-decompressed.yuv( সংক্ষেপিত এবং তারপর সংক্ষেপিত) আরও বিশদ সাথে তুলনা করতে ব্যবহার করেছি । এখানে প্রথম কয়েকটি বাইট রয়েছে।

[raw-gray.yuv]

00000000  4e 50 51 53 53 52 51 50  51 51 50 4f 50 50 50 50
00000010  51 51 50 51 52 53 51 51  52 52 53 53 52 51 51 53
00000020  51 53 54 55 53 51 52 54  53 53 52 50 51 50 52 52
00000030  51 52 51 51 51 52 54 52  52 52 51 51 51 53 57 58
00000040  57 57 55 54 54 52 53 51  51 52 53 55 55 54 53 53
00000050  51 51 52 52 53 52 51 50  50 50 50 51 51 4f 4f 4e
00000060  4c 4d 4e 4d 4f 50 4f 50  51 51 51 52 52 52 52 50
00000070  50 50 52 52 53 55 55 55  57 52 53 53 53 54 56 56

[x264-decompressed.yuv]

00000000  53 55 56 57 57 56 56 55  56 56 55 54 55 55 55 55
00000010  56 56 55 56 56 57 56 56  56 56 57 57 56 56 56 57
00000020  56 57 58 59 57 56 56 58  57 57 56 55 56 55 56 56
00000030  56 56 56 56 56 56 58 56  56 56 56 56 56 57 5b 5c
00000040  5b 5b 59 58 58 56 57 56  56 56 57 59 59 58 57 57
00000050  56 56 56 56 57 56 56 55  55 55 55 56 56 54 54 53
00000060  51 52 53 52 54 55 54 55  56 56 56 56 56 56 56 55
00000070  55 55 56 56 57 59 59 59  5b 56 57 57 57 58 5a 5a

পূর্ববর্তী ফাইলের মানগুলি পরবর্তীকালের মানগুলির চেয়ে 4 থেকে 5 কম। এটি ফাইলের মধ্যে আরও গভীর খনন করতে দেখা যায়।


আপডেট 2 : আমি যদি আরজিবি মোডে libx264 ব্যবহার করি তবে নিম্নলিখিতটি ছাড়াও উপরের মতো একই কাজ করে আমি আসলটির সাথে একটি সঠিক মিল পেতে পারি।

ffmpeg -i raw-gray.mkv -c:v libx264rgb -crf 0 -pix_fmt bgr24 x264-bgr24.mkv
ffmpeg -i x264-bgr24.mkv -c:v rawvideo -pix_fmt gray x264-bgr24-decomp.yuv
diff -sq raw-gray.yuv x264-bgr24-decomp.yuv

শেষ কমান্ডটি জানিয়েছে যে দুটি ফাইল অভিন্ন । দুর্ভাগ্যক্রমে, এর x264-bgr24.mkvচেয়ে প্রায় 3 গুণ বেশি বড় x264-yuv420.mkv, সুতরাং আরজিবি মোডে সংক্ষেপণটি তেমন ভাল নয়।

আমি কোথাও পড়েছি যে libx264 গ্রে স্কেল ভিডিওটিকে YUV মোডে দক্ষতার সাথে সংকুচিত করে কারণ এটি কেবল এই ওয়াই চ্যানেলটিতে কোনও আসল তথ্য রয়েছে (ইউ এবং ভি চ্যানেল উভয়ই একরঙা ভিডিওর জন্য শূন্য)। আরজিবি মোডে, আমি বিশ্বাস করি যে সমস্ত চ্যানেলগুলিতে একরঙা ইনপুটগুলির জন্য অভিন্ন তথ্য থাকবে। সম্ভবত libx264rgb এর সুবিধা নেয় না।

সুতরাং, আমার পক্ষে কি ভিডিওর পরিবর্তন না করে YUV মোড ব্যবহার করার কোনও উপায় আছে, যেহেতু এইভাবে সংক্ষেপণটি আরও বেশি দক্ষ?


আপডেট 3 : আমি libx264 এর -pix_fmt yuvj420pপরিবর্তে ব্যবহার করে সমস্যার সমাধান করতে সক্ষম হয়েছি -pix_fmt yuv420p -color_range pc। তারপরে, আমি কম্প্রেশন / ডিকম্প্রেশনের ঠিক পরে আসল ফাইলটি পুনরুত্পাদন করি। এফএফপিপেগ ডকুমেন্টেশন থেকে আমার মনে হয়েছিল যে এই দুটি সেট পতাকা সমান, তবে এটি স্পষ্টতই নয়। শুধুমাত্র সমস্যাটি হল এই যে আমি পতাকার আধুনিক সেট দিয়ে একটি সর্তকবার্তা পান হল: [swscaler @ 0x55b56347fe20] deprecated pixel format used, make sure you set the range correctly। এছাড়াও, আমি এই বাগ রিপোর্টটি পেয়েছি যা আমার সমস্যার সাথে সম্পর্কিত হতে পারে। আপাতদৃষ্টিতে অবমানিত yuvj420p পিক্সেল ফর্ম্যাটটি ব্যবহার না করে জিনিসগুলি করার "সঠিক" উপায় সম্পর্কে আমি নিশ্চিত নই।


1
যেহেতু ডেটাটি সংক্রামিত, তাই আপনি উভয়কে একটি পাঠ্য বিন্যাসে রূপান্তর করে (উদাহরণস্বরূপ ব্যবহার করে hexdump) এবং এর মধ্যে ভিন্নতা চালিয়ে আপনি আরও ভাল হবেন । diffফাইলগুলি কোথাও অন্যরকম বলে দেবে। এক বিট, এক মেগাবাইট, সব একই রকম। হেক্স ডিফ পরিদর্শন করে আপনি কী ঘটেছে তা সম্পর্কে আরও ভাল করে অনুমান করতে পারেন এবং এটি নিয়ে উদ্বেগের কিছু আছে কিনা। এছাড়াও পরীক্ষা করে দেখুন যে অপারেশনটি ভিডিওর প্রস্থ বা উচ্চতার চেয়ে বেশি নয় (আমার ক্ষেত্রে এটি ঘটেছিল)।
এলসার্নি

1
বিঘ্নের সম্ভাব্য উত্স হ'ল আলাদা ওয়াই চ্যানেল ক্ল্যাম্পিং (সিসিআইআর -601 অনুসারে) হতে পারে। পরীক্ষা করে দেখুন যদি থাকে সুযোগ দ্বারা আপনার কাছে 16 নিচে এবং 240 উপরে দেখুন ওয়াই-মান হারান বলে মনে হচ্ছে video.stackexchange.com/questions/16840/...
LSerni

1
আপনি আপনার দুটি ভিডিওকে পৃথক চিত্রগুলিতে পুনঃ- সংশ্লেষcompare করতে এবং এগুলির সাথে তুলনা করার জন্য চিত্রগ্রাহকগুলি ব্যবহার করতে পারেন ffmpeg ।
xenoid

1
ক্ষতিহীনতার তুলনা করার একটি ভাল উপায় হ্যাশ ম্যাক্সার ব্যবহার করা । এর সম্পূর্ণ আউটপুট দেখান ffmpeg -i RecordedData.avi। libx264rgb bgr24 সমর্থন করে, তাই আপনি সেই এনকোডারটিকে একটি বিকল্প হিসাবে বিবেচনা করতে পারেন।
llogan

1
X264 এর আরজিবি মোড (পিক্সেল ফর্ম্যাট রূপান্তর এড়িয়ে যান) ব্যবহার করে নিখরচায় এগুলিকে এনকোড করুন।
জ্ঞান

উত্তর:


6

এটি আপনার আসল সমস্যার সরাসরি উত্তর নয়, তবে আমি এফএফম্পেগ-অভ্যন্তরীণ FFV1কোডেক ব্যবহার করে বিবেচনা করব :

$ ffmpeg -i raw-gray.mkv -c:v ffv1 ffv1.mkv

বিকল্পভাবে, এর 3 সংস্করণ:

$ ffmpeg -i raw-gray.mkv -c:v ffv1 -level 3 ffv1.mkv

তারপর:

$ ffmpeg -i ffv1.mkv -c:v rawvideo -pix_fmt gray raw-gray.yuv
$ diff -sq raw-ffv1.yuv raw-gray.yuv
Files raw-ffv1.yuv and raw-gray.yuv are identical

এটি লসলেস মোডে libx264 এর মতো দক্ষ হিসাবে ব্যবহার করা যায় না yuv420p, তবে এটি libx264 এর সাথে ব্যবহার করার চেয়ে বেশি দক্ষ bgr24(আমার পরীক্ষাগুলিতে, ডেটার রেট কোথাও কোথাও ছিল)। কংগ্রেস অফ কংগ্রেসের মতো কিছু প্রতিষ্ঠান এফএফভি 1 কে একটি উপযুক্ত সংরক্ষণের ফর্ম্যাট হিসাবে স্বীকৃতি দেয় ।


এটি যদিও আমার মূল বুনিয়াদি প্রশ্নের উত্তর, যা আমি আরও স্পষ্ট করার জন্য সম্পাদনা করেছি। আমি এফএফভি 1 এর সাথে কোনও সমস্যার মুখোমুখি হই নি। আসলে, এফএফভি 1 -crf 0 -preset mediumআমার নির্দিষ্ট ভিডিওর জন্য libx264 (ডাব্লু / ) হিসাবে একই সংক্ষেপণের অনুপাত সম্পর্কে অর্জন করেছিল এবং এটি দ্রুত ছিল was আরও ভাল, এটি সরাসরি grayপিক্সেল ফর্ম্যাটটিকে সমর্থন করে । প্রকৃতপক্ষে, এটি একটি দুর্দান্ত সমাধান বলে মনে হচ্ছে।
নিক সি।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.