FFMPEG(libx264) "উচ্চতা ২ দ্বারা বিভক্ত নয়"




h.264 (5)

শুধু ব্যবহার -2

স্কেল ফিল্টার ডকুমেন্টেশন থেকে :

যদি মানগুলির মধ্যে একটি হল n > 1 সাথে -n হয়, স্কেল ফিল্টার এমন মান ব্যবহার করবে যা ইনপুট চিত্রের অনুপাত অনুপাত বজায় রাখে, যা অন্য নির্দিষ্ট মাত্রা থেকে গণনা করা হয়। তারপরে, এটি নিশ্চিত করা হবে যে গণনা করা মাত্রা n দ্বারা ভাগ করা যায় এবং প্রয়োজনে মানটি সামঞ্জস্য করে।

উদাহরণ

1280 তে প্রস্থ সেট করুন এবং উচ্চতা স্বয়ংক্রিয়ভাবে অনুপাত অনুপাত সংরক্ষণ করতে গণনা করা হবে এবং উচ্চতা 2 দ্বারা বিভক্ত হবে:

-vf scale=1280:-2

উপরে হিসাবে একই, কিন্তু পরিবর্তে ঘোষণা উচ্চতা সঙ্গে; ফিল্টার দ্বারা মোকাবেলা প্রস্থ প্রস্থান:

-vf scale=-2:720

"2 দ্বারা বিভাজ্য"

X264 অনুসারে, "ইউটিউব 4: 2: 0 ক্রোমো সাবম্যাপ্লপ আউটপুটগুলির জন্য" প্রস্থ ও উচ্চতার জন্য 2 দ্বারা ভাগযোগ্য "প্রয়োজন। 4: 2: 2 এর প্রয়োজন হবে "প্রস্থের জন্য 2 দ্বারা ভাগ্যবান", এবং 4: 4: 4 এর এই বিধিনিষেধ নেই। তবে, অধিকাংশ অ-FFmpeg ভিত্তিক প্লেয়ার শুধুমাত্র 4: 2: 0 সঠিকভাবে ডিকোড করতে পারে, তাই আপনি প্রায়ই H.264 ভিডিও আউটপুট করার সময় -pix_fmt yuv420p বিকল্পের সাথে ffmpeg কমান্ডগুলি দেখেন।

বিচারকার্য স্থগিত রাখার আদেশ

দুর্ভাগ্যক্রমে আপনি উভয় প্রস্থ এবং উচ্চতা উভয় জন্য ব্যবহার করতে পারবেন না, কিন্তু যদি আপনি ইতিমধ্যে একটি মাত্রা উল্লেখ করে -2 ব্যবহার করে একটি সহজ সমাধান।

আমি libx264 কোডেক ব্যবহার করে FFMPEG ব্যবহার করে ফ্রেমের একটি সেট থেকে একটি। এমপি 4 ভিডিও এনকোড করার চেষ্টা করছি।

এই কমান্ড আমি চলমান হয়:

/usr/local/bin/ffmpeg -r 24 -i frame_%05d.jpg -vcodec libx264 -y -an video.mp4

আমি কখনও কখনও নিম্নলিখিত ত্রুটি পেতে:

[libx264 @ 0xa3b85a0] height not divisible by 2 (520x369)

একটি বিট কাছাকাছি অনুসন্ধান করার পরে এটি সমস্যা স্কেলিং অ্যালগরিদম সঙ্গে কিছু করার আছে এবং একটি -vf যুক্তি যোগ করে সংশোধন করা যেতে পারে বলে মনে হয়।

যাইহোক, আমার ক্ষেত্রে আমি কোন স্কেলিং করতে চান না। আদর্শভাবে, আমি মাত্রা ফ্রেম হিসাবে একই মাত্রা রাখতে চান। কোন পরামর্শ? H264 প্রয়োগ করা হয় যে অনুপাত অনুপাত কিছু সাজান আছে?


আপনি bitand পরিবর্তে bitand ফাংশন ব্যবহার করতে পারেন:

বিট্যান্ড (এক্স, 65534)

trunc(x/2)*2 হিসাবে একই কাজ করবে এবং এটি আমার মতে আরো স্বচ্ছ।
( 65534 এখানে একটি জাদু নম্বর বিবেচনা করুন;))

আমার টাস্ক স্বয়ংক্রিয়ভাবে অনেক ফাইল ফাইল অর্ধেক রেজোলিউশন স্কেল করা ছিল।

scale=-2,ih/2 সামান্য ব্লুর্ড ইমেজ সীসা

কারণ:

  • ইনপুট ভিডিও তাদের ডিসপ্লে দৃষ্টিপাত অনুপাত (DAR) সেট ছিল
  • scale বাস্তব ফ্রেম মাত্রা scale
  • প্রিভিউয়ের সময় নতুন ভিডিওগুলির মাপগুলি DAR ব্যবহার করে সংশোধন করা উচিত যা খুব কম রিজাউন্টন ভিডিওর ক্ষেত্রে (360x288, DAR 16: 9) ব্লারিং হতে পারে

সমাধান:

-vf "scale='bitand(oh*dar, 65534)':'bitand(ih/2, 65534)', setsar=1"

ব্যাখ্যা:

  • output_height = input_height / 2
  • output_width = output_height * original_display_aspect_ratio
  • আউটপুট_উইডথ এবং আউটপুট_হাইট উভয় এখন 2 দ্বারা বিভক্ত নিকটতম ছোট সংখ্যা বৃত্তাকার হয়
  • setsar=1 মানে আউটপুট_ডিমেশন এখন চূড়ান্ত, কোনও অনুপাত অনুপাত সংশোধন প্রয়োগ করা উচিত নয়

কেউ এই সহায়ক খুঁজে পেতে পারে।


এখানে scale সমাধানগুলির সমস্যাটি হল যে তারা উত্স চিত্র / ভিডিওটি বিকৃত করে যা প্রায় আপনি চান না।

পরিবর্তে, আমি বিজোড় মাত্রা একটি 1-পিক্সেল প্যাড যোগ করা হল সবচেয়ে ভাল সমাধান পাওয়া গেছে। (ডিফল্টরূপে, প্যাডিং কালো এবং লক্ষ্য করা কঠিন।)

অন্যান্য pad সমাধানগুলির সমস্যাগুলি হল যে তারা সর্বদা মানসিকতার উপর সাধারণীকরণ করে না কারণ তারা সর্বদা প্যাড করে।

এই সমাধানটি যদি অদ্ভুত হয় তবে উচ্চতা এবং / অথবা প্রস্থে 1-পিক্সেল প্যাড যুক্ত করে:

-vf pad="width=ceil(iw/2)*2:height=ceil(ih/2)*2"

এটি আদর্শ কারণ কোন প্যাডিং প্রয়োজন থাকলেও এটি সর্বদা সঠিক জিনিসটি করে।


লর্ড ন্যেকবিয়ার সঠিক উত্তর আছে, খুব দ্রুত

-vf scale=1280:-2

অ্যান্ড্রয়েড জন্য, যোগ ভুলবেন না

"-preset ultrafast" and|or "-threads n"

মূল প্রশ্নটির উত্তর যা ভিডিওটিকে স্কেল করতে চায় না তা হল:

-vf "pad=ceil(iw/2)*2:ceil(ih/2)*2"

COMMAND:

ffmpeg -r 24 -i frame_%05d.jpg -vcodec libx264 -y -an video.mp4 -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2"

মূলত, H264 এমনকি মাত্রা প্রয়োজন তাই এই ফিল্টার হবে:

  1. মূল উচ্চতা এবং প্রস্থ 2 দ্বারা বিভক্ত করুন
  2. নিকটতম পিক্সেল পর্যন্ত এটি বৃত্তাকার
  3. আবার 2 দ্বারা গুণিত, এইভাবে এটি এমনকি একটি সংখ্যা তৈরি
  4. এই সংখ্যা পর্যন্ত কালো প্যাডিং পিক্সেল যোগ করুন

ফিল্টার প্যারামিটার যোগ করে আপনি প্যাডিংয়ের রঙ পরিবর্তন করতে পারেন :color=whiteপ্যাড এর ডকুমেন্টেশন দেখুন।