سؤال كيفية إنشاء فيديو من الصور باستخدام FFmpeg؟


هل من الممكن استخدامها ffmpeg إنشاء فيديو من مجموعة من التسلسلات ، حيث لا يبدأ الرقم من الصفر؟

على سبيل المثال ، لدي بعض الصور [test_100.jpg ، test_101.jpg ، test_102.jpg ، ... ، test_200.jpg] ، وأريد تحويلها إلى فيديو. لقد جربت الأمر التالي ، ولكنه لم يعمل (يبدو أن الرقم يجب أن يبدأ من الصفر):

ffmpeg -i test_٪ d.jpg -vcodec mpeg4 test.avi

أي نصيحة؟


82
2018-05-13 17:58


الأصل


لقد مضى بعض الوقت منذ طرحك هذا السؤال ، ولكن إذا كنت لا تزال مهتمًا بالسؤال ، فالجواب هو نعم - لقد نشرت التفاصيل ومثالًا أدناه: stackoverflow.com/a/12160155/181638 - Assad Ebrahim
casperOne سيكون مفيدا أن يكون لديك فكرة لماذا هذا خارج الموضوع. يبدو وكأنه مشكلة برمجة محددة. تحتوي علامة FFmpeg على متابعين يبلغ عددهم 3.7 آلاف ، ومن الواضح أنه مع 27 ألف مشاهدة ، يجدونها مفيدة ... - geotheory
geotheory ليست إحصاءات العلامة غير ذات صلة. ffmpeg هو برنامج كثيرا في سبيل القول ، ينرر. في حين يمكنك البرنامج ضد المكتبات في فمبيج، هذا السؤال ليس عن ذلك. استخدام ffmpeg من سطر الأوامر هو أن يُطلب منك مستخدم سوبر، من حيث الموضوع. - casperOne


الأجوبة:


ليست هناك حاجة لإعادة تسمية الملفات في حالة استخدام -start_number التبديل مثل ذلك:

ffmpeg -start_number n -i test_%d.jpg -vcodec mpeg4 test.avi

أين n هو بداية تسلسل اللقطات.

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

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

أستخدم البطانة التالية للحصول على معدل عرض بطيء ولضغط الصور ولديك مقطع فيديو أصغر:

ffmpeg.exe -f image2 -framerate 25 -pattern_type sequence -start_number 1234 
        -r 3 -i Imgp%04d.jpg -s 720x480 test.avi

ال -r 3 يحدد الخيار فراميراتي للفيديو الناتج إلى 3 إطارات في الثانية الواحدة حتى أتمكن من رؤية كل لا يزال لفترة قصيرة من الزمن. ال -s الخيار rescales الصور إلى الدقة المطلوبة لإدارة حجم الفيديو الناتج.

(في Windows shell ، استبدل -i Imgp%04d.jpg مع -i "Imgp%%04d.jpg". الائتمان لهذا مايك فيتزباتريك https://superuser.com/a/344178/153054)


72
2017-08-28 13:19



ما الفرق بين -r و -framerate؟
انهم هم نفس IIRC - rogerdpack
لا داعي لترقيم هراء ، طالما كنت سعيدًا بقبول الطلب الذي تظهر به (قل) 'ls' ... فقط استخدم: ffmpeg -pattern_type glob -i '* .jpg' movie.mp4 - Orwellophile
هل هناك أي مفتاح للتحكم في زمن الفجوة بين الصور ، على سبيل المثال ، أود أن تظهر أول صورة 13S ، و 15 ثانية و 24 ثانية للثالث ، والفجوة الزمنية المحددة من قبل المستخدم ، هل هذا ممكن؟ - zionpi
أنظر أيضا trac.ffmpeg.org/wiki/... - d3vid


يمكنك استخدام هذا أدناه مقتطف الشفرة:

 cat *.jpg | ffmpeg -f image2pipe -r 1 -vcodec mjpeg -i - -vcodec libx264 out.mp4

34
2017-11-08 14:33



لا يؤدي ذلك إلى تدوير ملفات JPG إلى الدوران المذكور في البيانات الوصفية. - Erik Johansson


يمكنك العثور على مثال نصي في وثائق ffmpeg:

3.2 كيف أقوم بترميز صور مفردة إلى أفلام؟

إذا كان لديك عدد كبير من الصور لإعادة تسميتها ، فيمكنك استخدام الأمر التالي لتخفيف العبء. الرمز ، باستخدام بناء جملة قذيفة bourne ، يربط بشكل رمزي جميع الملفات في الدليل الحالي التي تتطابق مع * jpg إلى /tmp' directory in the sequence ofimg001.jpg '، `img002.jpg' وهكذا.

x=1; for i in *jpg; do counter=$(printf %03d $x); ln "$i" /tmp/img"$counter".jpg; x=$(($x+1)); done

ثم اركض:

ffmpeg -f image2 -i /tmp/img%03d.jpg /tmp/a.mpg

17
2017-07-18 17:02



سيكون من الأفضل لك جعل x = 0 للبدء حتى يبدأ اسم الصورة img000.jpg لأن هذا هو ما تتوقعه ffmpeg. أيضا لا يعمل الربط بالنسبة لي لأن ffmpeg لم يتمكن من العثور على الملفات لذا كان عليّ استخدام cp بدلاً من ذلك (السرعة والفضاء واضحان ، لكني قمت بسحبهما بعد كل حال). سيعمل mv أيضًا إذا لم يكن لديك مانع من فقدان النسخ الأصلية.
لاحظ أنه في هذا الجواب ، يقوم الأمر المقدم بإنشاء ارتباطات ثابتة ، وليس روابط رمزية. فيما يتعلق باستخدام cp إذا لم يعمل الربط ، إذا كان نظام الملفات يدعمه cp --reflink=auto سيحقق استخدام أفضل للسرعة / الفضاء. - Félix Saparelli


بقدر ما أعرف ، لا يمكنك بدء التسلسل بأرقام عشوائية (لا أتذكر إذا كنت يجب أن تبدأ في 0 أو 1) ، بالإضافة إلى ذلك ، فإنه لا يمكن أن يكون لها فجوات ، إذا حدث ذلك ، سوف يفترض ffmpeg أن التسلسل انتهى و التوقف عن إضافة المزيد من الصور.

أيضا ، كما ورد في التعليقات على إجابتي ، تذكر أنك تحتاج إلى تحديد عرض الفهرس الخاص بك. مثل:

صورة٪ 03d.jpg

وإذا كنت تستخدم نوع فهرس٪ 03d ، فستحتاج إلى استخدام أسماء الملفات مع 0 ، مثل:

image001.jpg image002.jpg image003.jpg

إلخ


11
2018-05-13 18:15



إذا كانت أسماء ملفات الصور تحتوي على أصفار بادئة ، فيجب أن تحدد سلسلة التنسيق أيضًا العرض مثل "٪ 03d".
إذا كان هذا هو العائق الوحيد ، فيمكنك كتابة نص برمجي إما لإعادة تسمية أو إعادة ربط صورك إلى مجموعة تم إعادة فهرستها بشكل صحيح. - Cascabel
نعم ، لقد عملت مع هذا من قبل ، كتبت غلاف في روبي منذ فترة حيث قمت بالاتصال example.addImage () ، ثم instance.processVideo () ، وسوف تقوم بإنشاء دليل مؤقت ، نسخ / إعادة تسمية الصور مع مؤشرات مناسبة وإنشاء الفيديو. إنه سهل للغاية.
Jefromi لقد قمت بإنشاء ارتباط رمزي ولكن كيف أعطي مسار ملف symlink إلى ffmpeg؟ يفترض فقط أن ملف symlink هو الصورة التي أحاول تحويلها؟ أنا على WIN7 راجع للشغل
يمكن أن يبدأ التسلسل من صفر إلى 4 شاملًا. - Assad Ebrahim


من عند مستندات ffmpeg:

باستخدام نمط كروي

كما يدعم ffmpeg globing على غرار bash (* يمثل أي عدد من أي أحرف).

يكون هذا مفيدًا إذا كانت صورك متسلسلة ولكن ليس بالضرورة في ترتيب تسلسلي رقمي كما في الأمثلة السابقة.

ffmpeg -r 1 -pattern_type glob -i 'test_*.jpg' -c:v libx264 out.mp4

لذلك ، طالما يتم فرز الملفات الخاصة بك ، وذلك باستخدام -pattern_type glob التبديل يجب أن تعمل من أجلك.


10
2017-07-13 07:11



لاحظ أن هذا الكوكب محدود أكثر من غلايات القشرة العادية: trac.ffmpeg.org/ticket/3620 على ما يبدو لأن نوع الصورة يتم استنتاجه من الامتداد. - Ciro Santilli 新疆改造中心 六四事件 法轮功


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


5
2018-05-13 18:23





ابحث عن

x=1; for i in *jpg; do counter=$(printf %03d $x); ln "$i"
/tmp/img"$counter".jpg; x=$(($x+1)); done

1
2017-08-14 21:09





لقد استخدمت برنامج ترميز flv منذ أن كان الفيديو الخاص بي في مشغل فلاش (Jwplayer)

ffmpeg -i٪ d.jpg -vcodec flv test.flv


0
2017-11-11 18:04





يمكنك القيام بذلك مع convert -morph:

convert *.jpg -delay 10 -morph 10 %05d.jpg

0
2018-01-14 23:22



هذا هو مجرد استيفاء تسلسل الصور الأصلي الخاص بك إلى مساحة جديدة ، فإنه لا إنشاء ملف فيديو مثل طلب OP. - f0ster