ভিডিও কাটাতে ffmpeg ব্যবহার করা


333

আমি এরকম একটি বড় ফাইলের একটি অংশ কাটাতে ffmpeg ব্যবহার করছি:

ffmpeg -i input.wmv -ss 60 -t 60 -acodec copy -vcodec copy output.wmv

-ssঅংশ কাজ করে জরিমানা কিন্তু -tউপেক্ষা করা হয়। এটি নির্দিষ্ট করে নির্দিষ্ট নির্দিষ্ট সেকেন্ডগুলি সঠিকভাবে সরিয়ে দেয় -ssতবে অনুলিপিটি অনুলিপি সহ শেষ করে চলেছে।

কোনও ভিডিওর পুনরায় সংশোধন না করে এফএফপিপিগ ব্যবহার করার কোনও উপায় আছে?


1
এই বাক্য গঠন সঠিক।
jiggunjer

উত্তর:


393

আপনি -ssএকটি স্টার্ট টাইমস্ট্যাম্প -tনির্দিষ্ট করতে বিকল্প এবং এনকোডিং সময়কাল নির্দিষ্ট করতে বিকল্পটি ব্যবহার করতে পারেন । টাইমস্ট্যাম্পগুলি HH:MM:SS.xxxবিন্যাসে বা সেকেন্ডে ( s.msec) হতে হবে।

নিম্নলিখিতটি প্রথম 30 সেকেন্ডে ক্লিপ করবে এবং তারপরে 10 সেকেন্ডের সমস্ত কিছু ক্লিপ করবে:

ffmpeg -ss 00:00:30.0 -i input.wmv -c copy -t 00:00:10.0 output.wmv
ffmpeg -ss 30 -i input.wmv -c copy -t 10 output.wmv

নোটটি -tএকটি আউটপুট বিকল্প এবং সর্বদা এর পরে নির্দিষ্ট করা দরকার-i

কিছু টিপস:

  • পুরানো ffmpeg সংস্করণগুলির জন্য, আপনি যদি -ssপরে ব্যবহার করেন তবে আপনি -iধীরে ধীরে কার্যকরভাবে ব্যয় করে আরও সঠিক অনুসন্ধান পেতে পারেন seeking আরও দেখুন: এফএফপিপেগের সাথে সন্ধান করা
  • আপনি যে টাইমস্ট্যাম্পটি কাটতে চান তা উল্লেখ করার -toপরিবর্তে আপনি ব্যবহার করতে পারেন -t। সুতরাং, আপনি পরিবর্তে একই জিনিস অর্জন -i <input> -ss 30 -t 10করতে পারে -i <input> -ss 30 -to 40

  • যদি আপনার ffmpeg সমর্থন না করে -c, বা -to, এটি সম্ভবত খুব পুরানো। নিজেই একটি নতুন সংস্করণ সংকলন করুন বা তাদের হোমপৃষ্ঠা থেকে একটি স্ট্যাটিক বিল্ড ডাউনলোড করুন । এটি আসলেই জটিল নয়।


1
@ মনডেন আসলে, আপনি -এসএস পরে আরও নির্ভুলতা পাবেন। আর slhck এই এখানে উল্লেখ blog.superuser.com/2012/02/24/... এছাড়াও ffmpeg ডকুমেন্টেশনে -ss এটা আগে বা পরে এটি নির্বাণ মধ্যে একটি পার্থক্য উল্লেখ জন্য।
বারলপ

5
+1 আমি এখানে প্রথম 35 সেকেন্ডের পরে সবকিছুকে কীভাবে উপেক্ষা করতে হবে তা বুঝতে এখানে এসেছি, ধন্যবাদ:ffmpeg -i input.wmv -c copy -t 35 output.wmv
করলফিলিপ

2
এটি আমার (এমপি 4) এর জন্য কাজ করে না। এটি কেবলমাত্র 5 সেকেন্ডের কালো পর্দা তৈরি করে:frame= 150 fps=0.0 q=-1.0 Lsize= 264kB time=00:00:09.97 bitrate= 216.6kbits/s
ক্লকস্মিত

2
এটি আমার ভিডিও ক্লিপের শুরুতে 3-4 টি কালো পর্দা তৈরি করেছিল। বাদ দিয়ে ক্রিসের পরিবর্তনটি -c copyপ্রাথমিক কালো স্ক্রিনটি সরিয়ে ফেলেছে, বিশদগুলির জন্য তার উত্তর দেখুন।
joelostblom

4
আপনি লিখেছেন "নিম্নলিখিতটি প্রথম 30 সেকেন্ডে ক্লিপ করবে এবং তারপরে 10 সেকেন্ডের সমস্ত কিছু ক্লিপ করবে:" <- এর অর্থ কী? ক্লিপ দ্বারা আপনি অন্তর্ভুক্ত মানে? 'কোস ক্লিপ মানে ক্লিপ আউট। ধরে নিচ্ছেন আপনার অর্থ অন্তর্ভুক্ত। আপনার মানে কি 30 সেকেন্ড থেকে শুরু হয় এবং সেখান থেকে মাত্র 10 সেকেন্ড অন্তর্ভুক্ত? যদি তা হয় তবে আমি আপনাকে পরামর্শ দিচ্ছি যে এটি আরও স্পষ্ট হবে write
বার্লোপ

94

অন্যান্য লোকেরা যেমন উল্লেখ করেছেন, -ssআগে (অনেক দ্রুত) বা তার পরে (আরও সঠিক) স্থাপন করা -iএকটি বড় পার্থক্য করে। Ffmpeg সন্ধান পৃষ্ঠায় "দ্রুত এবং যথাযথ সন্ধান" বিভাগটি আপনাকে উভয়ই কীভাবে পেতে হয় তা বলে দেয় এবং আমি এটি ব্যবহার করেছি এবং এটি একটি বড় পার্থক্য করে। মূলত আপনি -ssআগে এবং এর আগে -iরেখেছিলেন যেখানে আপনি অন্য কী ফ্রেম কাটা কাটা শুরু করতে চান তার আগে পর্যাপ্ত সময় দেবেন তা নিশ্চিত করুন। উদাহরণ: আপনি যদি ভিডিও. এমপি 4-তে 9 মিনিট থেকে সেকেন্ড 10 মিনিট 0 সেকেন্ডে 1 মিনিটের ক্লিপ তৈরি করতে চান তবে আপনি এটি দ্রুত এবং নির্ভুলভাবে উভয়ই ব্যবহার করে করতে পারেন:

ffmpeg -ss 00:08:00 -i Video.mp4 -ss 00:01:00 -t 00:01:00 -c copy VideoClip.mp4

প্রথমটি -ss(প্রায়) 8 মিনিট সেকেন্ডে দ্রুত -ssচেষ্টা করে এবং তারপরে দ্বিতীয়টি সঠিকভাবে 9 মিনে 0 সেকেন্ডে অনুসন্ধান করে এবং 1 মিমি 1 সেকেন্ডের -t 00:01:00একটি ক্লিপ বের করে।

এছাড়াও এই পৃষ্ঠাটি থেকে এই গুরুত্বপূর্ণ বিষয়টি নোট করুন: "আপনি যদি এটি ব্যবহার -ssকরেন -c:v copyতবে ফলস্বরূপ বিটস্ট্রিমটি চম্পি, খেলতে পারবেন না বা অডিও স্ট্রিমের সাথে সিঙ্কের বাইরে চলে যাবে, যেহেতু ffmpeg কেবল আই-ফ্রেমে ব্যবহার / বিভক্ত করতে বাধ্য হয়। "

এর অর্থ আপনার যদি ভিডিওটি কেবল অনুলিপি করতে চান বা চপ্পি এবং সিঙ্কের বাইরে না যাওয়ার ঝুঁকি থাকে তবে আপনার ভিডিওটি পুনরায় এনকোড করা দরকার। আপনি ঠিক -c copyপ্রথম চেষ্টা করতে পারেন, তবে ভিডিওটি সফল হলে আপনার এটি আবার করা দরকার।


এই সতর্কতাটি অনুসন্ধানের -c:a copyএই পদ্ধতিতে প্রযোজ্য ।
jiggunjer

1
সর্বোত্তম উত্তর, এইভাবে আমার পক্ষে সবচেয়ে ভাল কাজ করেছে।
ওন্দ্র Žižka

3
দেখে মনে হচ্ছে "-ss" এখন দু'বার উল্লেখ না করেই ffmpeg 2.1+ এ দ্রুত এবং নির্ভুল। trac.ffmpeg.org/wiki/Seeking
কনরাড মায়ার

25

আমি দেখতে পেলাম যে এর সাথে -ssমিলিয়ে -c copyশুরুতে একটি অর্ধ-দ্বিতীয় কাটা হয়েছে।

এড়াতে, আপনাকে -c copy(যা স্বীকার করে একটি ট্রান্সকোড করবে) মুছে ফেলতে হবে।


4
আরও একটি উত্তর রয়েছে যা নির্ভুলতার সাথে কাজ করে। ডিফল্ট বিকল্পের সাথে পুনরায় এনকোডিং আপনি যা করতে চান তা প্রায়শই নয়!
টমাসজ গ্যান্ডার

টমাসজ্যাংডোর ভাল পয়েন্ট
ক্রিস

1
আমি @ টমাসজ্যান্ডোরের উত্তরটি মোটেও বুঝতে পারি নি, তবে অপসারণ -c copyএটি স্থির করেছে।
আইলিয়ান ওনোফ্রেই

14

ম্যানুয়ালি

এমন একটি মিডিয়া প্লেয়ারে ফাইলটি খুলুন যা ফ্রেম অগ্রিম ফ্রেম করে দেবে এবং ডেভিস সহ একটি এভিআইসেন্ট ফাইল খেলবে যেমন:

DirectShowSource(("C:\Downloads\Video\Do you want him.flv"), Pixel_Type="yuy2").Crop(0,0,-0,-0)
Subtitle("C:\Downloads\Video\Do you want him.flv", font="Arial", size=24, text_color=$ff0000, align=3)
ShowFrameNumber(scroll=true, x=336, y=27, font="Arial", size=24, text_color=$ff0000)
ShowTime(x=398, y=44, font="Arial", size=24, text_color=$ff0000)

তারপরে ঠিক সময় বিন্যাসটি দিয়ে কাটা:

ffmpeg -i "Path\do you want him.flv"        \
       -ss 00:00:05.240 -to 00:00:08.360    \
       -vcodec libx264 -acodec libvo_aacenc \
       "Path\Do you want him1.flv"

এবং

ffmpeg -i "Path\do you want him.flv"        \
       -ss 00:00:10.240 -to 00:00:14.360    \
       -vcodec libx264 -acodec libvo_aacenc \
       "Path\Do you want him2.flv"

এখন ভিডিও ফাইলগুলির সাথে এই জাতীয় সামগ্রী সহ একটি টেক্সট ফাইল তৈরি করুন:

file 'C:\Downloads\Video\Do you want him1.flv'
file 'C:\Downloads\Video\Do you want him2.flv'

Ffmpeg চালান:

ffmpeg -f concat -i FileList.txt -c copy "Path\NewName_joined.flv"

9

আমার জন্য -tবিকল্প কাজ করে না, -vframesকাজ করেছে। আমি ব্যবহার পছন্দ করি #frames, যেহেতু আমি বরং আই-ফ্রেমগুলি কাটব এবং ভিডিও ব্যবহারের জন্য জিওপি খুঁজে পেয়েছি ffprobe

যে কমান্ড লাইনটি আমার পক্ষে কাজ করেছিল তা হ'ল:

ffmpeg -ss 60s -i input.wmv -vframes 1800 -acodec copy -vcodec copy output.wmv

যাইহোক, -ssসামনে -iরাখা কার্যকরভাবে সময় মধ্যে একটি বড় পার্থক্য তোলে।


1
আসলে -vframes(বা -frames:v) -iএর পরে আসা উচিত কারণ এটি একটি আউটপুট বিকল্প।
slhck

5

ব্যবহারকারী ২২৩৩66 with এর মতো, -t বিকল্পটি সংক্ষিপ্ত ভিডিওগুলির জন্য কাজ করে না, তবে এটি দীর্ঘ ভিডিওগুলির জন্য কাজ করে। সংক্ষিপ্ত ভিডিওগুলির জন্য মনে হয় যে ফ্রেমগুলি: ভি ভাল। এটিই আমার পক্ষে কাজ করেছিল।

ffmpeg -ss 4 -i input.mp4 -frames:v 200 -vcodec copy output.mp4

অন্যান্য উত্তরগুলির মতো ভিডিওতে অডিও থাকলে -কোডেক অনুলিপিটি যুক্ত করা দরকার।


0

আমি এটি উল্লেখ করে খুব বেশি দেখতে পাচ্ছি না (আমি কোনও বিশেষজ্ঞ তাই সম্ভবত একটি ক্যাচও আছে), তবে আপনার ফাইলটিতে যদি সাবটাইটেলগুলির মতো অন্যান্য স্ট্রিম এবং অধ্যায়গুলির মতো অন্য মেটাডেটা থাকে তবে সমস্ত স্ট্রিমগুলি কেটে / ছাঁটাই করা এবং এটি রাখা সম্ভব the নিম্নলিখিত আদেশ

ffmpeg -to 60 -i input.mkv -map 0 -c copy output.mkv

সঙ্গে -map 0আপনি ফাইলের সব স্ট্রিম নিতে, এবং -c copyআপনি তাদের কপি তারা হিসাবে।
এর -toমাধ্যমে শুরু বাদ দেওয়ার মাধ্যমে -ssইনপুট ভিডিওটি শুরু থেকে দ্বিতীয় 60-এ কাটা হবে।

mapআপনি যদি কেবলমাত্র নির্দিষ্ট স্ট্রিমগুলিই কাটাতে চান (তবে আপনার ফাইলের সমস্ত অডিও উত্স, বা কেবলমাত্র কয়েকটি উপশিরোনাম প্রয়োজন হবে না) সাথে ফিডলিংও দরকারী।

যখন আমি বড় MKV ফাইলগুলি বিভক্ত করতে প্রয়োজন যেগুলি FAT32 সঞ্চয়স্থানে সংরক্ষণ করা যায় না তখন আমি এটি ব্যবহার করি।

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