سؤال قطع جزء من ملف الفيديو من موقع البداية إلى نهاية الموقف مع FFmpeg [مكررة]


هذا السؤال لديه بالفعل إجابة هنا:

لدي ملف فيديو لمدة 30 دقيقة ، ولكن أريد استخراج فيديو من 00:09:23 إلى 00:25:33.

يمكنني تحديد startposition مع -ss، لكن لم أتمكن من العثور على واحد لوضع النهاية. أي مساعدة من فضلك؟


121
2018-01-11 17:59


الأصل




الأجوبة:


تثبيت ffmpeg

تأكد أنك تحميل نسخة حديثة من ffmpegولا تستخدم تلك التي تأتي مع توزيعك (على سبيل المثال Ubuntu). غالباً ما تكون النسخ المُجمّعة من توزيعات مختلفة قديمة ولا تتصرف كما هو متوقع.

أو تجميعها بنفسك.

كيفية قطع الفيديو ، دون إعادة ترميز

استخدم هذا لقص الفيديو من [start] إلى عن على [duration]:

ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy out.mp4

هنا ، تعني الخيارات ما يلي:

  • -ss يحدد وقت البدء ، على سبيل المثال 00:01:23.000 أو 83 (في ثوان)
  • -t يحدد مدة المقطع (نفس التنسيق).
  • الأخيرة ffmpeg لديها أيضا علم لتزويد نهاية الوقت مع -to.
  • -c copy نسخ مقطع الفيديو الأول والصوت ومصدر البث الفرعي من الإدخال إلى ملف الإخراج دون إعادة ترميزها. هذا لن يضر بالجودة ويجعل الأمر يعمل في غضون ثوان.

لاحظ أنه مع إصدارات ffmpeg القديمة ، قد لا يكون هذا الأمر دقيقًا الإطار عند نسخ بتات.

كيفية قطع الفيديو ، دون إعادة ترميز - طريقة دقيقة

إذا كان لديك إصدار ffmpeg قديم وتريد دقة الإطار ، فاستخدمه بدلاً من ذلك:

ffmpeg -i in.mp4 -ss [start] -t [duration] -c copy out.mp4

ومع ذلك ، هناك عيب واحد. يجب فك تشفير الفيديو حتى يصل إلى الموضع الذي يتضمنه -ss، وعندئذ فقط يبدأ في نسخ تدفق الأرقام. قد يستغرق هذا وقتًا طويلاً ، خاصة لمقاطع الفيديو الطويلة حقًا.

كيفية قطع الفيديو ، مع إعادة الترميز

إذا تركت خارج -c copy اختيار، ffmpeg سيقوم تلقائيًا بإعادة ترميز إخراج الفيديو والصوت وفقًا للتنسيق الذي اخترته. للفيديو عالي الجودة والصوت ، اقرأ دليل ترميز x264 - - و ال دليل ترميز AACعلى التوالى

فمثلا:

ffmpeg -ss [start] -i in.mp4 -t [duration] -c:v libx264 -c:a aac -strict experimental -b:a 128k out.mp4

كما أوضح من قبل البحث مع FFmpeg): عند استخدام -ss قبل -i على FFmpeg 2.1 والإصدارات الأحدث ، البحث عن إطار دقيق عند إعادة ترميز الفيديو (بمعنى عدم استخدام -c copy). لذا لا داعي للقلق بشأن وضعه -ss بعد -i للسرعة.


تحويل نقاط النهاية إلى المدة

إذا كنت بحاجة إلى استخدام إصدار قديم من ffmpeg ولا يمكن استخدام -to الخيار ، يمكنك إنشاء قائمة تعديل للنقاط الداخلية والخارجية ، وتحويلها إلى نقاط بنقطة. لهذا يمكنك استخدام هذا البرنامج النصي روبي كتبت ، والتي تحسب الفرق:

require "Time"
def time_diff(time1_str, time2_str)
  t = Time.at( Time.parse(time2_str) - Time.parse(time1_str) )
  (t - t.gmt_offset).strftime("%H:%M:%S.%L")
end

فمثلا:

time_diff("00:09:23.000", "00:25:33.000")
=> "00:16:10.000" 

216
2018-01-11 21:02



على ubuntu 12:10 ، -c: v و- c: لم تنجح. اضطررت إلى استخدام "نسخة -acodec ونسخة vodecec" بدلا من ذلك. - Samuel Lampa
Samuel ثم كنت تستخدم نسخة قديمة ، والتي ليست حتى FFmpeg الحقيقي ، ولكن شوكة Libav. نرى: stackoverflow.com/a/9477756/1109017 - slhck
شكرا على هذا! إذا لم تحدد مدة ، فهل ستنتهي إلى النهاية؟ - Jeff
@ جيف نعم! (الحد الأدنى للحرف) - slhck
Prateek عند نسخ تدفق البتات الفيديو (بدلا من إعادة الترميز) ، يمكنك خفض فقط في إطارات مفتاحية. إذا كانت هناك إطارات مفتاحية في الثواني 1 و 2 و 3 ، لكنك تريد قطعها في الثانية 1.5 ، فستنتظر ffmpeg حتى الثانية الثانية قبل أن تبدأ بالقص. هذا يجعلها غير دقيقة. - slhck


أعتقد أنه يمكنك استخدام الأمر التالي الآن.

ffmpeg -i inputFile -vcodec copy -acodec copy -ss 00:09:23 -to 00:25:33 outputFile

إلقاء نظرة أيضا ffmpeg الوثيقةأو هذه الصفحة ويكي.


18
2018-05-07 02:30



ffmpeg -i inputFile -c copy -ss 00:09:23 -to 00:25:33 outputFile نسخة أبسط - nwgat
اضطررت لاستخدام ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4 الإصدار (مع -copyts) ، خلاف ذلك قطعت بشكل غير صحيح (مع شاشة سوداء في البداية). شكرا على الرابط الثاني رغم ذلك. - Necronomicron
هذا شيء عظيم ، آخر شيء كنت أرغب فيه هو حساب المدة من النقاط النهائية. - Tomasz Gandor
يجيب الخيار -to على السؤال الذي تم طرحه بالفعل. بقية الإجابات إما وقح أو عفا عليها الزمن. - James Bowery


هذا غريب أن لا أحد اقترح trim  منقي.

إسقاط كل شيء ما عدا الدقيقة الثانية من الإدخال:

ffmpeg -i INPUT -vf trim=60:120

احتفظ بالثانية الأولى فقط:

ffmpeg -i INPUT -vf trim=duration=1

إسقاط كل شيء ما عدا الثاني عشر إلى الثاني 58:

ffmpeg -i INPUT -vf trim=13:58 OUTPUT

8
2018-04-07 15:10



نعم ، جيد أن أذكر trim و atrim. أنا عادة ما استخدم هذه عند التصفية ، ولكن يجب على المستخدمين ملاحظة ذلك يتطلب التصفية إعادة الترميز. - LordNeckbeard
انت بطلي. أنا في حاجة ماسة إلى مرشح قام بذلك. - fahadash


يمكنك استخدام هذه طريقتان تعملان لنظامي التشغيل Windows و Linux.

هناك طريقتان كيفية تقسيم ملفات الفيديو من خلال ffmpeg. الأول هو جيد في حد ذاته ، أكثر من ذلك - إنه أسرع ، ولكن في بعض الأحيان يخلق ملفات الإخراج مع عيوب معينة. لذا فهذه هي الطريقة الثانية لتقسيم ملفات الفيديو: فهي أبطأ بشكل كبير ، وتكون ملفات الخرج أكبر ، ولكن يبدو أنها دائمًا بنفس مستوى جودة ملفات الإدخال المستخدمة.

الطريق 1:

ffmpeg -ss <start> -i in1.avi -t <duration> -c copy out1.avi

الطريق 2:

ffmpeg -ss <start> -i in1.avi -t <duration> out1.avi
  • <start> - بداية الجزء من الفيديو ffmpeg هو قطع. شكل: 00:00:00.0000، معنى الساعات: دقيقة: ثانية: ميلي ثانية.

  • <duration> - مدة جزء من الفيديو ffmpeg هو قطع. نفس الشكل على النحو الوارد أعلاه.

أمثلة:

ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 -c copy out1.avi
ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 out1.avi

ffmpeg يقطع جزءًا من ملف الفيديو بدءًا من ساعة و 19 دقيقة و 0 ثانية. مدة انقطاع تسلسل الفيديو هي 5 دقائق 0 ثانية.


3
2017-10-03 19:08



حسناً ، شكراً سوف تحقق من المستندات واعطائها محاولة غدا. - juGGaKNot
-sameq لا يعني "نفس الجودة" وتمت إزالته من ffmpeg. استعمال -codec copy في حين أن. أيضا ، لا تنسى -to اختيار. - LordNeckbeard
لقد صححت الأوامر في اقتباسك ، لأنها كانت قديمة تمامًا. الرجاء عدم نسخ المعلومات دون لصقها بشكل صحيح. - slhck


يمكنك استخدام هذا

ffmpeg -sameq -ss clip_start -t duration  -i  original.ogg  clip.ogg

هنا عليك إعطاء مدة الفيديو. أي. 00: 25: 33-00: 09: 23


-1
2018-01-11 18:29



كما ذكرت في الإجابة الأخرى: باستخدام الأمر الخاص بك ، فأنت تقوم بإعادة ترميز الملف ، وهو أمر غير ضروري على الإطلاق ويؤدي إلى انخفاض الجودة وزيادة وقت المعالجة. - slhck


يمكنني استخدام بناء الجملة التالي لقطع الفيديو باستخدام ffmpef:

ffmpeg -sameq -ss [start_seconds] -t [duration_seconds] -i [input_file] [outputfile]

-t يتم استخدامه لتعيين المدة بالثواني - لا يمكنك تحديد وقت النهاية ولكن يجب أن يعمل هذا من أجلك.


-2
2018-01-11 18:27



لماذا تقوم بإعداد FFmpeg لإعادة تشفير الملف؟ لاحظ أن -sameq لا يعني "نفس الجودة" على الإطلاق. - slhck