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


هذا يجب أن يكون تافهاً للغاية ، لكن لا يمكنني العثور على طريقة لتشغيله.

أريد FFmpeg لالتقاط صورة JPEG واحدة وملف صوتي كمدخل وإنشاء ملف فيديو بنفس مدة الملف الصوتي (بتمديد الصورة الثابتة طوال المدة).

لا يهمني كثيرًا ما يتم استخدام برنامج ترميز الفيديو للإخراج ، ولكن من الضروري أن أستخدم "نسخ" كبرنامج ترميز صوتي (أي نسخ دفق الصوت بدون تحويله).

ما هو سطر الأوامر الصحيح الذي من شأنه أن يفعل ذلك؟

حاولت:

ffmpeg -i image8.jpg -i sound11.amr -acodec copy test.avi

وحاولت الكثير من التوليفات مع وبدون -s 640x360، -loop_input، -shortest، -t xxx، -r 0.1 (انخفاض معدل الإطار بشكل مصطنع على أمل أن يكون الفيديو أطول) و -f image2

إما أن أحصل على أخطاء أو أحصل على ملف فيديو لمدة مدة إطار واحد.

لقد بحثت عن غوغل ووجدت اثني عشر من الحلول المقترحة (من المفترض أن هذه المسألة نفسها) لا شيء منها يعمل.

هل يمكن لأي شخص اقتراح أمر عملي وشرح الأساس المنطقي وراء ذلك؟


158
2018-05-04 17:19


الأصل


أنا فقط حاولت سطر الأوامر الخاص بك وعملت كما هو متوقع. قد تكمن مشكلتك في تنسيق الصوت. هل يعمل ترميز الصوت؟ - Captain Giraffe
حسب "كما هو متوقع" ، هل تعني أن الفيديو الناتج له نفس مدة إدخال الصوت؟ هل لعبت هذا؟ أليس كذلك واحد الإطار الطويل؟ - matteo
تنسيق الصوت ليس المشكلة ، تحويل الشفرة يعمل الصوت - matteo
كان لي أمر من قضية المعلمات للغاية وتكلف لي ساعات! هذه الأنواع من المشاكل ليست سيئة للغاية في المساعدة. gregoire.org/2009/12/05/fun-with-ffmpeg - Paul Gregoire
هذا أفضل من الإجابة المختارة ، جربت وانها سريعة وحجم الملف صغير ..ffmpeg -y -i image.png -i audio.mp3 -c:a copy result.avi - Muhammad Umer


الأجوبة:


ترتيب الخيارات في سطر الأوامر يهم. الأعمال التالية لحالتي:

ffmpeg -loop 1 -y -i image8.jpg -i sound11.amr -shortest -acodec copy -vcodec mjpeg result.avi

في حالة أعم ، أين image.jpg و audio.wav هي المدخلات الخاصة بك ، يمكنك استخدام الأمر التالي ، مقتبس من ويكي FFmpeg:

ffmpeg -loop 1 -i image.jpg -i audio.wav -c:v libx264 -tune stillimage -c:a aac -b:a 192k -pix_fmt yuv420p -shortest out.mp4

هذا من شأنه استخدام libx264 ويوفر لك ضغطًا أفضل من برنامج ترميز MJPEG المستخدم أعلاه. الصوت هو AAC ، مع المدمج في ffmpeg التشفير AAC.


121
2017-12-16 14:21



كيف تصبح الملفات أكبر بكثير من [حجم الصورة] + [حجم الملف الصوتي]؟ أتوقع أن يكون ضغط الفيديو مجنونا بإطار ثابت؟ - Alec Jacobson
يعتمد ذلك على برنامج ترميز الفيديو الذي تستخدمه. إذا كنت تقوم بنسخ الأوامر في الأمثلة الخاصة بي ، فأنا أستخدم mjpeg مثل برنامج الترميز ، الذي يضغط كل إطار على حدة ، لذلك لا يستفيد من حقيقة أن جميع الإطارات متساوية. وأعتقد أيضًا أنه حتى برامج الترميز الأخرى قد تعيد ترتيب الإطار بأكمله من حين لآخر ، أي كل إطار N-th ، بحيث يمكنك الحصول على ملف أصغر بكثير ولكن لا يزال أكبر بكثير من حجم صورة + الصوت فقط. يفعلون ذلك لأن (أ) وإلا سيحتاج مفكك التشفير إلى قراءة الملف بأكمله منذ البداية حتى إذا كنت تريد الانتقال إلى الإطار الأخير فقط ، - matteo
Option shortest (finish encoding within shortest input) cannot be applied to input file image.jpg -- you are trying to apply an input option to an output file or vice versa. Move this option before the file it belongs to. - wim
استعمال ffmpeg -y -i image.png -i audio.mp3 -c:a copy result.avi هذا يعمل بشكل أفضل !!!؟! ؟؟!؟! - Muhammad Umer
هذا الجواب يجري حاليا ناقش على الفوقية. - DavidPostill♦


أنت تصنعه طريق أصعب مما يجب أن يكون. FFmpeg هي أكثر ذكاءً مما تعطيه تقديراً - فهي تعلم أنك تريد أن يكون طول الفيديو هو نفس المسار الصوتي.

ffmpeg -i still.png -i narrate.wav -acodec libvo_aacenc -vcodec libx264 final.flv

pause

الصفات الوحيدة أنت يملك لتحديد هي input filenames، ال output codecs، و ال output filename (التي eo ipso يتضمن output container،).

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

حجم الانتاج هو واحدة من عمليات الشنق الأكثر شيوعا في FFmpeg. بعض برامج الترميز أكثر محدودية في أبعاد الإخراج من الآخرين ، ولكن لا يمكن أن يكون لأي إخراج صفات ارتفاع أو عرض فردي.

ال pause أمر في نهاية الملف الدفعي تحافظ على فتح CLI - أفضل طريقة لتصحيح سطر الأوامر الخاص بك عن طريق قراءة رسائل الخطأ يولد. فهي محددة للغاية - وأفضل الوثائق FFmpeg لديها - ولكن يضيع العمل الشاق للمطورين إذا سمحت لإغلاق النافذة قبل أن تتمكن من قراءتها.

قذيفة القيادة لديه التبديل cmd /k الذي يحافظ على نافذة مفتوحة حيث يمكنك تشغيل نفس التعليمات نفسها من البرنامج النصي الدفعي الخاص بك في موجه الأوامر.

FFMPEG و avconv سوف تجعلك تستخدم -c:aإلى عن على -acodec و -c:vإلى عن على -vcodec في نهاية المطاف ، ولكن التعليمات القديمة تعمل بشكل جيد في البنيات التي أستخدمها.

نوتا بيني: كل ارتكاب لديه خصوصياته. إذا فشل سطر الأوامر الخاص بك دون سبب واضح ، فغالباً ما يكون من المفيد تجربة بناء آخر - أو اتباع الشوكة libav، حيث كان مطور FFmpeg الأكثر نشاطًا خلال العامين الماضيين. تم إعادة تسمية أداة الترميز الخاصة بهم avconv ولكن يجب أن تعمل الملفات الدفعية الخاصة بك مع أي واحد.


35
2018-05-26 02:09



يجب أن أستخدم إصدارًا مختلفًا من youurs (إذا كنت قد جربت الأمر وهو يعمل كما تصفه) ، لأنه ، كما سبق أن ذكرت في السؤال ، كنت قد جربت بالفعل نفس الأمر الخاص بك وحصلت على فيديو لمدة من إطار واحد (جزء من الثانية) ، وليس مدة الملف الصوتي. كنت أتوقع أن تكون ذكية ، ولكن (في روايتي) أثبتت أنها ليست كذلك. - matteo
يا ماتيونعم ، لقد قمت بتنفيذ هذا الرمز ، ونعم يعمل كما هو معلن. أنا متأكد من أن هناك الكثير من halfwits التي من شأنها أن تكون مهملة للغاية لجعل مثل هذه الادعاءات دون اختبار لهم ، لذلك سأحاول أن لا تكون بالإهانة :) في وظيفة كاملة أدناه سوف أقوم بتوفير روابط Pastebin إلى وحدة التحكم FFMPEG و MediaInfo البيانات على ملفات الإدخال وملف الإخراج النهائي. ملفات الإدخال الخاصة بي ، ملف دفعي ، ملف الإخراج الخاص بي موجودة على GoogleDrive حيث تكون قابل للتنزيل بحرية، إذا كنت ترغب في اختبارها ضد بناء FFmpeg الخاص بك.
ShinMuraoka Mine is a win-64 ffmpeg build compiled on: Jan 6 2013, at: 16:16:53 لم يعمل الحل الخاص بك ولا حل @ matteo بالنسبة لي. كذلك ، قمت بتنزيل ملفاتك من Google Drive ، إلا أنها لم تعط المخرج المتوقع (كان ملف الإخراج يحتوي على صوت أسود فقط). الرجاء مساعدتي في معرفة الأمر الصحيح لاستخدامه. - coding_idiot
"لا يمكن أن يكون للإخراج سمات ذات ارتفاع أو ارتفاع فردي" غير صحيح. قم بتعيين pix_fmt على شيء لا يحتوي على اختزال chroma ، مثل rgb24 أو yuv444p ، ثم تأكد من أن برنامج الترميز والحاوية يدعمونه ولا توجد قيود أخرى عليه. فيما يتعلق pix_fmt ، FFmpeg أقل من ذكي ؛ فإنه يفترض yuv420p (الذي لديه chroma subampling) إلا إذا أخبرته خلاف ذلك. - Jonathan Baldwin
ماذا عن صور متعددة؟ أحتاج إلى تغيير الصورة في وقت محدد إلى صورة أخرى. أريد أن أكون قادراً على تحديدها في سطر الأوامر باستخدام معلمة وقت لكل منها.


أسهل:

ffmpeg -i ep1.png -i ep1.wav ep1.flv

سيحاول FFmpeg اختيار أفضل برنامج ترميز تلقائيًا ، اعتمادًا على امتداد ملف الإخراج الخاص بك.

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

ffmpeg -r 1 -loop 1 -i ep1.jpg -i ep1.wav -acodec copy -r 1 -shortest -vf scale=1280:720 ep1.flv

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


29
2018-01-28 20:16



كما أنه من الممكن ألا يكون ملف الصوت الخاص بك متوافقًا مع حاوية .flv. في هذه الحالة ، يجب عليك فقط تجربة حاوية (إخراج) مختلفة ، مثل .webm أو .avi أو أي تنسيق ، حتى تجد تنسيق حاوية متوافق مع ملف الصوت الخاص بك. - PJ Brunet
تستخدم هذه ل. JPG و MP4 لجعل MP4 - عملت على أكمل وجه. لم يبدو أن FLV I الذي تم إنشاؤه من JPG / MP3 يعمل - وهو ما قد يكون وفقًا لتحذيرات التعليقات السابقة.
يعمل الإصدار المحدث ، على يوتيوب. اعتقدت أنها كانت عالقة في 95 ٪ ولكن في النهاية عملت. - Basj
حصلت على هذا: No pixel format specified, yuvj420p for H.264 encoding chosen. Use -pix_fmt yuv420p for compatibility with outdated media players. [libx264 @ 0x2b5c940] height not divisible by 2 (700x457) ... هذا يعمل: ffmpeg -r 1 -loop 1 -i ep1.jpg -i ep1.wav -acodec copy -r 1 -shortest -vf scale=1280:-2 video.mp4 - NineCattoRules
ماذا عن صور متعددة؟ أحتاج إلى تغيير الصورة في وقت محدد إلى صورة أخرى. أريد أن أكون قادراً على تحديدها في سطر الأوامر باستخدام معلمة وقت لكل منها.


النسخة التي عملت معي:

 ffmpeg -loop 1 -y -i pic.jpg -i sound.amr -shortest video.mp4

الخروج من الخيار -shortest يجب أن يكون أمام ملف الإخراج إذا لم أحصل على الخطأ التالي:

لا يمكن تطبيق الخيار الأقصر (إنهاء التشفير ضمن أقصر إدخال) على ملف الإدخال pic.jpg - أنت تحاول تطبيق خيار إدخال على ملف الإخراج أو العكس. نقل هذا الخيار قبل الملف الذي ينتمي إليه. خطأ في تحليل الخيارات لملف الإدخال pic.jpg.


14
2018-05-22 00:40



شكرا على هذا. لم تعمل معظم الإجابات الأخرى بالنسبة لي (باستخدام ffmpeg على Alpine linux). هذه الإجابة لديها أقصر الأوامر التي عملت بلا منازع بالنسبة لي. - DannyB


من صفحة ffmpeg:

ffmpeg [[infile options][-i infile]]... {[outfile options] outfile}...

كما اكتشفت ، يجب أن تأتي خيارات infile قبل infile التي تنطبق عليها.

هذا ليس خطأ ، على الرغم من ذلك ، مجرد آلية يمكنك من خلالها تحديد الحجج التي تنطبق على.


8
2018-04-15 22:15



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


هذا العمل بالنسبة لي

ffmpeg -loop 1 -shortest -y -i image.jpg -i audio.mp3 -acodec copy -vcodec libx264 video.avi

لقد وجدت vcodec libx264 خلق ملفات أصغر بكثير من mpjeg (10 ميغابايت بدلاً من 100 ميغابايت).


4
2017-09-18 11:44



-shortest هو خيار إخراج وقد يتم تجاهله كخيار إدخال بينما تستخدمه. - LordNeckbeard


كنت أحاول القيام به matteoولكن بدون الصوت و Colonel الذعرحل حل أفضل:

ffmpeg -loop 1 -shortest -y -i still.png -vcodec libx264 -t 10 video.avi

لم يكن لدي سوى إضافة وسيطة المدة في ثوان (-t 10).


1
2017-07-22 12:15



-shortest هو خيار مخرجات ، ولكنك تستخدمه كخيار إدخال. نقله قبل ملف الإخراج ويمكنك القضاء على -t 10، لكن إجابتك ستكون مشابهة تمامًا للآخرين. - LordNeckbeard


ffmpeg -loop 1 -i img.jpg -i audio.wav -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest out.mp4


0
2017-07-12 16:20



هل يمكن أن توضح كيف يعمل الأمر الذي أضفته؟ - neelsg
لا تختلف هذه الإجابة كثيرًا عن "إجابات التعليقات" البسيطة الأخرى هنا. - LordNeckbeard