[Video] كيفية استخراج مقاطع فيديو دقيقة مع فميغ؟


Answers

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

تستخدم بشكل صحيح، قبل ملف الإدخال انهم من المفترض أن تنطبق على، -ss و -t عملت بشكل جيد بالنسبة لي. عند تضمين الصوت في الإخراج، واضطررت إلى استخدام -shortest كخيار لملف الإخراج، أو كنت احصل على 2 دقيقة من الصوت مع 2 ثانية من الفيديو.

فميغ الإصدار N-67413-g2a88c74 (أساسا مصدر جيت من 14 ديسمبر 2014)

إليك سطر الأوامر الذي استخدمته لإنشاء مقطع مؤخرا. (فعلا أنب ليكون مثالا أفضل، منذ تركت في الصوت لهذا، ولم يكن سلو مو ذلك).

ffmpeg -ss 120.2 -t 0.75 -i ../mcdeint.60p.lossless264.slow.mkv -c:a libopus -shortest -aspect 16:9 -preset veryslow -x264-params nr=250:ref=6 -crf 22 -movflags +faststart clip2.mkv

مع -c:a copy (مصدر الصوت AC3)، تشغيل يبدأ وونكي مع مبلاير. فمن المحتمل أن يلتقط الصوت من بداية الإطار الصوتي الذي يحتوي على البداية، ومن ثم يجب استخدام آ / V تعويض في الحاوية. عند بدء التشغيل، فإنه يأخذ جزء من الثانية للصوت للحصول على قبل الفيديو من هذا الإزاحة، وحتى ذلك الحين الفيديو يلعب في فبس منخفضة جدا. لذلك أنا شكوديد الصوت. لا أووس ولا pcm_s16le يمكن أن تذهب في MP4، لذلك استخدمت حاوية مكف لهذا المثال.

المصدر هو ترميز x264 ضياع ( -qp 0 ) من إخراج -qp 0 بطيئة جدا = 3: 1، مكدينت = 3: 1: 10 (على بعض الفيديو بفف متداخلة من دفد نتسك، ربما من كاميرا دف). انها ليست كل إطارات I ، انها إطارات P مع فاصل الإطار العادي العادي.

ضبط -ss بنسبة 0.2 ثانية بالضبط ما كنت آمل، لذلك فميغ يجب التعامل مع فك تصل إلى النقطة المطلوبة. لم يكن مجرد مصادفة إطار I حيث أردت واحدة. ربما -accurate_seek هو الافتراضي؟ أنا أيضا الحصول على نفس النتيجة (بايت ل بايت متطابقة إخراج جيف) كما عندما أستخدم مصدر ضياع ففهوف كمدخلات. (ولكن يتم تشغيله بشكل أسرع، لأنه لا يلزم فك شفرة حتى النقطة المطلوبة.)

وهناك خيار آخر من المحتمل أن يكون -seek2any ، لكنه يقول "تسعى إلى غير الإطار الرئيسي على مستوى ديموكسر"، الذي يبدو وكأنه سوف تسمح لك تسعى بطرق من شأنها أن تنتج الناتج مشوه. (أي بدء فك التشفير بدون توليد المراجع التي يتطلبها الإطار الحالي، فكل ما عليك هو استخدام الرمادي بالكامل؟)

لم أحاول استخدام -c:v copy ، لأنني قطع مقطع قصير حقا إلى حلقة، لذلك أنا أعلم أنه لن يكون هناك إطارات حيث أنا في حاجة إليها.

هذا هو سطر الأوامر أنا فعلا المستخدمة، لجعل قصيرة سلو مو كليب مع أي صوت.

ffmpeg -ss 120.2 -t 0.75 -i ../vid.yadif3.1,mcdeint3.1.10.ffvhuff.mkv -an -shortest -aspect 16:9 -c:v libx264 -preset veryslow -x264-params nr=250:ref=6 -crf 22 -filter:v "setpts=3.0*PTS" -movflags +faststart -r 20 clip.mp4

لاحظ أن -r 20 كان مهما، لأنه على عكس مكف، خرج MP4 فميغ هو ثابت إطار معدل فقط (تحرير: لأن -vsync vfr ليس الافتراضي مع موكسر mp4). وبدون قولها مختلفة، فإنها ستحدد فبس الناتج = فبس المدخلات، والأطر مكررة عند الحاجة لتحقيق ذلك. x264 و جيف المتحركة (مع الشفافية) يمكن أن ترميز الإطارات المكررة بكفاءة عالية، لكنها لا تزال سخيفة.

قبل الطبخ هذا كمثال، كنت قد فعلت ذلك في 2 خطوات، إخراج واحد ل مكف، ثم ffmpeg -i clip.mkv -c:v copy -movflags +faststart -r 20 clip.mp4 إلى ffmpeg -i clip.mkv -c:v copy -movflags +faststart -r 20 clip.mp4 . راجع للشغل، فمن الممكن لتغيير إطارا في الثانية من الفيديو عند ريموكسينغ، دون شكودينغ، فقط لا مع فميغ. https://superuser.com/questions/740196/reducing-video-size-with-avconv-why-does-the-size-increase . ولكن على أي حال، فميغ أرسلت فقط 45 لقطة ل libx264 عند جعل مكف، على الرغم من أنه يعتقد أنه كان يجعل الفيديو 2.2 ثانية في 60fps. لا تستخدم فميغ مع MP4 للعمل مع الاشياء فبس متغير.

إديت: تبين فميغ الافتراضية إلى -vsync vfr ل مكف الإخراج، ولكن ليس ل MP4. مع -vsync vfr ، فميغ يمكن أن يكتب فر إلى إخراج MP4 على ما يرام.

ومرة أخرى للإخراج جيف، في حال قررت عدم وضعها مع HTML5 الفيديو ( <video controls autoplay loop> <source src="clip.mp4" type="video/mp4"> </video> )

ffmpeg -ss 120.2 -t 0.75 -i ../vid.yadif3.1,mcdeint3.1.10.ffvhuff.mkv -an -shortest -aspect 16:9 -filter:v "setpts=3.0*PTS,scale=854x480" -r 20 clip.gif

كان علي استخدام scale= لأن حاوية جيف لا تخزن نسبة العرض إلى الارتفاع، لذلك لا يمكن الحصول على تحجيم تلقائي على التشغيل. (بلدي 720x480 بكسل 16: 9 يحصل على تحجيم الفيديو إلى 854x480 على التشغيل في الواقع يجب أن يكون 853.333، ولكن يحصل على تقريب، ومن ثم فميغ مخازن 853x480 في حاوية مكف، وبالتالي استخدام -aspect 16: 9 في كل وقت، لذلك بلدي mp4 سوف تخزن نسبة العرض إلى الارتفاع المناسبة [SAR 32:27 DAR 16:9] ، بدلا من [SAR 186:157 DAR 279:157] )

Question

هذه ليست مسألة مسألة جديدة خاصة هنا، ولكنني حاولت ما تم اقتراحه هناك دون الكثير من الحظ. لذلك، قصتي:

لقد حصلت على قطعة من 15 ثانية من مستقيم-from-the-camera.mov الفيديو من الذي أريد لاستخراج قطعة محددة، والتي يمكن تحديدها من قبل وقت البدء ووقف الوقت، في ثوان. بدأت من خلال محاولة القيام بما سأتصل "استخراج نسخة": للحصول على ثوان 9-12،

ffmpeg -i test.mov -vcodec copy -acodec copy -ss 9 -to 12 test-copy.mov

كانت هذه بداية سيئة سيئة، ولكن هناك بعض الإطارات السوداء في بداية ونهاية مقطع، والتي لا يمكن أن يكون - يجب أن يكون تحرير نظيفة من الأصل. لذلك، حاولت ترميز الأصلي إلى مقطع جديد، قلص:

ffmpeg -i test.mov -ss 00:00:09 -t 00:00:03 test-out.mov

هذا هو أفضل، ولكن ليس تماما: لم يعد هناك أي إطارات سوداء في بداية مقطع، لكنها لا تزال هناك في النهاية.

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

ffmpeg -i test.mov -force_key_frames "expr:gte(t, n_forced)" test-forced.mp4

و

ffmpeg -i test.mov -g 1 test-g-inserted.mp4

(لقد بنيت هذه كما MP4 على أساس بعض التعليقات حول حاوية MP4 اللازمة لدعم البحث عن الإطار الرئيسي، ولكن أنا بصراحة مجرد القرصنة هنا). ثم حاولت استخراج كما كان من قبل، ولكن على هذه أشرطة الفيديو الجديدة التي يفترض أن يكون الآن إطارات المفاتيح فيهم. لا حظ - على حد سواء يبدو أن يكون عن نفسه. البداية على ما يرام ولكن لا تزال هناك إطارات سوداء في نهاية المطاف. (فويو، كل من اختبار القسري.mp4 و تيست-g- إدراج. mp4 أيضا إطارات سوداء زائدة.)

لذلك: ما زلت عالقة، وأود أن لا يكون. أي رؤى حول ما أفعله خطأ؟ أشعر بأنني قريب، ولكنني حقا بحاجة للتخلص من تلك الأطر السوداء الزائدة ...




أود أن أعرف أيضا. حتى الآن لقد قمت بتحويل مقاطع الفيديو الخاصة بي بلا خسارة، واستخراج شريحة وإعادة ترميز لهم بعد تحرير:

ffmpeg -i input -ss 9.48 -t 3.52 -c:v libx264 -crf 0 -g 1 -c:a copy TempIframe.mp4

ولكن هذه عملية تستغرق وقتا طويلا وخسارة ...

لقد حاولت ما يلي دون نجاح:

ffmpeg -i source.mp4 -ss 1 -c:v copy -seek2any 1 -avoid_negative_ts 1 -safe 1 -c:a copy segment.mp4