X265 (HEVC) এ কোনও মানের ক্ষতি ছাড়াই পুনরায় এনকোডিং ভিডিও লাইব্রেরি


43

স্থান অর্জনের জন্য আমি আমার ভিডিও লাইব্রেরিটি HEVC ফর্ম্যাটে রূপান্তর করার চেষ্টা করছি। আমি আমার লাইব্রেরির সমস্ত ভিডিও ফাইলের জন্য নিম্নলিখিত কমান্ডটি চালিয়েছি:

#!/bin/bash
for i in *.mp4;
do 
    #Output new files by prepending "X265" to the names
    avconv -i "$i" -c:v libx265 -c:a copy X265_"$i"
done

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

এক্ষেত্রে কী করা উচিত তা আমি নিশ্চিত নই। crfআমার কমান্ড লাইনে প্যারামিটারটি পরিবর্তন করতে হবে ? অথবা অন্য কিছু?

জিনিসটি হ'ল আমি বেশিরভাগ রূপান্তর করছি। সুতরাং, আমার একটি পদ্ধতি দরকার যেখানে avconvপ্রতিটি ভিডিওর জন্য প্যারামিটারের যে কোনও সামঞ্জস্যের প্রয়োজন হয় স্বয়ংক্রিয়ভাবে সামঞ্জস্য হয়।

আপডেট -1

আমি খুঁজে পেয়েছি যে crfএটি আমার সামঞ্জস্য করা প্রয়োজন। ডিফল্ট সিআরএফ হ'ল 28. উন্নত মানের জন্য, আমি 28-রও কম কিছু ব্যবহার করতে পারি example উদাহরণস্বরূপ:

avconv -i input.mp4 -c:v libx265 -x265-params crf=23 -c:a copy output.mp4

তবে সমস্যাটি হ'ল কিছু ভিডিওর জন্য সিআরএফের মান 28 টি যথেষ্ট ভাল, কিছু ভিডিওর জন্য, কম সিআরএফ প্রয়োজন। এটি এমন একটি যা আমাকে বড় ভিডিওগুলির ছোট ছোট বিভাগগুলিতে রূপান্তর করে ম্যানুয়ালি পরীক্ষা করতে হবে। তবে বাল্ক রূপান্তরকালে, আমি কীভাবে প্রতিটি ভিডিও চেক করব? avconvবুদ্ধিমানভাবে ইনপুট ভিডিও অনুযায়ী সিআরএফ সামঞ্জস্য করতে পারে এমন কি তাদের কোনও উপায় ?

আপডেট-2

আমি খুঁজে পেয়েছি যে --losslessx265: http://x265.readthedocs.org/en/default/lossless.html এ একটি বিকল্প রয়েছে ।

তবে, আমি এটি সঠিকভাবে ব্যবহার করতে জানি না। আমি এটি নিম্নলিখিত পদ্ধতিতে ব্যবহার করার চেষ্টা করেছি তবে এটির বিপরীত ফলাফল এসেছে (ভিডিওটি আরও বেশি পিক্সেলিটেড ছিল):

avconv -i input.mp4 -c:v libx265 -x265-params lossless -c:a copy output.mp4

1
--losslessপ্রকৃতপক্ষে ফাইলটি বৃহত্তর করতে পারে, যদি এটি পূর্ববর্তী ক্ষতির কোডেকটি ডিকোড করে এবং এরপরে এটি ক্ষতিহীনভাবে কীভাবে ডিকোড করে তা কী করে তা encondes করে। গুণমান ইনপুট হিসাবে ঠিক একই থাকবে।
গোলার র্যামব্লার

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

উত্তর:


58

আমার নিজের অভিজ্ঞতা থেকে, আপনি যদি মানের মধ্যে একেবারেই ক্ষতি না চান তবে - নির্লজ্জ আপনি যা সন্ধান করছেন।

সম্পর্কে নিশ্চিত নন avconvতবে আপনি যে কমান্ডটি টাইপ করেছেন তা আমি কী করি তার সাথে মিল দেখায় FFmpeg। ইন FFmpegআপনি ভালো প্যারামিটার পাস করতে পারেন:

ffmpeg -i INPUT.mkv -c:v libx265 -preset ultrafast -x265-params lossless=1 OUTPUT.mkv

বেশিরভাগ x265স্যুইচ (কোনও মূল্য ছাড়াই বিকল্পগুলি) এর জন্য নির্দিষ্ট করা যেতে পারে (কেবলমাত্র এই সি এল এলই কেবলমাত্র x265বাইনারি দ্বারা ব্যবহৃত হয় )।

উপায়টি অতিক্রম করার সাথে সাথে আমি আমার অভিজ্ঞতা x265এনকোডিংয়ের সাথে ভাগ করতে চাই । বেশিরভাগ ভিডিওর জন্য (এটি ডাব্লুএমভি, বা এমপিইজি, বা এভিসি / এইচ .264) আমি ব্যবহার করি crf=23x265বাকি পরামিতিগুলি স্থির করে এবং সাধারণত এটি যথেষ্ট ভাল কাজ করে।

তবে প্রায়শই আমি সম্পূর্ণরূপে কোনও ভিডিও ট্রান্সকোড করার প্রতিশ্রুতি দেওয়ার আগে, আমি আমার সেটিংসটিকে ভিডিওর একটি ছোট অংশকে প্রশ্নে রূপান্তরিত করে পরীক্ষা করি। উদাহরণস্বরূপ, ধরুন একটি এমকেভি ফাইল যা স্ট্রিম 0 টি ভিডিও, স্ট্রিম 1 টি ডিটিএস অডিও এবং স্ট্রিম 2 একটি উপশিরোনাম হিসাবে রয়েছে:

ffmpeg -hide_banner \
-ss 0 \
-i "INPUT.mkv" \
-attach "COVER.jpg" \
-map_metadata 0 \
-map_chapters 0 \
-metadata title="TITLE" \
-map 0:0 -metadata:s:v:0 language=eng \
-map 0:1 -metadata:s:a:0 language=eng -metadata:s:a:0 title="Surround 5.1 (DTS)" \
-map 0:2 -metadata:s:s:0 language=eng -metadata:s:s:0 title="English" \
-metadata:s:t:0 filename="Cover.jpg" -metadata:s:t:0 mimetype="image/jpeg" \
-c:v libx265 -preset ultrafast -x265-params \
crf=22:qcomp=0.8:aq-mode=1:aq_strength=1.0:qg-size=16:psy-rd=0.7:psy-rdoq=5.0:rdoq-level=1:merange=44 \
-c:a copy \
-c:s copy \
-t 120 \
"OUTPUT.HEVC.DTS.Sample.mkv"

নোট করুন যে ব্যাকস্ল্যাশ সিগন্যাল লাইনটি একটি দীর্ঘ কমান্ডে বিচ্ছিন্ন হয়ে পড়েছে, আমি একটি জটিল সিএলআই ইনপুটটির বিভিন্ন বিট ট্র্যাক রাখতে সহায়তা করার জন্য এটি করি। আমি এটি লাইন-বাই লাইন ব্যাখ্যা করার আগে, যে অংশটি আপনি একটি ভিডিওর কেবলমাত্র একটি ছোট অংশকে রূপান্তর করেন তা হ'ল দ্বিতীয় লাইন এবং দ্বিতীয় শেষ লাইন: -ss 0মানে ইনপুট ডিকোডিং শুরু করার আগে 0 সেকেন্ডে চেষ্টা করুন এবং এর -t 120অর্থ আউটপুটটিতে লেখা বন্ধ করুন 120 সেকেন্ড পরে। আপনি এইচএইচ: মিমি: এসএস বা এইচএইচ: মিমি: এসএসএসএস সময় বিন্যাসগুলিও ব্যবহার করতে পারেন।

এখন লাইন বাই লাইন:

  1. -hide_bannerFFmpegশুরুতে বিল্ড তথ্য প্রদর্শন করা থেকে বাধা দেয় । আমি যখন কনসোলে স্ক্রোল করব তখন আমি এটি দেখতে চাই না;
  2. -ss 0ইনপুট ডিকোডিং শুরু করার আগে 0 সেকেন্ডে চেষ্টা করে। লক্ষ্য করুন এই প্যারামিটারটি দেওয়া হয় যদি পরে ইনপুট ফাইল এবং সামনে আউটপুট ফাইল, এটি একটি হয়ে আউটপুট বিকল্প এবং বলে ffmpegডিকোড করতে ও এক্স সেকেন্ড পর্যন্ত ইনপুট উপেক্ষা করুন, এবং তারপর আউটপুট লেখা শুরু। ইনপুট বিকল্প হিসাবে এটি কম সঠিক (কারণ বেশিরভাগ ধারক বিন্যাসে সন্ধান করা সঠিক নয়), তবে প্রায় সময় লাগে না। আউটপুট বিকল্প হিসাবে এটি খুব সুনির্দিষ্ট তবে নির্দিষ্ট সময়ের আগে সমস্ত স্ট্রিমটি ডিকোড করতে যথেষ্ট পরিমাণ সময় নেয় এবং পরীক্ষার উদ্দেশ্যে আপনি সময় নষ্ট করতে চান না;
  3. -i "INPUT.mkv": ইনপুট ফাইল নির্দিষ্ট করুন;
  4. -attach "COVER.jpg": আউটপুটে একটি কভার আর্ট (থাম্বনেইল ছবি, পোস্টার, যাই হোক না কেন) সংযুক্ত করুন। কভার আর্ট সাধারণত ফাইল এক্সপ্লোরারগুলিতে প্রদর্শিত হয়;
  5. -map_metadata 0: ইনপুট 0 থেকে যে কোনও এবং সমস্ত মেটাডেটা অনুলিপি করুন, উদাহরণস্বরূপ এটি কেবল ইনপুট;
  6. -map_chapters 0: ইনপুট 0 থেকে অধ্যায় তথ্য (উপস্থিত থাকলে) অনুলিপি করুন;
  7. -metadata title="TITLE": ভিডিওটির শিরোনাম সেট করুন;
  8. -map 0:0 ...: ইনপুট 0 এর মানচিত্রের স্ট্রিম 0, যার অর্থ আমরা ইনপুট থেকে প্রথম স্ট্রিমটি আউটপুটটিতে লেখা হোক। যেহেতু এই স্ট্রিমটি একটি ভিডিও স্ট্রিম, এটি আউটপুটে প্রথম ভিডিও স্ট্রিম , সুতরাং স্ট্রিম নির্দিষ্টকারী । এর ভাষার ট্যাগটি ইংরেজিতে সেট করুন;:s:v:0
  9. -map 0:1 ...: 8 নং লাইনের অনুরূপ, দ্বিতীয় স্ট্রিমটি (ডিটিএস অডিও) মানচিত্র করুন এবং এর ভাষা এবং শিরোনাম (প্লেয়ার থেকে চয়ন করার সময় সহজ শনাক্তকরণের জন্য) সেট করুন;
  10. -map 0:2 ...: 9 নং লাইনের অনুরূপ, এই স্ট্রিমটি বাদ দিয়ে একটি উপশিরোনাম;
  11. -metadata:s:t:0 ...: কভার আর্টের জন্য মেটাডেটা সেট করুন। এটি এমকেভি ধারক বিন্যাসের জন্য প্রয়োজনীয়;
  12. -c:v libx265 ...: ভিডিও কোডেক অপশন। এটি এত দীর্ঘ যে আমি এটিকে দুটি লাইনে বিভক্ত করেছি। গ্রেডিয়েন্টে নূন্যতম ব্যান্ডিং সহ (যা x265 এ সাফল্য অর্জন করে) উচ্চ মানের ব্লুয়ের ভিডিওর (1080p) জন্য এই সেটিংটি ভাল। এটি সম্ভবত ডিভিডি এবং টিভি শো এবং ফোন ভিডিওর জন্য একটি ওভারকিল। এই সেটিংটি বেশিরভাগই এই ডুম 9 পোস্ট থেকে চুরি হয়েছে ;
  13. crf=22:...: ভিডিও কোডেক পরামিতিগুলির ধারাবাহিকতা। উপরে উল্লিখিত ফোরাম পোস্টটি দেখুন;
  14. -c:a copy: অডিও মাধ্যমে অনুলিপি;
  15. -c:s copy: সাবটাইটেলগুলি অনুলিপি করুন;
  16. -t 120: 120 সেকেন্ড পরে আউটপুটটিতে লেখা বন্ধ করুন, যা আমাদের ট্র্যাঙ্কিংয়ের মানের প্রাকদর্শন করার জন্য 2-মিনিটের ক্লিপ দেয়;
  17. "OUTPUT.HEVC.DTS.Sample.mkv": আউটপুট ফাইলের নাম. আমি আমার ফাইলের নামগুলি ভিডিও কোডেক এবং প্রাথমিক অডিও কোডেক দিয়ে ট্যাগ করি।

রক্ষে। এটি আমার প্রথম উত্তর তাই আমি যদি কিছু মিস করি তবে একটি মন্তব্য করুন। আমি কোনও ভিডিও প্রযোজনা বিশেষজ্ঞ নই, আমি কেবল এমন এক ব্যক্তি যিনি ডিস্কটি প্লেয়ারের মধ্যে রেখে সিনেমা দেখতে খুব অলস's

গীত। সম্ভবত এই প্রশ্নটি অন্য কোথাও সম্পর্কিত কারণ এটি ইউনিক্স এবং লিনাক্সের সাথে দৃ .়ভাবে সম্পর্কিত নয়।


2
ঠিক আমি খুঁজছেন ছিল কি! বিকল্পগুলির দুর্দান্ত কভারেজ। আপনি কি জানেন যে c:s copyউপ- শিরোনামের কোনও বিষয়বস্তু না থাকলে ffmpeg ঝাঁকুনি দেয় কিনা?
এল্ডার গিক

1
@ এল্ডারগীক নো, ffmpeg কেবল তখনই কিছু বলবে যদি সেই বিকল্পটির কোনও প্রভাব থাকে।
Yifeng মি

এই বিকল্পটি কি সত্যই লসলেস এইচ 265 এনকোডিংয়ের জন্য ক্ষুদ্রতম ফাইলের আকার তৈরি করে? যদি তা না হয় তবে আমি কি এটি করার কোনও উপায় আছে?
বাফার ওভার পড়ুন

1
@ দ্য বিটবাইট h265-তে একটি লসলেস সংকোচনের স্তর আছে বলে আমি মনে করি না। সংক্ষেপণ-কম বিকল্পের জন্য, এটি ঠিক --lossless। আমি h264 থেকে h265 তে কোনও দোষহীন রূপান্তরটির জন্য নিরর্থক অনুসন্ধান করেছি এবং আমি যা শিখেছি তা আমাকে গাণিতিকভাবে অসম্ভব বলে বলে।
Yifeng মি

1
আপনার --losslessএই উত্তরটির স্যুইচ আউট সমন্বিত কমান্ডটি সত্যই সম্পাদনা করা উচিত , কারণ এই প্রশ্নের উত্তর হিসাবে মনে হচ্ছে আপনি এটি লসলেস সংকোচনের কথা বলছেন, যা বিভ্রান্তিকর।
হাশিম

8

আমি সম্প্রতি আমার পুরো ভিডিও ক্যাটালগটি এইচইভিসিতে স্থানান্তরিত করার সমস্যায় পড়েছি through আমি নিম্নলিখিত সেটিংস সহ https://github.com/FallingSnow/h265ize ব্যবহার করি ।

h265ize -v -m মাঝারি -q 20 -x --no-sao --aq- মোড 3 - মুছে ফেলা - স্ট্যাটস

-v - ভার্বোজ আউটপুট-
মি মাঝারি - মাঝারি এনকোড গতি (ছোট উচ্চতর মানের, ধীরে ধীরে আমি যে সময় / গুণমানের চেয়ে কম তা খুঁজে পাচ্ছি না)
-ক 20 - সিআরএফ ব্যবহৃত, 20 টি 18 বা এর মতো x264 এর মত তবে আরে। এই 1080p বিষয়বস্তু (আমার টিভির 90%) জন্য আমি আমার 4K সিনেমা জন্য 22 ব্যবহারের প্রবণতা
-x - ব্যবহারের কেন্দ্রীয় সংজ্ঞায়িত কমান্ড x265
--no-সাও পালাক্রমে নমুনা অভিযোজিত অফসেট (সঙ্কেতাক্ষরে লিখা গতি উন্নত) বন্ধ
--aq-মোড 3 - অটো বৈকল্পের সাথে অভিযোজিত পরিমাণ ব্যবহার করুন, 8 বিট এনকোডগুলিকে সহায়তা করে বিশেষত অন্ধকার অঞ্চলে, ঘটতে পারে এমন ব্যান্ডিংয়ের বেশিরভাগ থামিয়ে দেয় (যদিও এনকোড সময় ব্যয় করে) -
এনডিট - এনকোডিং ফাইলের সাথে এনকোডিং ফাইলটি প্রতিস্থাপন করুন (এটি ব্যবহারের আগে পরীক্ষা করুন ) -
স্ট্যাটস - আপনি যে পথ থেকে ছুটে এসেছেন তার মূলের একটি সিএসভি ফাইলে স্ট্যাটাস লিখুন।

এনকোডের গতি আমার রিগের প্রায় 30fps (বেশিরভাগ 1080p স্টাফের জন্য)। ডুয়াল জিয়ন ই 5 2687W ভি 2, তবে আমি এফএফএমপিইগ প্রক্রিয়াটিকে প্রসেসরের কোনও একটির প্রথম দিকটি ব্যবহার না করার জন্য বাধ্য করি (এটি আমার প্লেক্স সার্ভার, সুতরাং প্লেব্যাক ইত্যাদির প্রয়োজনে ট্রান্সকোডের জন্য ওভারহেড আছে কিনা তা নিশ্চিত করতে হবে)

হ্যাঁ এটির বেশিরভাগটিকে রূপান্তর করতে কিছুক্ষণ সময় নিয়েছে এবং এখন আমার একটি নির্ধারিত টাস্ক রয়েছে যা সেদিন থেকে স্টাফটি এনকোড করতে দিনে দুবার চালিত হয় x265 এ।

স্থান সঞ্চয় ছিল প্রচুর। আমার প্রাথমিক সান 20 টিবি ব্যবহারে ছিল, এখন এটি প্রায় 12 এর কাছাকাছি তবে স্পষ্টতই 6 মাসের বেশি সামগ্রীর সাথে যুক্ত করা হয়েছে।

আমি আমার সমস্ত চলচ্চিত্রেরও ট্রান্সকোড শুরু করেছি, তবে এটি একটি চলমান প্রক্রিয়া, কারণ আমাকে আইডি মানের গুণমান (রেডারের ভাগ্যক্রমে লেবেলগুলি পরে সুন্দরভাবে লেবেল করতে হবে) এবং তিনটি ট্রান্সকোড সেটিংসের একটি ব্যবহার করুন:

-m slower -q 18 -x --no-sao --aq-mode 32160p এর
-m medium -q 20 -x --no-sao --aq-mode 3জন্য 1080p এর জন্য 720p ট্রান্সকোডের জন্য
-m medium -q 22 -x --no-sao

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


সঙ্গে x265 2.4 এবং পরে (নতুন ল্যামডা টেবিল সঙ্গে , সাও সাধারণত বিটরেট প্রতি মানের জন্য একটি ভাল জিনিস দিতে জোচ্চোর এনকোড)। এটি এখনও সামান্য গন্ধযুক্ত, তবে এটি অন্যান্য যোগ্যতার পক্ষে যথেষ্ট পরিমাণে কমিয়ে দেয়।
পিটার কর্ডেস

-q 20সিআরএফ 20 নয়, এটি নিয়মিত কিউপি রেটকন্ট্রোল । ডিফল্ট এবং প্রস্তাবিত মোড, সিআরএফ, উচ্চ জটিলতার দৃশ্যে কিছুটা কিউপি উত্থাপন করে যাতে এটি দৃশ্যে খুব বেশি বিট ব্যয় করে না যা এনকোড করা খুব কঠিন। (আপনি অভিন্ন QP কাছাকাছি চান, বাড়াতে qcompআপ ডিফল্ট 0.6 থেকে হয়তো 0.7 বা 0.8 1.0 কাছাকাছি CQP কাছাকাছি।।)
পিটার Cordes

3

Ffmpeg এ x265 এনকোডারটির জন্য ক্ষতিবিহীন মোড সক্ষম করতে সঠিক বাক্য গঠন -x265-params lossless=1(আপনার সংযোজন করা দরকার =1)।

তবে লসলেস কোডিংয়ের জন্য আরও ভাল কোডেক পছন্দ রয়েছে। আমি পরীক্ষা করে দেখেছি যে এফএফভি 1 কমপক্ষে কিছু ধরণের ভিডিওতে (ফাইলের আকার = x265 এর 80%) আরও বেশি সংকোচিত করে (যদি সর্বোত্তম সেটিংস উভয় কোডেকের জন্য বেছে নেওয়া হয়)। এবং এটি দ্রুত কাজ করে, এবং (এএফআইকে) পেটেন্ট দ্বারা জড়িত নয়। এটি হ'ল ভিডিও সংরক্ষণাগারটির জন্য এটি লসলেস এইচ .265 এর চেয়ে সেরা।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.