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


510

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

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:08। তবে এটি সেই সময়ের মধ্যে ভিডিওটি কাটছে না তার পরিবর্তে এটি প্রথম 11 সেকেন্ডের সাথে ভিডিওটি কাটছে। কেউ আমাকে কীভাবে সমাধান করতে পারে?

সম্পাদনা 1:

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

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

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

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

সুতরাং আমি -strict -2কমান্ডের মধ্যে অর্থ যোগ করেছি,

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

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


3
আপনার পূর্ণ, অব্যাহত ffmpeg কনসোল আউটপুট অনুপস্থিত। জিজ্ঞাসা করার সময় দয়া করে সর্বদা এটি অন্তর্ভুক্ত করুন। ধন্যবাদ।
স্ল্যাক করুন ck

3
আপনি কোথা থেকে স্ট্রাইক 2 পেয়েছেন? ডক্সে
স্ট্যাকওভারফ্লোড

এটি ffmpeg ইনস্টল করার পরে মানের জন্য, ffmpeg সাহায্যে আপনি এই বিকল্পটি পেতে পারেন
কালাই


1
আমি মনে করি যে এখানে সমস্যাটি আসলেই ছিল যে আপনি -i মুভি.এমপি 4 এর আগে এবং আগে রেখেছিলেন। এই স্রোতের পক্ষে যুক্তিগুলি ঠিক এর পরে চলে যায়? সে কারণেই অন্যভাবে কাজ হয়েছিল। = /
ব্রেন্ট রিতেনহাউস

উত্তর:


572

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

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

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

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

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

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

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


4
ভিডিওটির শেষ অবধি কি শর্টকাট নির্দিষ্ট করতে হবে?
জিক্কু জোসে

20
@ জিক্কুজোস: শেষ অবধি চালিয়ে যাওয়ার জন্য -t/ -toএবং এর তর্ককে মঞ্জুর করুন ।
চিহ্নিত করুন 4

41
দ্রষ্টব্য: -ssইনপুট ফাইলের আগে (আগে -i) সরবরাহ করা দ্রুততর হয় , কারণ এইভাবে ffmpeg সরাসরি লোকেশনে চলে যাবে। যাইহোক, এটি সেই স্থানে সময় "শূন্য" নির্ধারণ করবে, যার অর্থ -toভুল সময়কে নির্দেশ করবে। সূত্র: trac.ffmpeg.org/wiki/Seeking
ডেনিলসন সা মিয়া

4
এটি ব্যবহারের পরে আমি অডিও এবং ভিডিও সিঙ্ক ইস্যুটি পাই ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4, যদিও মূল ফাইলটিতে এ জাতীয় সমস্যা নেই।
ব্যবহারকারী200252222

6
@ ইউজার ২০০২২২২২২: এ ছাড়া চেষ্টা করুন -async 1
o

429

এটি ব্যবহার করার চেষ্টা করুন। আমি এটি খুঁজে বের করার জন্য এটি সবচেয়ে দ্রুত এবং সেরা এফফেম্পিগ-উপায়:

 ffmpeg -ss 00:01:00 -i input.mp4 -to 00:02:00 -c copy output.mp4

এই আদেশটি আপনার ভিডিওটিকে সেকেন্ডের মধ্যে ছাঁটাই করে!

আমি এখানে আমার ব্লগে এটি ব্যাখ্যা করেছি :

-i: এটি ইনপুট ফাইল নির্দিষ্ট করে। সেক্ষেত্রে এটি (ইনপুট.এমপি 4)।
-ss: -i এর সাথে ব্যবহৃত, এটি ইনপুট ফাইলে (ইনপুট.এমপি 4) পজিশনে সন্ধান করে।
00:01:00: আপনার ছাঁটা ভিডিওটি এবার শুরু হবে। -তে
: এটি শুরু হতে সময়কাল নির্দিষ্ট করে (00:01:40) শেষ হতে হবে (00:02:12)।
00:02:00: এই সময়ে আপনার ছাঁটা ভিডিও শেষ হবে।
-সি অনুলিপি: এটি স্ট্রিম অনুলিপি মাধ্যমে ট্রিম করার একটি বিকল্প। (এনবি: খুব দ্রুত)

সময় বিন্যাস: hh: মিমি: এসএস

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


9
এটি 3s মধ্যে আমার 45 মিনিট 720p ফাইলটি প্রক্রিয়া করেছে। এটি সঠিক উত্তর হওয়া উচিত।
ধীররাজ ভাস্কর

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

7
যেমনটি @ পেলসন বলেছেন, এটি কী ফ্রেমগুলি কেটে ফেলবে এবং প্রথম কয়েক সেকেন্ড ফাঁকা ছেড়ে দেবে (যদি কাটার সময় কী ফ্রেমের মধ্যে থাকে)। মজার ব্যাপার হচ্ছে, পরামিতি অনুক্রম পরিবর্তন সমস্যা solves: ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -ss 00:01:00 -to 00:02:00 -c copy output.mp4। তবে এখন স্কিপিং নষ্ট হয়ে গেছে এবং শেষ সময়টি সঠিক নয় (আমার ক্ষেত্রে)।
রাফেল

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

4
কেন নিশ্চিত তবে এটি গ্রহণযোগ্য উত্তরের চেয়ে বেশি সঠিক বলে মনে হচ্ছে না কারণ এটি কী-ফ্রেমগুলি হারিয়ে যাওয়ার সমস্যা নিয়ে আসে। সংক্ষিপ্ত ভিডিও ক্লিপগুলির জন্য প্রভাবটি গ্রহণযোগ্য নয়। ধীর রেনকোড এই জাতীয় ক্ষেত্রে একমাত্র সমাধান বলে মনে হয়।
icarus74

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

ব্যবহার করুন -c কপি অবিলম্বে মধ্যে দাও। ' সেক্ষেত্রে ffmpeg ভিডিওটি পুনরায় এনকোড করবে না, কেবল আকার অনুযায়ী কাটবে।


2
অফ-সি অনুলিপি দুর্দান্ত কাজ করে তবে আমি যদি 1
ডিসিঙ্ক

2
এটি বিভিন্ন ইনপুট এবং আউটপুট ধারক যেমন .mkv ইনপুট এবং। এমপি 4 আউটপুট ক্ষেত্রে অবৈধ শিরোনামের কারণে লেখায় ব্যর্থ হয়ে যায়।
অসিল কিসিকি

1
ঠিক আছে, অন্য কমান্ড ব্যবহার করতে .mp4 করার .mkv রূপান্তর করতে আপনি করেছেন: ffmpeg -i movie.mkv -vcodec copy -acodec copy converted_movie.mp4এবং ভীসা বিপরীতভাবে
Vlad Hudnitsky

পুনরায় এনকোডিংয়ের সুবিধা কী কী? আমরা যদি একই আকারে কেবল ছোট ভিডিও চাই তবে এটি কি কোনও কাজে আসবে?
হর্ষ

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

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


4
আমি এটির সাথে প্রথম 8 সেকেন্ড পাই, প্রথম ফ্রেমে প্রথম 3 সেকেন্ড হিমশীতল। setpts=PTS-STARTPTSট্রিম ফিল্টার পরে ফিল্টার চেইন দ্বারা স্থির ।
jiggunjer

এটি বলে যে "এনকোডার 'এ্যাক' পরীক্ষামূলক তবে পরীক্ষামূলক কোডেকগুলি সক্ষম নয়, আপনি যদি এটি ব্যবহার করতে চান তবে '-স্ট্রিক্ট -2' যুক্ত করুন" " -স্ট্রিক্ট -2 যুক্ত করা কোনও উপকারে আসে না। ফলাফলটি একটি শূন্য দৈর্ঘ্যের ফাইল।
ইভান

4
@ ইভান, আপনি কি -strict -2আগে cut.mp4(কমান্ড লাইনের শেষের বিপরীতে) যুক্ত করার চেষ্টা করেছিলেন?
জান গন্ডল

আরে, আপনি কি আমাকে বলতে পারবেন যে আমি কেবল 3 থেকে 8 সেকেন্ড ছাড়া ভিডিও চাই?
পার্থ সোলঙ্কি

1
এটি অতি ধীর
টেসারাক্টার

21

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

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

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

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

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


4
ধীর, তবে একমাত্র কাজটি আমার জন্য কাজ করেছে (অন্যান্য উত্তর থেকে ফ্রেমগুলি না হারিয়ে)
টেককুজ

8

আমি যা ব্যবহার করি তা এখানে:

ffmpeg -i input.mkv -ss 00:01:00 -to 00:02:00 -c:v copy -c:a copy output.mp4

উত্পন্ন mp4ফাইলগুলিও এতে ব্যবহার করা যেতে পারে iMovie

তথ্যসূত্র: https://www.arj.no/2018/05/18/trimvideo


আপনি যদি একাধিক কাটা দৃশ্যের সাথে মনযোগ দিতে চান তবে আপনি নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করতে পারেন:

#!/usr/bin/env python3

import subprocess

name = "batman.mp4"

times = []
times.append(["01:06:00", "01:07:00"])
times.append(["01:08:00", "01:09:00"])

open('concatenate.txt', 'w').close()
for idx, time in enumerate(times):
    output_filename = f"output{idx}.mp4"
    cmd = ["ffmpeg", "-i", name, "-ss", time[0], "-to", time[1], "-c:v", "copy", "-c:a", "copy", output_filename]
    subprocess.check_output(cmd)
    with open("concatenate.txt", "a") as myfile:
        myfile.write(f"file {output_filename}\n")

cmd = ["ffmpeg", "-f", "concat", "-i", "concatenate.txt", "-c", "copy", "final.mp4"]
output = subprocess.check_output(cmd).decode("utf-8").strip()

এটি ইতিমধ্যে উত্তর দেওয়া হয়েছে
টেসারাক্টার

1
আমার পদ্ধতির গৃহীত উত্তরগুলির চেয়ে আলাদা। এমপি 4 ফাইলটি তৈরিতে যার বেশি সময় আছে তাদের আমি চেষ্টা করেছি। @Tessaracter
Alper

1
এটি এখানে কেবলমাত্র উত্তর যা বড় ভিডিও থেকে একটি ছোট ক্লিপ কাটতে আমার পক্ষে কাজ করেছিল। এটি কার্যকর এবং দ্রুত !!! আপনাকে ধন্যবাদ
lacostenycoder

1
আপনি স্বাগত জানাই, আমি সাহায্য করতে পেরে আনন্দিত। অনেক পদ্ধতির চেষ্টা করার পরে আমি এই উত্তরটি খুঁজে পেতে সক্ষম হয়েছি। তাদের বেশিরভাগই বেশ ধীর ছিল। @lacostenycoder
Alper

এটি কি কেবল -c: v এবং -c: a কে বিভক্ত করার পরিবর্তে "অনুলিপি" দিয়ে "-c" ব্যবহার করতে পারে না?
এনস্টেনজ


-3

যদিও আমি 6 বছর দেরি করে ফেলেছি, তবে আমার মনে হয় উপরের সমস্ত উত্তর সঠিকভাবে @ কালাই যে প্রশ্নটি জিজ্ঞাসা করছে সে প্রশ্নের সমাধান করে নি । নীচে বাশ স্ক্রিপ্ট নিম্নলিখিত বিন্যাসে একটি পাঠ্য ফাইল প্রক্রিয়া করবে:

URL | start_time | end_time | filename

উদাহরণ স্বরূপ

https://www.youtube.com/watch?v=iUDURCrvrMI|00:02:02|00:03:41|1

এবং ফাইলটির মধ্য দিয়ে লুপ করুন, ফাইলটি ডাউনলোড করে যা youtube-dlসমর্থন করে, এর মধ্যে সময়কাল গণনা করে start_timeএবং end_timeএটি পাস করে ffmpeg, যেহেতু -tআসলে সময়কাল হয় , আসল নয়end_time

আপনার যদি কোন প্রশ্ন থাকে তবে আমাকে হিট করুন।

    for i in $(<video.txt);
    do
        URL=`echo $i | cut -d "|" -f 1`;
        START=`echo $i | cut -d "|" -f 2`;
        END=`echo $i | cut -d "|" -f 3`;
        FILE=`echo $i | cut -d "|" -f 4`;

        SEC1=`echo $START | sed 's/^/((/; s/:/)*60+/g' | bc`
        SEC2=`echo $END | sed 's/^/((/; s/:/)*60+/g' | bc`

        DIFFSEC=`expr ${SEC2} - ${SEC1}`

        ffmpeg $(youtube-dl -g $URL | sed "s/.*/-ss $START -i &/") -t $DIFFSEC -c copy $FILE".mkv";
        ffmpeg -i $FILE".mkv" -f mp3 -ab 192000 -vn $FILE".mp3";
        rm $FILE".mkv";
    done;

এটি কেবল একটি এমপি 3 অডিও ফাইল এবং একটি ভিডিও নয় out
ল্যাকোস্টেনাইকোডার

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