কিভাবে ffmpeg ব্যবহার করে সঠিক ফ্রেম কাটা যায়?


22

আমি নির্দিষ্ট সময়ে ভিডিও ফাইলগুলি কাটাতে ffmpeg ব্যবহার করার চেষ্টা করছি। প্রারম্ভিক ফ্রেমটি নির্দিষ্ট করতে ffmpeg সহায়তা একটি বিকল্প-টাইমকোড_ফ্রেম_স্টার্ট দেখায় তবে আমি এই আদেশটি কাজ করতে পারছি না। ফলাফলের ভিডিওটি সর্বদা আসল ভিডিওর শুরুতে শুরু হয়। আমি যে কমান্ডটি চালাচ্ছি তার উদাহরণ এখানে:

ffmpeg -i input.mpg -acodec copy -vcodec copy -timecode_frame_start 200 -vframes 210 -n ouput.mpg

ফলাফলের কোনও পরিবর্তন ছাড়াই আমি অন্যান্য বিকল্পগুলির আগে এবং পরে টাইমকোড_ফ্রেম_স্টার্ট বিকল্পটি সরিয়ে নিয়েছি। আমার নির্দিষ্ট করার জন্য একটি অতিরিক্ত বিকল্প আছে? আমি বিভিন্ন ফাইল ফর্ম্যাট, এমকেভি, এভি, এমপি 4 চেষ্টা করেছি এবং কোডেক সম্পর্কিত সমস্যাটি দেখা যাচ্ছে না। আমি চেষ্টা করেছি এমন একটি ফাইল এখানে:

http://www.seaotter.com/marine/movies/hermit-long-01.mpg

আমি কিছু অনুপস্থিত করছি?


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

@ ব্যবহারকারী 393364 আমি মেলিং তালিকায় জিজ্ঞাসা করেছি এবং দেখা যাচ্ছে যে এই বিকল্পটি ওপি যা চায় তা করে না। আমি নতুন
কিছুও

শুধু আমি সঠিক ফ্রেম পর্যন্ত কাটা ব্যবহার করার জন্য একটি পদ্ধতি পাওয়া গেছে যে নোট করতে চেয়েছিলেন melt, দেখুন সুপার ব্যবহারকারী - কম্যান্ড লাইন থেকে সঠিকভাবে কাটা ভিডিও ফাইল
sdaau

উত্তর:


46

আমি কেবল শিখেছি যে timecode_frame_startএই মত কাজ করে না। নির্দিষ্ট ফ্রেমে শুরু করার একমাত্র উপায় হ'ল বেশ কয়েকটি ফ্রেমকে ss.msসিনট্যাক্সে রূপান্তর করা , বা hh:mm:ss.ms। সুতরাং, আপনার ভিডিওটি যদি 25 এফপিএসে থাকে এবং আপনি 133 ফ্রেমে শুরু করতে চান তবে আপনার প্রয়োজন হবে

133/25 = 5.32

সুতরাং, চালান

ffmpeg -ss 5.32 -i input.mp4 -c:v libx264 -c:a aac out.mp4

নোট করুন যে বিটস্ট্রিম কপি ( -c:v copy) সহ সঠিক ফ্রেমগুলি কাটা সম্ভব নয়, কারণ সমস্ত ফ্রেমগুলি আন্তঃকোডযুক্ত নয় এবং এটি নিজেরাই দাঁড়াতে পারে।

-ss সর্বদা ফ্রেম-নির্ভুল হবে।

আপনি যদি নির্দিষ্ট একটি ফ্রেমের এনকোড করতে চান তবে -frames:vউদাহরণস্বরূপ ব্যবহার করুন :

ffmpeg -ss 5.32 -i input.mp4 -c:v libx264 -c:a aac -frames:v 60 out.mp4

আপনার কাছে ভিডিও ফিল্টার ব্যবহার করার পছন্দ রয়েছে তবে অডিও সমর্থনটি সঠিক নাও হতে পারে। এবং দৃশ্যত, ফ্রেমগুলি অনুসন্ধান করা এখনও কোনও বৈশিষ্ট্য নয়। আপনি আরও তথ্যের জন্য এই FFmpeg- ব্যবহারকারীদের মেইলিং তালিকা থ্রেড অনুসরণ করতে পারেন :

আপনি -vf selectসঠিক ফ্রেম নির্বাচনের জন্য ব্যবহার করতে পারেন ( -vf 'select=gte(n\,100)'100 টি প্রথম ফ্রেমগুলি এড়িয়ে যাওয়ার মতো কিছু )


3
ড্রপ ফ্রেমযুক্ত ভিডিওগুলির জন্য (যেমন 29.97fps) যা 10 মিনিটের বেশি হয়; আপনি কীভাবে কোনও নির্দিষ্ট ফ্রেমের জন্য সঠিকভাবে সময় গণনা করতে যাবেন?
GFoley83

select=gte(n\,100)পদ্ধতি কাজ করে কিন্তু চাইছেন কর্মক্ষমতা খাচ্ছে। আপনি যদি একবারে মাত্র 30 টি ফ্রেমকে এনকোড করে পরীক্ষা করেন, তবে আমি যে ভিডিওটি শুরু করি তাতে আরও দীর্ঘ ffmpeg সন্ধানের কারণে সম্পূর্ণ হতে থাকে।
অ্যাডাম গ্রান্ট

6

ইচ্ছা

-vf নির্বাচন = "(n \, start_frame_num \, শেষ_ ফ্রেম_নুম ) এর মধ্যে, সেটপট = পিটিএস-STARTPTS"
যেমন,

-vf select=“between(n\,200\,300),setpts=PTS-STARTPTS"

200 তম (অন্তর্ভুক্ত) 300 তম ফ্রেম থেকে ভিডিও কেটে দেয়, ক্রম গণনা 0 থেকে শুরু হয়।

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