linux - Ffmpeg ব্যবহার করে শুরু এবং শেষ সময় উপর ভিত্তি করে ভিডিও কাটিং




video video-editing (4)

আপনি সম্ভবত 3 দ্বিতীয় চিহ্ন একটি keyframe নেই। অ-কীফ্রেমগুলি অন্যান্য ফ্রেম থেকে পার্থক্য এনকোড করার কারণে, পূর্ববর্তী কীফ্রেমের সাথে শুরু হওয়া সমস্ত ডেটা প্রয়োজন।

এমপি 4 কন্টেইনারের সাথে একটি সম্পাদনা তালিকা ব্যবহার করে পুনরায় এনকোডিং ছাড়াই একটি নন-কেফ্রেমে কাটা সম্ভব। অন্য কথায়, 3s এর আগে সবচেয়ে কাছের কীফ্রেম যদি 0 সেকেন্ডে থাকে তবে এটি 0 সেকেন্ড থেকে শুরু হওয়া ভিডিওটি অনুলিপি করবে এবং প্লেয়ারটিকে 3 সেকেন্ডের মধ্যে বাজানো শুরু করার জন্য একটি সম্পাদনা তালিকাটি ব্যবহার করবে।

আপনি যদি git মাস্টার থেকে সর্বশেষ ffmpeg ব্যবহার করেন তবে এটি আপনার দ্বারা প্রদত্ত কমান্ডটি ব্যবহার করে যখন এটি প্রয়োগ করা হয় তখন এটি একটি সম্পাদনা তালিকা ব্যবহার করে এটি করবে। যদি এটি আপনার জন্য কাজ না করে তবে আপনি সম্ভবত ffmpeg এর পুরোনো সংস্করণটি ব্যবহার করছেন, অথবা আপনার প্লেয়ার সম্পাদনা তালিকাগুলিকে সমর্থন করে না। কিছু খেলোয়াড় সম্পাদনা তালিকা উপেক্ষা করবে এবং সর্বদা শুরু থেকে শেষ পর্যন্ত মিডিয়াতে সমস্ত মিডিয়া খেলবে।

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

ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4

পুনরায় এনকোডিং করার সময় আপনি অতিরিক্ত মানের-সম্পর্কিত বিকল্প বা একটি বিশেষ AAC এনকোডার অন্তর্ভুক্ত করতে চাইতে পারেন। বিস্তারিত জানার জন্য, ভিডিওর জন্য ffmpeg এর x264 এনকোডিং গাইড এবং অডিওর জন্য AAC এনকোডিং নির্দেশিকা দেখুন

এছাড়াও, -t বিকল্পটি একটি নির্দিষ্ট সময়কাল নির্ধারণ করে না, শেষ সময় নয়। উপরের কমান্ডটি 3 সেকেন্ডের শুরুতে ভিডিওর 8s এনকোড করবে। 3 সেকেন্ডের শুরুতে এবং 8 সেকেন্ডে শেষ করার জন্য -t5 ব্যবহার করুন। আপনি যদি ffmpeg এর বর্তমান সংস্করণটি ব্যবহার করেন তবে আপনি নির্দিষ্ট সময়ে শেষ করার জন্য উপরের কমান্ডটি -t with -to প্রতিস্থাপন করতে পারেন।

আমি নিম্নলিখিত কমান্ড ব্যবহার করে ভিডিওটির শুরু এবং শেষ সময় ব্যবহার করে ভিডিওটি কাটানোর চেষ্টা করেছি

ffmpeg -ss 00:00:03 -t 00:00:08 -i movie.mp4 -acodec copy -vcodec copy -async 1 cut.mp4

উপরের কমান্ডটি ব্যবহার করে আমি 00:00:03 থেকে 00:00:03 পর্যন্ত ভিডিও কাটাতে চাই। তবে এটি প্রথম বার 11 সেকেন্ডের সাথে ভিডিওটি কাটাচ্ছে তার পরিবর্তে ভিডিওটি কাটাচ্ছে না। কেউ আমাকে কিভাবে এই সমাধান করতে সাহায্য করতে পারেন?

সম্পাদনা 1:

আমি mark4o দ্বারা প্রস্তাবিত নিম্নলিখিত কমান্ডটি ব্যবহার করে কাটা করার চেষ্টা mark4o

ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4

কিন্তু এটি নিম্নলিখিত ত্রুটি দেখানো হয়েছে।

এনকোডার 'aac' পরীক্ষামূলক তবে পরীক্ষামূলক কোডেক সক্ষম নয়

তাই আমি কমান্ড মধ্যে- -strict -2 যোগ করা হয়,

ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 -strict -2 cut.mp4

এখন এটা সূক্ষ্ম কাজ করছে।


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

ffmpeg -t 1:00 -i input.mpg -ss 45 output.mpg

এটি 0:45 থেকে 1:00 পর্যন্ত একটি 15 সেকেন্ড কাট তৈরি করবে।

এটি কারণ যখন -ss একটি আউটপুট বিকল্প হিসাবে দেওয়া হয়, প্রত্যাহার করা সময়টি এখনও ইনপুট থেকে পড়া মোট সময় অন্তর্ভুক্ত করা হয়, যা কখন বন্ধ হবে তা জানতে ব্যবহার করে। যখন -ss একটি ইনপুট বিকল্প হিসাবে দেওয়া হয়, তখন শুরু সময় খোঁজা এবং গণনা করা হয় না , যেখানে বিভ্রান্তি আসে।

বাদ দেওয়ার চেয়ে এটি হ্রাসপ্রাপ্ত, যেহেতু বাদ দেওয়া সেগমেন্টটি সরিয়ে দেওয়ার আগেও প্রক্রিয়া করা হচ্ছে, তবে যতদূর আমি জানি এটিই এটি করার একমাত্র উপায়। যদি আপনি একটি বড় ফাইলের মধ্যে গভীর থেকে ক্লিপিং করছেন তবে কেবল -ss জন্য গণিত এবং ব্যবহার -ss করতে আরও বেশি বুদ্ধিমান।


    ffmpeg -i movie.mp4 -vf trim=3:8 cut.mp4

দ্বিতীয় 3 থেকে দ্বিতীয় 8 ছাড়া সবকিছু বাদ দিন।


ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 -c copy cut.mp4 

অবিলম্বে করতে জন্য -C কপি ব্যবহার করুন। যে ক্ষেত্রে ffmpeg ভিডিও পুনঃ-এনকোড হবে না, ঠিক আকার অনুযায়ী কাটা হবে।