video التقاط - كيفية استخراج 1 لقطة للشاشة لمقطع فيديو مع ffmpeg في وقت معين؟




للايفون لتصوير (3)

هناك العديد من البرامج التعليمية والمواد التي توضح كيفية استخراج لقطات متعددة من فيديو باستخدام ffmpeg. قمت بتعيين -ر ويمكنك حتى أن تبدأ كمية معينة في.

ولكن أريد فقط لقطة شاشة واحدة في ، أو قول 01:23:45. أو لقطة شاشة واحدة بنسبة 86٪ في.

هذا كله ممكن مع ffmpegthumbnailer ولكن هذا نوع آخر من التبعية لا أريد الاعتماد عليه. أريد أن أكون قادرة على القيام بذلك مع ffmpeg.


Answers

يمكن لبرنامج FFMpeg القيام بذلك عن طريق البحث عن الطابع الزمني المحدد واستخراج إطار واحد تمامًا كصورة ، انظر على سبيل المثال:

ffmpeg -i input_file.mp4 -ss 01:23:45 -vframes 1 output.jpg

دعونا نوضح الخيارات:

-i input file           the path to the input file
-ss 01:23:45            seek the position to the specified timestamp
-vframes 1              only handle one video frame
output.jpg              output filename, should have a well-known extension

تقبل المعلمة -ss قيمة في النموذج HH:MM:SS[.xxx] أو كرقم بالثواني. إذا كنت بحاجة إلى نسبة مئوية ، فستحتاج إلى حساب مدة الفيديو مسبقًا.


استخدم خيار -ss :

ffmpeg -ss 01:23:45 -i input -vframes 1 -q:v 2 output.jpg
  • لاستخدام الإخراج JPEG - -q:v للتحكم في جودة الإخراج. النطاق الكامل هو مقياس خطي من 1-31 حيث يؤدي انخفاض القيمة إلى جودة أعلى. 2-5 نطاق جيد للتجربة.

  • يوفر الفلتر المحدد طريقة بديلة للاحتياجات الأكثر تعقيدًا مثل تحديد أنواع أطر معينة فقط ، أو 1 لكل 100 ، إلخ.

  • وضع -ss قبل الإدخال سيكون أسرع. انظر FFmpeg Wiki: البحث عن هذا المقتطف والمستندات من وثائق أداة ffmpeg cli :

موقف -ss (المدخلات / الإخراج)

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

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

قد يكون الموضع في ثوانٍ أو hh:mm:ss[.xxx] .


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

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




video ffmpeg