FFmpeg বিভাজন ভিডিও এবং ফিরে একীভূত


8

আমি কিছু start_timeএবং end_timeইনপুটগুলির উপর ভিত্তি করে ভিডিও বিভক্ত করতে এবং অন্যান্য ভিডিও ফাইলগুলির সাথে এগুলি প্রতিস্থাপনের জন্য এফএফপেম্প ব্যবহার করার চেষ্টা করছি । উদাহরণস্বরূপ, 10 15ইনপুটটির জন্য আমাকে 10 to 15অন্য ভিডিওর সাথে সেকেন্ড সেকেন্ড প্রতিস্থাপন করতে হবে ।

ঠিক আছে. আমার মনে যা আসে তা হ'ল:

  1. প্রথমে ভিডিওটি বিভক্ত করুন (এই ক্ষেত্রে, 0-10, 10-15 এবং 15-এন্ড)
  2. অন্যান্য ভিডিওর সাথে 10-15 প্রতিস্থাপন করুন
  3. সমস্ত উপ-ভিডিওগুলি আবার মার্জ করুন

প্রথম প্রশ্ন: এটি কি সেরা এবং দ্রুত সমাধান? আমাদের কাছে একটি নির্দিষ্ট সময়কালকে অন্য ভিডিওর সাথে ভিডিওতে নির্দিষ্ট সময়ের প্রতিস্থাপনের জন্য আরও সহজ কমান্ড বা অন্যান্য সরঞ্জাম রয়েছে?

দ্বিতীয় প্রশ্ন: FFmpeg ধরে নেওয়া একটি কার্যকর সমাধান, যখন আমি কেবল কমান্ডটি ব্যবহার করি, তখন ffmpeg -I input.video -ss 10 -t 5 -c copy output.mp4আমার ভিডিও প্রসেসিং কোড ফাইলটি পড়তে এবং প্রক্রিয়া করতে পারে না। আমি mediainfoদুটি ফাইলের তুলনা করার জন্য সরঞ্জামটি ব্যবহার করেছি এবং শিরোনামের আকারগুলিতে পার্থক্য লক্ষ্য করেছি যখন সমস্ত ভিডিও কোডেক সম্পর্কিত স্টাফ একই ছিল। আমি লক্ষ্য করেছি শিরোনাম সাইজ আলাদা, যা সম্ভবত সমস্যা তৈরি করছে causing শিরোনামের আকারকেও (কোডেকগুলি বাদ দিয়ে) একই রকম করার কোনও উপায় আছে কি?

আপডেট: এখানে মূল .mp4ফাইলটি যা এমুলেটরটিতে সূক্ষ্মভাবে কাজ করে।


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

@ এসএলএইচসি ভিডিও প্রসেসিং কোড একটি বিশাল কোড বেস। আমি এটা ভাগ করতে পারি না। এটি কেবলমাত্র কিছু কারণের জন্য মূল ফাইলটি পঠিত তবে পুনরায় উত্পন্ন ফাইলটি নয়। তবে .mp4প্রয়োজনে মূল ফাইলটি শেয়ার করতে পারি ।
আরিয়ানা

আমি দুটি ফাইলের তুলনা করতে মিডিয়েনফো সরঞ্জাম ব্যবহার করেছি এবং শিরোনামের আকার এবং স্টাফের মধ্যে পার্থক্য লক্ষ্য করেছি
অ্যারিয়ানা

মূলটি থাকা সাহায্য করবে, তবে কেন এটি পড়তে পারে না তা আমরা সমস্যা সমাধান করতে পারব না, আমি ভয় করি, যদি এটি কোনও অভ্যন্তরীণ কোড হয়।
14:30

@ slhck আমি ফাইলটি আপলোড করেছি। আমার প্রশ্নটি আপডেট হয়েছে
অ্যারিয়ানা

উত্তর:


9

বিভিন্ন কোডেক সহ উত্স ফাইলগুলি ব্যবহার trimএবংconcat

এর জন্য, আপনার পৃথক ফাইলগুলির একই রেজোলিউশন রয়েছে এবং আদর্শভাবে একই ফ্রেমরেট এবং ক্রোমা সাবসাম্পলিং ইত্যাদি রয়েছে তা নিশ্চিত করুন এটি সংক্ষিপ্তকরণের সময় ত্রুটি বা বিচ্যুতি রোধ করবে।

আপনি trimএবং concatফিল্টারগুলি ব্যবহার করে ফাইল বিভাজন ছাড়াই একসাথে সবকিছু করতে পারেন :

ffmpeg -i edv_g24.mp4 -i short-video.mp4 -filter_complex "\
[0:v]trim=0:10,setpts=PTS-STARTPTS[v0]; \
[1:v]trim=0:5,setpts=PTS-STARTPTS[v1]; \
[0:v]trim=15:30,setpts=PTS-STARTPTS[v2]; \
[v0][v1][v2]concat=n=3:v=1:a=0[out]" \
-map "[out]" output.mp4

এখানে, trimইনপুট ভিডিও স্ট্রিমগুলির পৃথক অংশগুলি নির্দিষ্ট করতে ব্যবহৃত হয় ( 0:v, 1:v) যা আপনি পরে যুক্ত করতে চান। এই অংশগুলির v0মাধ্যমে নামকরণ করা হয়েছে v2। ( setptsফিল্টার এই স্বতন্ত্র অংশগুলির টাইমস্ট্যাম্পগুলি 0 এ পুনরায় সেট করে, যা সংক্ষিপ্তকরণের জন্য প্রয়োজনীয়)। পরে, আমরা তিনটি অংশ একত্রীকরণ।

আপনি যদি একটি নির্দিষ্ট টাইমস্ট্যাম্প থেকে শেষ পর্যন্ত ছাঁটাতে চান trim=start=15তবে ব্যাপ্তিটি নির্দিষ্ট করার পরিবর্তে ব্যবহার করুন।

আপনার ফাইলগুলিতে অডিও থাকলে আপনাকে সেই স্ট্রিমগুলি আলাদাভাবে ছাঁটাই করতে হবে:

ffmpeg -i edv_g24_2.mp4 -i short-video.mp4 -filter_complex "\
[0:v]trim=0:10,setpts=PTS-STARTPTS[v0]; \
[0:a]atrim=0:10,asetpts=PTS-STARTPTS[a0]; \
[1:v]trim=0:5,setpts=PTS-STARTPTS[v1]; \
[1:a]atrim=0:5,asetpts=PTS-STARTPTS[v1]; \
[0:v]trim=15:30,setpts=PTS-STARTPTS[v2]; \
[0:a]atrim=15:30,asetpts=PTS-STARTPTS[a2]; \
[v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" output.mp4

নোট করুন যে ভিডিও এবং অডিও এই ক্ষেত্রে পুনরায় এনকোড হবে - উপযুক্ত আউটপুট মানের লক্ষ্যগুলি নির্দিষ্ট করা নিশ্চিত করুন (উদাহরণস্বরূপ -crfx264, x265 বা libvpx-vp9)। আপনি এফএফপিপিগ উইকিতে আরও জানতে পারেন, যেমন ভিপি 9 বা এইচ .264 এর জন্য ।

স্বতন্ত্র বিভাগগুলি ব্যবহার করা

আপনি যদি ক্লিপগুলি বিভক্ত করতে চান এবং পরে তাদের পুনরায় সংযুক্ত করতে চান:

ffmpeg -i edv_g24.mp4 -ss 0 -to 10 -c copy part1.mp4
ffmpeg -i edv_g24.mp4 -ss 10 -to 15 -c copy part2.mp4
ffmpeg -i edv_g24.mp4 -ss 15 -c copy part3.mp4

ffmpeg -i part1.mp4 -i short-video.mp4 -i part3.mp4 -filter_complex \
"[0:v][1:v][2:v]concat=n=3:v=1:a=0[outv]" \
-map "[outv]" -t 30 output.mp4

যদি ফাইলগুলিতে অডিও থাকে তবে উপরের মত একই পদ্ধতি ব্যবহার করুন:

ffmpeg -i part1.mp4 -i short-video.mp4 -i part3.mp4 -filter_complex \
"[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" -t 30 output.mp4

এটি আবার ভিডিও স্ট্রিমটিকে পুনরায় এনকোড করবে। এটি কিছুটা সহজবোধ্য তবে অন্যথায় উপরের পদ্ধতির সমতুল্য হওয়া উচিত।

concatডেমাক্সার ব্যবহার করে

আপনি নীতিগতভাবে কনট্যাট ডেমাক্সার ব্যবহার করে বিটস্ট্রিমগুলিকে পুনরায় এনকোডিং না করে একত্রিত করার চেষ্টা করতে পারেন। নামক একটি ফাইল তৈরি concat.txtকরুন এবং নিম্নলিখিত এন্ট্রি যুক্ত করুন (উপরে তৈরি ভিডিও ক্লিপগুলির সাথে সম্পর্কিত):

file 'part1.mp4'
file 'short-video.mp4'
file 'part3.mp4'

তারপরে এই স্বতন্ত্র ফাইলগুলিকে একত্রিত করুন:

ffmpeg -f concat -i concat.txt -c copy output.avi

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

concatপ্রোটোকল ব্যবহার করে

উপরের concatমত একই ধরণের বাধা (একই কোডেক, রেজোলিউশন, ইত্যাদি) এর সাথে প্রোটোকল ব্যবহার করে উপরের ধরণের ফাইল-স্তরের কনটেন্টেশন অর্জন করা যেতে পারে :

ffmpeg -i "concat:part1.avi|part2.avi|part3.avi" -c copy output.mp4

অধিবেশন সম্পর্কিত আরও তথ্যের জন্য, সম্পর্কিত এফএফম্পেগ উইকি পৃষ্ঠাটি পড়ুন


এটি খুব সম্পূর্ণ দেখায়! ধন্যবাদ। আমি তাদের চেষ্টা করব!
আরিয়ানা

কেন concatপদ্ধতিটি ব্যবহার করে ত্রুটি ছুঁড়েছে [concat @ 00000000025c2560] Line 1: unknown keyword 'part1.mp4 \\ text.txt: Invalid data found when processing input
অ্যারিয়ানা

"স্বতন্ত্র বিভাগগুলি ব্যবহার করার জন্য" আমি আউটপুটটি থামাতে এবং ছোট কাটতে দেখি। এটি ঠিক করার কোনও উপায় আছে কি?
আরিয়ানা

পদ্ধতি 1 পুরোপুরি কাজ করে। একটি জিনিস: নির্দিষ্ট সংখ্যার (30 এর পরিবর্তে) উল্লেখ না করে আমরা কীভাবে "শেষ অবধি" নির্দিষ্ট করতে পারি
আরিয়ানা

1
দুঃখিত, একটি ভুল করেছেন। জন্য concatডিমাক্সার, সিনট্যাক্স ভিন্ন ছিল। এখনই স্থির। শেষ অবধি যেতে, ব্যবহার করুন trim=start=15, ছাঁটা ফিল্টার ডকুমেন্টেশন দেখুন: ffmpeg.org/ffmpeg-filters.html#trim - সময় সংক্রান্ত সমস্যা হিসাবে, এটি সত্যই আপনার উত্স উপাদানের উপর নির্ভর করে। আপনার আপলোড করা ক্লিপটি নিয়ে যদিও কনকনেটেটিংয়ের সমস্যা নেই।
slhck
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.