linux قص - قطع مقاطع الفيديو استنادًا إلى وقت البدء والانتهاء باستخدام ffmpeg




اسهل من (5)

لقد حاولت قطع الفيديو باستخدام وقت البدء والانتهاء من الفيديو باستخدام الأمر التالي

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:

لقد حاولت قطع باستخدام الأمر التالي الذي اقترحه mark4o

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

ولكن تبين أن الخطأ التالي.

برنامج التشفير "aac" هو تجريبي ولكن لم يتم تمكين برامج الترميز التجريبية

لذا أضفت -strict -2 إلى الأمر ie ،

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

الآن تعمل بشكل جيد.


Answers

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

إسقاط كل شيء ما عدا الثاني 3 إلى الثاني 8.


من المحتمل أنك لا تملك إطارًا أساسيًا في علامة 3 ثوانٍ. ونظرًا لأن تشفير الإطارات غير المفتاحية يشفر الاختلافات من إطارات أخرى ، فإنها تتطلب جميع البيانات بدءًا من الإطار الرئيسي السابق.

مع حاوية mp4 ، من الممكن قطعها على إطار مفتاحي دون إعادة ترميز باستخدام قائمة تحرير. بعبارة أخرى ، إذا كان الإطار الرئيسي الأقرب قبل 3s هو 0s ، فسيتم نسخ الفيديو بدءًا من 0 ثانية واستخدام قائمة تعديل لإخبار المشغل ببدء التشغيل لمدة 3 ثوانٍ.

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

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

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

عند إعادة الترميز ، قد ترغب أيضًا في تضمين خيارات إضافية متعلقة بالجودة أو برنامج تشفير AAC معين. لمزيد من التفاصيل ، انظر دليل تشفير x264 ffmpeg للفيديو ودليل تشفير AAC للصوت.

أيضًا ، يحدد الخيار -t مدة ، وليس وقت انتهاء. سيعمل الأمر السابق على ترميز 8s من الفيديو بدءًا من 3s. لبدء في 3S وتنتهي في استخدام 8S -t 5 . إذا كنت تستخدم إصدارًا حاليًا من ffmpeg ، فيمكنك أيضًا استبدال -t -to في الأمر أعلاه حتى تنتهي في الوقت المحدد.


حاول استخدام هذا. هذا هو أسرع وأفضل طريقة ffmpeg لدي الرقم بها:

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

يعمل هذا الأمر على توسعة مقطع الفيديو الخاص بك في ثوانٍ!

لقد شرحت ذلك على مدونتي here :

-i: هذا يحدد ملف الإدخال. في هذه الحالة ، يكون (input.mp4).
-ss: يستخدم مع -i ، هذا يسعى في ملف الإدخال (input.mp4) إلى الموضع.
00:01:00: هذه هي المرة التي سيبدأ فيها الفيديو الذي تم اقتطاعه.
-to: تحدد المدة من البداية (00:01:40) حتى النهاية (00:02:12).
00:02:00: هذه هي المرة التي ينتهي فيها الفيديو الذي تم اقتطاعه.
نسخ c: هذا هو خيار لتقليص عبر نسخة تيار. (ملاحظة: سريع جدا)

تنسيق التوقيت هو: hh: mm: ss

يرجى ملاحظة أن الإجابة الحالية عالية الأداء قد عفا عليها الزمن وأن عملية القطع ستكون بطيئة للغاية. لمزيد من المعلومات ، انظر إلى article ffmpeg الرسمية.


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

استخدام -c نسخة لجعل في الحال. في هذه الحالة ، لن يقوم ffmpeg بإعادة تشفير الفيديو ، ولن يؤدي إلا إلى تقليص حجمه.


نعم فعلا. ولكن سيكون slooowwww ....

التعليمات البرمجية مع Python 3 و OpenCV 3.3 التي تقرأ من webcam (من الملف ، فقط قم بتغيير cv2.VideoCapture ("filename.mp4")):

from IPython.display import clear_output, Image, display, HTML
import numpy as np
import cv2
import base64

def arrayShow (imageArray):
    ret, png = cv2.imencode('.png', imageArray)
    encoded = base64.b64encode(png)
    return Image(data=encoded.decode('ascii'))
video = cv2.VideoCapture(0)
while(True):
    try:
        clear_output(wait=True)
        _, frame = video.read()
        lines, columns, _ =  frame.shape
        frame = cv2.resize(frame, (int(columns/4), int(lines/4))) 
        img = arrayShow(frame)
        display(img)
    except KeyboardInterrupt:
        video.release()

قد تحتاج إلى تغيير حد معدل بيانات IOPub. يمكنك تغيير ذلك من خلال تهيئة jupyter أو مجرد تشغيل مفكرة jupyter --NotebookApp.iopub_data_rate_limit = 1000000000

لا تعمل مقاطعة لوحة المفاتيح بشكل صحيح ، مع ذلك.





linux video ffmpeg video-editing