কীভাবে একই ভিডিও থেকে ffmpeg থেকে ক্লিপগুলি সংযুক্ত করতে হয়


15

এতে আমার বিভিন্ন দৃশ্যের একটি দীর্ঘ ভিডিও রয়েছে have আমি ffmpeg 2.1.4 ব্যবহার করে ভিডিওটি থেকে 2 টি দৃশ্যাবলী (যা কোনও আই-ফ্রেমে শুরু হয় না) বের করতে এবং তা বোঝাতে চাই।

যুক্তির জন্য, বলুন যে আমি 01:00 এবং 02:00 থেকে 5 সেকেন্ড চাই।

আমি এটা করতে পারবো:

ffmpeg -ss 01:00 -i in.mkv -ss 02:00 -i in.mkv -filter_complex "
  [0:v]select='lt(t,5)'[v0];
  [0:a]aselect='lt(t,5)'[a0];
  [v0][a0][1:v][1:a]concat=n=2:v=1:a=1
" -c:a libvorbis -t 10 out.mkv

এটি আমার মুভিটি দেয় যা আমাকে দেয় তবে প্রকৃতপক্ষে নির্বাচন করুন ffmpeg মুভিটির পুরো বাকী অংশটি ডিকোড করতে বাধ্য করে। সুতরাং, আমি কীভাবে এটি প্রথম সিনেমার ডিকোডিংয়ের পরিবর্তে ছাঁটাই করতে বলব?

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

আমি এমন কোনও ফিল্টার খুঁজে পাই না যা বাষ্পের দৈর্ঘ্যকে ছিন্ন করে। সেখানে ফিল্টার নোড যে মিলা হয় -tবা -ssপরামিতি?

উত্তর:


16

কনক্যাট ফিল্টার

আপনার অতিরিক্ত ফিল্টারিংয়ের প্রয়োজন হলে এই পদ্ধতিটি সেরা:

ব্যবহার করুন trim, atrim, setpts, asetpts, এবং concatফিল্টারগুলি:

ffmpeg -i input -filter_complex \
"[0:v]trim=60:65,setpts=PTS-STARTPTS[v0]; \
 [0:a]atrim=60:65,asetpts=PTS-STARTPTS[a0]; \
 [0:v]trim=120:125,setpts=PTS-STARTPTS[v1];
 [0:a]atrim=120:125,asetpts=PTS-STARTPTS[a1]; \
 [v0][a0][v1][a1]concat=n=2:v=1:a=1[out]" \
-map "[out]" output.mkv
  • setptsএবং asetptsউপস্থাপনা টাইমস্ট্যাম্প সমস্যার কারণে ঝুঁকিপূর্ণ আউটপুট প্রতিরোধ করবে।

  • সাম্প্রতিক সংস্করণটি ব্যবহার করার বিষয়টি নিশ্চিত করুন। উইন্ডোজ, ওএস এক্স এবং লিনাক্সের লিঙ্কগুলির লিঙ্কগুলির জন্য এফএফএমপিগ ডাউনলোড পৃষ্ঠাটি দেখুন ।


কনক্যাট ডেমাক্সার

আরেকটি পদ্ধতি হ'ল পৃথক পৃথকভাবে বিভাগগুলি তৈরি করা এবং পুনরায় এনকোডিংয়ের পরিবর্তে সেগুলি অনুলিপি করা (সময় এবং গুণমান সাশ্রয় করতে) এবং কনট্যাট ডেমাক্সারের সাথে যুক্ত হওয়া ।

$ ffmpeg -ss 60 -i input -t 5 -codec copy clip1.mkv
$ ffmpeg -ss 120 -i input -t 5 -codec copy clip2.mkv
$ echo "file 'clip1.mkv'" > concat.txt
$ echo "file 'clip2.mkv'" >> concat.txt
$ ffmpeg -f concat -i concat.txt -codec copy output.mkv

2
আহ, ধন্যবাদ ট্রিম আমি কি অনুপস্থিত ছিল। যাইহোক, আমি নির্দিষ্ট করা অফসেটটিতে পেতে খুব দীর্ঘ সময় লাগে, যেন এটি সমস্ত কিছু ডিকোডিং করে। এছাড়াও, আউটপুটটির একটি অংশ অডিও হারিয়েছিল। ঠিক করার জন্য, আমি-এস-এর সাথে একাধিকবার একই ইনপুট নির্দিষ্ট করেছি, তারপরে ভিডিওটি ছাঁটাই করতে ট্রিম ব্যবহার করুন। সেক্ষেত্রে আপনার সেটআপের দরকার নেই, যেহেতু এসএস পিটিএস 0 সেট করে That স্ট্রিমগুলি অনুলিপি করার জন্য, আমি এটির আগে চেষ্টা করেছি। এটি পূর্ববর্তী আই-ফ্রেমে শুরু হয়, সুতরাং আপনি যেটি চেয়েছিলেন তার চেয়ে সিনেমার একটি আলাদা অংশ পান।
স্কুবিড

আপনি কি দয়া করে আমার প্রশ্নের উত্তরটি উত্তরটির অনুরূপ? video.stackexchange.com/questions/18247/...
Eftekhari

মজার বিষয় -filter_complexকাজ করে তবে concatফাইলগুলি হয় না - যেমন 1 ম ভিডিওটি দেখতে ভাল দেখায় তবে ২ য় মানের গুণটি ভয়াবহ। দ্রষ্টব্য, আমি এই আদেশগুলি উভয়ের জন্য ঠিক অনুলিপি করেছি (ইনপুট ফাইল ব্যতীত)।
ববমার্কি

7

এটি দ্রুত কাজ করা উচিত ...

ffmpeg -ss 1:00 -t 5 -i in.mkv -ss 2:00 -t 5 -i in.mkv \
  -filter_complex "[0][1]concat=n=2:v=1:a=1" \ 
  out.mkv

আউটপুটে -t নির্দিষ্ট করার দরকার নেই। কনকটের আগে অডিও এবং ভিডিও ভাগ করার দরকার নেই।


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