আমি কীভাবে ফ্রেমের আকার পরিবর্তন করব, প্রস্থ সংরক্ষণ করে (ffmpeg ব্যবহার করছি)?


21

আমি এই স্ট্যাকএক্সচেঞ্জ সাইটে এবং এফএফপিপিগ এনকোডারটি ব্যবহার করে নতুন। আমার কাছে এমন একটি ভিডিও আছে যা 720x480 (3: 2) যা আমি একটি সাইটের জন্য আমার কাছে থাকা অন্যান্য ভিডিওর সাথে মিলিয়ে 720x406 (16: 9) এ পরিবর্তন করতে চাই। আমি বিভিন্ন কমান্ড সমন্বয় চেষ্টা করেছি, সহ:

ffmpeg -i myfile.mv4 -s 720x406 outfile.mp4
ffmpeg -i myfile.m4v -c copy -aspect 16:9 outfile.mp4

আমি যেটি দিয়ে শেষ করব তা হ'ল একটি ভিডিও যা নির্দিষ্ট উচ্চতায় ছড়িয়ে গেছে তবে প্রস্থটি সংরক্ষণ করে নি। এটি 608x406 বা এর আশেপাশে শেষ হয়। আমি আজ এফএফম্পেগের বিভিন্ন জিইউআই সংস্করণ নিয়ে খেলছি এবং তারা একই কাজ করছে বলে মনে হচ্ছে।

কাঙ্ক্ষিত ফ্রেমের আকার অর্জনের জন্য (কমান্ড লাইনের মাধ্যমে আমার আরও নিয়ন্ত্রণ থাকবে তা ধরে নিলে) সঠিক বিকল্পগুলি / প্যারামিটারগুলি কী হবে?

উত্তর:


36

স্কেল ফিল্টার ব্যবহার করা এটি করবে তবে এর থেকে আরও কিছু আছে।

ffmpeg -i input.mov -vf scale=720x406 output.mov 

প্রয়োজনীয় পিক্সেল মাত্রা সহ একটি সিনেমা তৈরি করবে, তবে আপনি যদি আউটপুটটি দেখেন তবে আপনি দেখতে পাবেন যে এটি মেটাডেটাতে তথ্য যুক্ত করে যাতে এটি স্কোয়ারবিহীন পিক্সেল ব্যবহার করে মূল হিসাবে একই দিক অনুপাতটি ফিরে খেলতে পারে। সুতরাং আপনি যদি মুভিটি আনমোরিকভাবে একটি নতুন দিক অনুপাতের দিকে প্রসারিত করতে চান তবে আপনাকে ম্যানুয়ালি পিক্সেল অ্যাস্পেক্ট রেশিও সেট করতে হবে, "স্যাম্পল এপেক্ট রেসিও" এর জন্য এসএআর বলা হয়, এইভাবে স্কোয়ার পিক্সেলের জন্য ব্যবহার করুন:

ffmpeg -i input.mov -vf scale=720x406,setsar=1:1 output.mov

বিকল্পভাবে আপনি যা চান তাই প্রদর্শন দিক অনুপাত সেট করতে পারেন:

ffmpeg -i input.mov -vf scale=720x406,setdar=16:9 output.mov

আমি -vf কমান্ড এবং x = y, z = এর দ্বারা প্রকাশিত একটি এক্সপ্রেশন যা ফিল্টারগুলির একটি শৃঙ্খলা তৈরি করছে তা দিয়ে আমি যা করছি । ফিল্টারগুলি বেশ জটিল হতে পারে তবে সর্বাধিক সাধারণ ব্যবহারে তারা ফর্মটি গ্রহণ করে effect=parameter,nexteffect=anotherparameterএবং আপনি সেগুলি যেভাবে লেখেন সেভাবে তারা প্রক্রিয়াজাত হয়।

আপনি কোডেক ইত্যাদির জন্য অতিরিক্ত কমান্ড লিখতে চাইতে পারেন, উদাহরণস্বরূপ -c:v libx264x264 এমপি 4 এনকোডার ব্যবহার করতে এবং -crf 20ধ্রুবক হারের ফ্যাক্টরটি 20 এ সেট করার মতো কিছু (সাধারণত আকার এবং মানের মধ্যে বেশ ভাল সমঝোতা)। সুতরাং, একটি যুক্তিসঙ্গতভাবে সম্পূর্ণ কমান্ড দেখতে হবে:

ffmpeg -i input.mov -vf scale=720x406,setdar=16:9 -c:v libx264 -preset slow -profile:v main -crf 20 output.mov

প্রধান প্রোফাইল ডিভাইসের সামঞ্জস্যের জন্য ভাল, slowlibx264 এনকোডারটির প্রিসেটটি গতি এবং মানের একটি খুব ভাল ভারসাম্য, তাই এটি একটি ভাল সাধারণ ওয়েব-এনকোডিং ওয়ার্কহর্স। আপনি এটি ব্যবহার করে fastবা veryfastধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে উন্নত করতে পারেন veryslowএবং placeboএটি veryslowপ্রক্রিয়াজাতকরণের অনেক বেশি সময় ব্যয় করে (তাই নামটি) তুলনায় এটিকে কিছুটা আরও ভাল করে তুলতে পারেন ।

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


1
আপনি যদি ffmpeg এর সাম্প্রতিক সংস্করণগুলি ব্যবহার করছেন তবে আপনার আর কোডেক হিসাবে x264 নির্ধারণ করার দরকার নেই, তবে আপনি কী সেটিংস চান তা দেখার জন্য এটি উপযুক্ত be
থামুন

1
আমি মনে করি মেটাডেটার একটি ডিআর ফিল্ড রয়েছে। সুতরাং ব্যবহার করে setsarকি পরোক্ষভাবে ডিআর সেট করা হয়?
jiggunjer

আমাকে "-সি অনুলিপি" ব্যবহার করতে হবে, তবে অন্যদিকে আমি পর্দার আকার পরিবর্তন করতে চাই। আমি কীভাবে এটি অর্জন করতে পারি?
ডাঃ জ্যাকি

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