প্যারামিটারগুলি ব্যবহার -ss
এবং -to
সন্ধানের পরিবর্তে , যা খুব সঠিক বলে মনে হচ্ছে না, আমি কি প্রদত্ত ফ্রেম সংখ্যার জন্য ভিডিওগুলি কাটতে পারি? উদাহরণ স্বরূপ;
ffmpeg -i video.webm -startingframe 80 -endingframe 560 output.webm
[৮০ তম ফ্রেম এবং 560 তম ফ্রেম অন্তর্ভুক্ত। সুতরাং, মোট হিসাবে এটি (560 - 80 +1) ফ্রেম তৈরি করে]
উত্তর এবং কিছুটা অনুসন্ধানের পরে, আমি কয়েকটি কমান্ড চেষ্টা করেছি। তবে এখনও পর্যন্ত আমি কোনও গ্রহণযোগ্য উপায় খুঁজে পাইনি।
যদি কেউ 250 তম এবং 750 তম ফ্রেমের মধ্যে ভিডিও স্ট্রিমটি কাটাতে চায় তবে এটি যাওয়ার উপায়। এটি আউটপুট হিসাবে 501 ফ্রেম দেবে:
দ্রষ্টব্য: মুভি.এমপি 4 এর 25 এফপিএস রয়েছে এবং এর অডিও নমুনা হার 48 কে k
ffmpeg -i movie.mp4 -an -vf "select=between(n\,250\,750),setpts=PTS-STARTPTS" v_stream.webm
যেমনটি প্রত্যাশিত, আউটপুটটি 20 সেকেন্ড দীর্ঘ, হুবহু।
অডিওর জন্য একই পদ্ধতি ব্যবহার করা:
ffmpeg -i movie.mp4 -vn -af "aselect=between(n\,480\,1440),setpts=PTS-STARTPTS" a_stream.webm
অপ্রত্যাশিতভাবে, এটির খুব কম নির্ভুলতা রয়েছে। এটি আমাকে 960001 (960 কে + 1) নমুনা দেওয়া উচিত যা 20 সেকেন্ডের অডিও সমান। তবে পরিবর্তে, আউটপুটটি 20.505 সেকেন্ড দীর্ঘ এবং 984240 নমুনা রয়েছে। এছাড়াও, আমি যদি সময়কাল বৃদ্ধি করি তবে ত্রুটিও বৃদ্ধি পায়।
তারপরে আমি অডিও স্ট্রিমটি কাটানোর জন্য -ss-to পরামিতিগুলি ব্যবহার করার চেষ্টা করেছি:
ffmpeg -i movie.mp4 -vn -ss 10.000 -to 30.000 a_stream.webm
পুরানো ক্লাসিক উপায় আরও ভাল কাজ করে। আউটপুট 20.003 সেকেন্ড দীর্ঘ ছিল এবং 960144 নমুনা রয়েছে। এছাড়াও, ক্রমবর্ধমান সময়কাল ত্রুটি বৃদ্ধি করে না, ত্রুটিটি স্থির থাকে, input ইনপুট ফাইলের সাথে সর্বদা 144 নমুনা উদ্বৃত্ত থাকে।
select
সারাংশ :
ফিল্টার বেশিরভাগ সময় ভাল কাজ করে তবে একটি নির্বাচন হয় না select ক্লাসিক -ss
পরামিতি অডিওর জন্য আরও ভাল কাজ করে তবে নমুনা-নির্ভুল নয়। এছাড়াও, একসাথে ব্যবহার -vf select
এবং -ss
পরামিতিগুলি সম্ভব নয় , কারণ -ss
আমরা চাইলে এটি কেবল অডিওকেই প্রভাবিত করে যখন অডিও এবং ভিডিও উভয় স্ট্রিমকেই প্রভাবিত করবে।
সুতরাং, মিডিয়া ফাইলটি অবশ্যই কাটাতে আমাকে এই 3 টি পদক্ষেপটি করতে হবে:
ffmpeg -i movie.mp4 -an -vf "select=between(n\,250\,750),setpts=PTS-STARTPTS" v_stream.webm
ffmpeg -i movie.mp4 -vn -ss 10.000 -to 30.000 a_stream.webm
ffmpeg -i v_stream.webm -i a_stream.webm -c:v copy -c:a copy movie-between_10th_and 20th_seconds.webm
এটি সবচেয়ে সঠিক ফলাফল দেয়। ভিডিওটি 20.000 সেকেন্ড দীর্ঘ এবং ফ্রেম-অ্যাকিউর্ট অডিও 20.003 সেকেন্ড লম্বা এবং 960144 নমুনা রয়েছে। ভিডিও স্ট্রিমের সাথে ঠিক মেলে না তবে এটি ঠিক আছে। এখানে মাত্র ১৪৪ টি নমুনা উদ্বৃত্ত রয়েছে। সবচেয়ে বড় ক্ষতিটি হ'ল, যখনই আমি কোনও ফাইল কাটতে চাই, আমাকে একটি সাধারণ কাজের জন্য 3 টি কমান্ড প্রেরণ করতে হয় এবং এটি দুটি অপ্রয়োজনীয় ফাইল তৈরি করে: a_stream.webm এবং v_stream.webm। এবং select
ফিল্টারটি চেষ্টা করেছি এমন কিছু ইনপুট ফাইলগুলিতে কাজ করছে না। এটি সফলভাবে কাজটি (?) করে তবে এনকোডিং প্রক্রিয়াটি কখনও থামায় না, তাই আমাকে প্রতিবার কমান্ড প্রম্পটটি বন্ধ করতে হবে।
-ss
ফ্রেম-নির্ভুল ( এখানে দেখুন )। আপনার কি আসলে ভেরিয়েবল-এফপিএস ইনপুট রয়েছে? আমার উত্তর মেইলিং তালিকা থ্রেডে select
ফিল্টারগুলি ব্যবহার করে যেখানে আপনি ফ্রেম নম্বর নির্দিষ্ট করতে পারেন তা উল্লেখ করে। আপনি কি চেষ্টা করেছেন?
select
এবং aselect
ফিল্টার চেষ্টা করেছি । Select
ভিডিওর জন্য ফ্রেম-নির্ভুল, তবে aselect
নমুনা-সঠিক নয়। আসলে এটি নির্ভুল হওয়া অনেক দূরে। এটি সাধারণ -ss
-to
পরামিতিগুলি ব্যবহার করার চেয়ে আরও খারাপ ফলাফল দেয় । যে কারণে, আপাতত, আমি সবচেয়ে নির্ভুল কাটিয়া অর্জনে select
ফিল্টার এবং -ss
-to
পরামিতিগুলির সংমিশ্রণ ব্যবহার করি । তবে এটি করার একটি grungy উপায়। দয়া করে আমার প্রথম পোস্টটি দেখুন আমি কিছু