কমান্ড লাইন থেকে সঠিকভাবে ভিডিও ফাইলগুলি কেটে দিন


22

আমার কাছে এমন একটি ক্লাইপ অ্যাপ্লিকেশন খুঁজে পেতে সমস্যা হচ্ছে যা একটি ভিডিও ফাইল নিতে পারে (এভিআই, এমকেভি, এবং এমপি 4 সর্বাধিক) এবং যথার্থ সময়ের যথার্থতার সাথে খুব সংক্ষিপ্ত ক্লিপগুলি (2-6 সেকেন্ড) কেটে ফেলতে পারে। আমি চেষ্টা করেছি ffmpeg , mencoder , avidemux এবং mp4box কিন্তু তারা সব কীফ্রেমগুলি যা 6+ দ্বিতীয় ক্লিপ সৃষ্টি উপর কাটা। এমন কোনও সরঞ্জাম রয়েছে যা ইনপুট ফাইলটিকে পুনরায় এনকোড করবে এবং সঠিক সময়টি কেটে ফেলবে বা সঠিকভাবে কেটে ফেলবে, পুনরায় এনকোড করবে এবং তারপরে নির্ভুলভাবে কাটা যাবে?


সঠিকভাবে কাটার জন্য আপনাকে সম্ভবত কাটার আগে পুনরায় কোডিং করতে হবে। আপনি সম্ভবত আশেপাশের কীফ্রেমগুলি কেটে প্রথমে স্নিপেটগুলি পুনরায় কোডিং করে জিনিসগুলিকে গতি বাড়িয়ে দিতে পারেন।
নিফলে

4
আপনি কোন FFmpeg কমান্ডটি চেষ্টা করেছেন, ঠিক? আমি বিশ্বাস করি আপনি যদি ভিডিওটি আগে ডিকোড করেন (অর্থাত্ -ssপ্যারামিটারটি পরে রাখুন -i ) তবে এটি আরও সঠিক হওয়া উচিত।
slhck

1
FFmpeg কৌশল কাজ করেছে! অর্ডারটি এতটা গুরুত্বপূর্ণভাবে বুঝতে পারিনি। অন্যান্য সরঞ্জামগুলির জন্য এটি কি একই?
কার্মিল

উত্তর:


23

সাথে ভিডিও কাটছে ffmpeg

আপনি FFmpeg দিয়ে ভিডিওগুলি সঠিকভাবে কাটতে পারেন । সংস্করণ 2.5 যেহেতু এটি খুব সহজ। এটি উদাহরণস্বরূপ 0 মিনিট, 3 সেকেন্ড এবং 123 মিলিসেকেন্ড থেকে শুরু করে 10 সেকেন্ড কাটবে।

ffmpeg -ss 00:00:03.123 -i input.mp4 -t 10 -c:v libx264 -c:a copy out.mp4

অবস্থান এবং সময়টি সেকেন্ডে বা hh:mm:ss[.xxx]আকারে হতে পারে ।

মনে রাখবেন যে এই উদাহরণগুলিতে, ভিডিওটি x264 এনকোডার ব্যবহার করে পুনরায় এনকোড করা হবে ; অডিও অনুলিপি করা হয়

সময়কালের পরিবর্তে আপনি শেষ পয়েন্টটি নির্দিষ্ট করার -toপরিবর্তে ব্যবহার করতে পারেন -t। এই ক্ষেত্রে, তবে, -toসমতুল্য -t, যেহেতু -ssসামনে রেখে -i, ffmpeg প্রথমে সেই বিন্দুতে সন্ধান করবে এবং তারপরে আউটপুট আউট করা শুরু করবে।

আরও দেখুন সচেষ্ট উইকি এন্ট্রি।


পুরানো ffmpegসংস্করণগুলির জন্য সঠিক কাটিয়া

আপনি ffmpeg এর একটি পুরোনো সংস্করণ আছে, তাহলে সঠিক চাইছেন, আপনি স্থাপন করতে প্রয়োজন -ssপর -i, যা একটু ধীর এনকোডিং প্রক্রিয়া করে তোলে, কারণ সম্পূর্ণ ভিডিওটি প্রথম সঙ্কেতমুক্ত ফিরে আসে:

ffmpeg -i input.mp4 -ss 00:00:03.123 -t 10 -c:v libx264 -c:a copy out.mp4

এখানে, -toএবং -tঅন্যরকম আচরণ করুন। -t 10একটি দশ সেকেন্ড দীর্ঘ ক্লিপ -to 10তৈরি করবে , যেখানে সাত সেকেন্ড দীর্ঘ একটি ক্লিপ তৈরি করবে।


পরিবর্তে -c:v libx264 -c:a libfaacআমি মনে করি আমরা ব্যবহার করতে পারি -acodec copy -vcodec copyযা ffmpeg কে কেবলমাত্র মূল ফাইলের মতো একই কোডেকগুলি সনাক্ত করতে এবং ব্যবহার করতে বলে। কেউ কি নিশ্চিত করতে পারবেন?
বাওদাদ

2
@ বোয়াদাদ আপনি পারেন তবে এটি সঠিকভাবে কাটবে না । ভিডিও / অডিও বিটস্ট্রিমগুলি অনুলিপি করার সময়, ffmpeg একটি কীফ্রেমে শুরু করা দরকার, যা কেবলমাত্র প্রতিটি সেকেন্ডে বা আরও কিছুটা আলাদা রেখে দেওয়া যেতে পারে।
slhck

কীভাবে "অজানা এনকোডার 'লিবফ্যাক" ত্রুটিটি কাটিয়ে উঠবে?
ডগ

@ ডগ উদাহরণস্বরূপ একটি আলাদা এনকোডার বেছে নিন -c:a aac -strict experimental। এটাই সহজ সমাধান।
ছিটিয়ে দিন

1

আমি এখন পর্যন্ত একমাত্র লিনাক্স কমান্ড-লাইন সরঞ্জাম খুঁজে পেয়েছি, যা সঠিক ফ্রেমে কাটা যেতে পারে (বা ফ্রেমের যথার্থতার সাথে), melt( sudo apt-get install melt)।

বলুন আপনার একটি inputvid.mp4- এর প্রথমে এর এনকোডিং সেটিংসটি পরীক্ষা করে দেখুন ffmpeg(এখানে, আমি কেবল বলেছি যে আমি এটিতে আবার এনকোড করতে চাই -f mp4, তবে ফাইল হিসাবে /dev/nullআউটপুট বাতিল হয়ে যায়; আমি স্ট্যাডারকে পুনঃনির্দেশিত করি যাতে আমি এটির মাধ্যমে গ্রেপ করতে পারি - মাঝখানে নোট করুন , কমান্ডটি অনুরোধ জানায়, এবং আপনার yENTER দিয়ে উত্তর দেওয়া উচিত , সুতরাং প্রক্রিয়াটি দরকারী তথ্যটি এগিয়ে যায় এবং ডাম্প করে দেয়; এটি উবুন্টু 14 এ ffmpeg 3.3.3 সহ রয়েছে):

ffmpeg -i inputvid.mp4 -f mp4 /dev/null 2>&1 | grep 'Stream\|encoder'
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(tv, bt709), 640x360 [SAR 1:1 DAR 16:9], 389 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 95 kb/s (default)
y
File '/dev/null' already exists. Overwrite ? [y/N] Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
    encoder         : Lavf57.71.100
    Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p(progressive), 640x360 [SAR 1:1 DAR 16:9], q=-1--1, 23.98 fps, 24k tbn, 23.98 tbc (default)
      encoder         : Lavc57.89.100 libx264
    Stream #0:1(und): Audio: aac (LC) ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, 128 kb/s (default)
      encoder         : Lavc57.89.100 aac

ঠিক আছে, তাই আমরা দেখতে পারি ffmpegতা চয়ন libx264এবং aacএই ভিডিওর জন্য এনকোডার; তারপরে আমরা এর জন্য এটি প্রবেশ করতে পারি melt:

melt inputvid.mp4 in=7235 out=7349 -consumer avformat:cut.mp4 acodec=aac vcodec=libx264

.... এবং meltফ্রেম 7235 এবং 7349 এর মধ্যে টুকরোটি কেটে একটি নতুন ফাইলে রূপান্তর করবে cut.mp4। তারপরে cut.mp4লুপগুলি সঠিকভাবে কিনা তা পরীক্ষা করতে, meltএটি আবার দুবার খেলতে আবার ব্যবহার করুন - এবং এটি একটি এসডিএল উইন্ডোতে খেলুন:

melt cut.mp4 cut.mp4 -consumer sdl

... এবং ffmpegএই ফাইলটি যা দেখে তা এখানে :

ffmpeg -i cut.mp4 -f mp4 /dev/null 2>&1 | grep 'Stream\|encoder'    encoder         : Lavf54.20.4
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 526 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 182 kb/s (default)
y
File '/dev/null' already exists. Overwrite ? [y/N] Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
    encoder         : Lavf57.71.100
    Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 640x360 [SAR 1:1 DAR 16:9], q=-1--1, 23.98 fps, 24k tbn, 23.98 tbc (default)
      encoder         : Lavc57.89.100 libx264
    Stream #0:1(und): Audio: aac (LC) ([64][0][0][0] / 0x0040), 48000 Hz, stereo, fltp, 128 kb/s (default)
      encoder         : Lavc57.89.100 aac

ভিডিও বিটরেট 389 কেবি / সেকেন্ড থেকে 526 কেবি / সেকেন্ডে পরিবর্তিত ভিডিওর জন্য এনকোডিংয়ের সেটিংস cut.mp4অভিন্ন বলে মনে হচ্ছে inputvid.mp4, এবং অডিও এনকোডিং সেটিংসও প্রায় একই, নমুনা হার 44100 থেকে 48000 হার্জেজেটে পরিবর্তন করা ছাড়া; যদিও এটি দিয়ে নিয়ন্ত্রণ করা যায়:

melt inputvid.mp4 in=7235 out=7349 -consumer avformat:cut.mp4 acodec=aac ar=44100 ab=95k vcodec=libx264 vb=389k

... তবে এটির সাথেও আমার পক্ষে চূড়ান্ত ভিডিও বিটরেটটি 337 কেবি / সেকেন্ডে শেষ হয়। তবুও, যখন কোনও লুপে খেলা হয় তখন কাটগুলি লুপ জরিমানা হয় (এবং এতে অডিও অন্তর্ভুক্ত থাকে), সুতরাং আমার ধারণা এটি সত্যই ফ্রেম-নির্ভুল ...


1
meltভিডিওটি পুনরায় এনকোডিং করছে এবং এটি নীচে FFmpeg লাইব্রেরি ব্যবহার করে। আপনি যদি পুনরায় এনকোডিংয়ের অনুমতি দেন তবে ffmpeg একই আউটপুট উত্পাদন করতে পারে।
জ্ঞান

ধন্যবাদ @ জ্ঞান - এটি সম্পর্কে সচেতন ছিল না (বিশেষত এটি এফএফপিপেইগ meltলাইব্রেরি ব্যবহার করে), জেনে রাখা ভাল!
sdaau

দ্রবীভূত করা ffmpeg এর চেয়ে সহজ বলে মনে হয়, আমাদের কেবল প্রয়োজন নির্দিষ্ট সময়, বিশেষত ঘন্টা, মিনিট, সেকেন্ড ফর্ম, বা এইচআর, মিনিট, সেকেন্ড, এমএস, যা তাদের ডান ফ্রেমে রূপান্তর করে।
বার্লোপ

0

বাওদাদের মত মন্তব্যে বলেছেন (আমি পোস্ট করেছি কারণ আপনি দ্রুত পড়েন তবে এটি সন্ধান করা সহজ নয়), এফএফএমপিগের মাধ্যমে অডিও / ভিডিও এনকোডারগুলি স্বয়ংক্রিয়ভাবে সনাক্ত করা ভাল approach

ffmpeg -ss 00:05:17.18 -i in.mp4 -t 00:06:29.10 -acodec copy -vcodec copy out.mp4 
  • @ 00: 05: 17.18 শুরু করুন
  • ইনপুট = in.mp4
  • @ 00: 06: 29.10 এ থামুন
  • আউটপুট = আউট.এমপি 4

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