सवाल FFmpeg का उपयोग करके एक वीडियो बनाने के लिए एक छवि + एक ऑडियो फ़ाइल को मिलाएं


यह बहुत छोटा होना चाहिए, लेकिन मुझे इसे काम करने के लिए कोई रास्ता नहीं मिल रहा है।

मैं चाहता हूं कि एफएफएमपीजी एक जेपीईजी छवि और एक ऑडियो फाइल इनपुट के रूप में ले और ऑडियो अवधि के रूप में उसी अवधि की एक वीडियो फ़ाइल जेनरेट करे (पूरी अवधि के लिए अभी भी छवि खींचकर)।

मुझे आउटपुट के लिए वीडियो कोडेक का उपयोग करने के बारे में बहुत परवाह नहीं है, लेकिन यह महत्वपूर्ण है कि मैं "कॉपी" को ऑडियो कोडेक के रूप में उपयोग कर सकूं (यानी ऑडियो स्ट्रीम को ट्रांसकोड किए बिना कॉपी करें)।

सही कमांड लाइन क्या है जो ऐसा करेगी?

मैंने कोशिश की:

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 -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 एन्कोडर और ऊपर इस्तेमाल किए गए एमजेपीईजी कोडेक की तुलना में आपको बेहतर संपीड़न प्रदान करता है। ऑडियो एएसी है, जिसमें अंतर्निहित है ffmpeg एएसी एन्कोडर।


121
2017-12-16 14:21



फाइलें [छवि के आकार] + [ऑडियो फ़ाइल का आकार] से कितनी बड़ी हो जाती हैं? मैं वीडियो संपीड़न एक स्थिर फ्रेम के साथ पागल जाने की उम्मीद करेंगे? - Alec Jacobson
यह आपके द्वारा उपयोग किए जाने वाले वीडियो कोडेक पर निर्भर करता है। यदि आप मेरे उदाहरणों में कमांड कॉपी कर रहे हैं, तो मैं mjpeg को कोडेक के रूप में उपयोग कर रहा हूं, जो प्रत्येक फ्रेम को अलग से संपीड़ित करता है, इसलिए इस तथ्य का कोई फायदा नहीं होता कि सभी फ्रेम बराबर हैं। साथ ही, मुझे लगता है कि यहां तक ​​कि अन्य कोडेक्स भी एक बार में प्रत्येक फ्रेम को फिर से लोड करेंगे, यानी प्रत्येक एन-थ फ्रेम, इसलिए आपको एक बहुत छोटी फ़ाइल मिल जाएगी लेकिन छवि + ध्वनि के आकार की तुलना में अभी भी बहुत बड़ी होगी। वे ऐसा इसलिए करते हैं क्योंकि (ए) अन्यथा डिकोडर को शुरुआत से पूरी फ़ाइल को पढ़ने की आवश्यकता होगी भले ही आप केवल अंतिम फ्रेम पर कूदना चाहते हैं, और - 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 (कौन कौन से ईओ आईपीएसओ इसमें शामिल है output container,)।

बेशक, यह अभी भी एक छवि के साथ शुरू करने के लिए समझ में आता है जो आपके अंतिम वीडियो के समान आयाम साझा करता है; यदि आप एफएफएमपीईजी के लिए आउटपुट आयाम निर्दिष्ट करने के बजाय समर्पित छवि संपादक का उपयोग कर रहे हैं, तो आपको इसकी आवश्यकता है सुनिश्चित करें कि आपके इनपुट आयाम भी संख्याएं हैं

आउटपुट आकार है एफएफएमपीईजी के सबसे आम हैंग-अप में से एक; कुछ कोडेक्स अन्य लोगों की तुलना में आउटपुट आयामों में अधिक प्रतिबंधित हैं, लेकिन कोई आउटपुट अजीब-ऊंचाई ऊंचाई या चौड़ाई विशेषताओं में हो सकता है।

pause आदेश बैच फ़ाइल के अंत में सीएलआई खुला रहता है - द अपनी कमांड लाइन डीबग करने का सबसे अच्छा तरीका त्रुटि संदेशों को पढ़ना है यह उत्पन्न करता है। वे बेहद विशिष्ट हैं - और सबसे अच्छा प्रलेखन एफएफएमपीईजी है - लेकिन डेवलपर्स का कड़ी मेहनत बर्बाद हो जाती है अगर आप उन्हें पढ़ने से पहले विंडो को बंद करने की अनुमति देते हैं।

कमांड खोल एक स्विच है cmd /k जो एक खुली खिड़की को बनाए रखता है जहां आप कमांड प्रॉम्प्ट पर अपनी बैच स्क्रिप्ट से वही निर्देश चला सकते हैं।

FFmpeg तथा avconv आप दोनों का उपयोग करेंगे -c:aके लिये -acodec तथा -c:vके लिये -vcodec आखिरकार, लेकिन पुराने निर्देश मेरे द्वारा उपयोग किए जाने वाले निर्माण में ठीक काम करते हैं।

नोटा बेने: प्रत्येक प्रतिबद्धता में मूर्खता है। यदि आपकी कमांड लाइन किसी स्पष्ट कारण के लिए विफल नहीं हो रही है, तो अक्सर एक और निर्माण करने की कोशिश करने में मदद मिलती है - या पर कांटा का पालन करें libav, जहां एफएफएमपीईजी के सबसे सक्रिय डेवलपर्स पिछले कुछ सालों से रहे हैं। उनके ट्रांसकोडिंग उपकरण का नाम बदल दिया गया है avconv लेकिन आपकी बैच फ़ाइलों को किसी एक के साथ काम करना चाहिए।


35
2018-05-26 02:09



मुझे आपके से अलग संस्करण का उपयोग करना होगा (यदि आपने अपना आदेश आज़माया है और यह वर्णन करता है जैसा कि आप वर्णन करते हैं), क्योंकि, जैसा कि मैंने पहले से ही इस प्रश्न में उल्लेख किया है, मैंने पहले से ही आपके सटीक वही आदेश की कोशिश की है और मुझे अवधि का वीडियो मिलता है 1 फ्रेम (एक सेकंड का अंश), ऑडियो फ़ाइल की अवधि नहीं। मुझे उम्मीद थी कि यह बुद्धिमान हो, लेकिन (मेरे संस्करण में) यह साबित नहीं हुआ। - matteo
हे मैटेयो, हाँ, मैंने उस कोड को निष्पादित किया है, और हाँ, यह विज्ञापित के रूप में काम करता है। मुझे यकीन है कि बहुत सारे अर्धविद हैं जो परीक्षण किए बिना ऐसे दावों को करने के लिए इतने लापरवाही होंगे, इसलिए मैं नाराज न होने की कोशिश करूंगा :) नीचे एक पूर्ण पोस्ट में मैं एफएफएमपीईजी कंसोल आउटपुट और मीडियाइन्फो में पेस्टबिन लिंक की आपूर्ति करूंगा इनपुट फाइलों और अंतिम आउटपुट फ़ाइल पर डेटा। मेरी इनपुट फाइलें, मेरी बैच फ़ाइल, मेरी आउटपुट फाइल GoogleDrive पर हैं जहां वे हैं स्वतंत्र रूप से डाउनलोड करने योग्य, यदि आप उन्हें अपने एफएफएमपीईजी बिल्ड के खिलाफ परीक्षण करना चाहते हैं।
@ShinMuraoka Mine is a win-64 ffmpeg build compiled on: Jan 6 2013, at: 16:16:53 न तो आपका समाधान और न ही @matteo समाधान मेरे लिए काम किया। साथ ही, मैंने Google ड्राइव से आपकी फ़ाइलें डाउनलोड की हैं, लेकिन इसने अपेक्षित आउटपुट नहीं दिया है (आउटपुट फ़ाइल का काला केवल ऑडियो था)। उपयोग करने के लिए सही कमांड को समझने में मेरी मदद करें। - coding_idiot
"कोई आउटपुट अजीब संख्या ऊंचाई नहीं हो सकता है- या चौड़ाई विशेषताओं" सच नहीं है। कुछ ऐसा करने के लिए pix_fmt सेट करें जिसमें rrb24 या yuv444p जैसे chroma subsampling नहीं है, तो सुनिश्चित करें कि कोडेक और कंटेनर इसका समर्थन करते हैं और कोई और प्रतिबंध नहीं है। Pix_fmt के संबंध में, FFmpeg बुद्धिमान से कम है; यह yuv420p (जिसमें क्रोमा सबैम्प्लिंग है) मानता है जब तक कि आप इसे अन्यथा नहीं बताते। - Jonathan Baldwin
एकाधिक छवियों के बारे में क्या? मुझे छवि को किसी विशिष्ट समय पर किसी अन्य छवि में बदलने की आवश्यकता है। मैं उन्हें प्रत्येक के लिए एक समय पैरामीटर के साथ कमांड लाइन पर निर्दिष्ट करने में सक्षम होना चाहता हूं।


यहां तक ​​कि आसान:

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

आपकी आउटपुट फ़ाइल के विस्तार के आधार पर FFmpeg स्वचालित रूप से सर्वश्रेष्ठ कोडेक चुनने का प्रयास करेगा।

अपडेट: मैंने देखा कि YouTube को वीडियो को संसाधित करने में कठिनाई है (95% पर फंस जाता है) मुझे लगता है क्योंकि केवल एक फ्रेम है। यूट्यूब को खुश करने के लिए मैंने जो समाधान पाया: अधिक फ्रेम जोड़ें। इसके अलावा, मैंने जोड़ा-acodec copy ऑडियो गुणवत्ता को संरक्षित करने के लिए। आप की जरूरत है -shortest या यह हमेशा के लिए loops। (यह सबसे छोटी धारा के अंत में बंद हो जाता है, जो ऑडियो है, क्योंकि छवि लूप अनंत है।) आपके विकल्पों का क्रम गति के लिए बहुत महत्वपूर्ण है, क्योंकि फ़िल्टर (और ऐसे) आपके द्वारा निर्दिष्ट क्रम में संसाधित होते हैं। यदि आप इन मानकों के क्रम को बदलते हैं, तो परिणाम नाटकीय रूप से भिन्न होते हैं। 

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

यह भी ध्यान दें कि मैंने फ्रेम दर को दो बार सेट किया है, यह कोई दुर्घटना नहीं है - पहली फ्रेम दर इनपुट के लिए है, दूसरा आउटपुट के लिए है। यदि आप इसे सही तरीके से करते हैं, तो वीडियो के प्रति सेकंड केवल एक फ्रेम होना चाहिए, जिसका अर्थ है कि यह अपेक्षाकृत तेज़ एन्कोड करता है। इसके अलावा मैंने संकल्प को 720p पर सेट किया है, जिसका अर्थ है कि आपको YouTube पर एचडी ऑडियो प्राप्त करना चाहिए :-)


29
2018-01-28 20:16



साथ ही यह भी संभव है कि आपकी ऑडियो फ़ाइल आपके .flv कंटेनर के साथ संगत न हो। उस स्थिति में, आपको केवल एक अलग (आउटपुट) कंटेनर की तरह प्रयास करना चाहिए, जैसे .webm, .avi या जो भी प्रारूप, जब तक आपको एक कंटेनर प्रारूप नहीं मिलता है जो आपकी ऑडियो फ़ाइल के अनुकूल है। - PJ Brunet
एक एमपी 4 बनाने के लिए .JPG और .MP3 के लिए इसका उपयोग किया - पूरी तरह से काम किया। जेपीजी / एमपी 3 से बनाया गया एफएलवी काम नहीं कर रहा था - जो पिछले टिप्पणियों की चेतावनी के अनुसार हो सकता है।
यूट्यूब के लिए अद्यतन संस्करण काम करता है। मैंने सोचा कि यह 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 का उपयोग करके)। इस जवाब में सबसे कमांड कमांड है जो मेरे लिए बेकार ढंग से काम करता है। - DannyB


Ffmpeg manpage से:

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

जैसा कि आपने पाया, इन्फाइल विकल्प उन इन्फाइल से पहले आना चाहिए जिन पर वे लागू होते हैं।

यह एक बग नहीं है, हालांकि, केवल एक तंत्र जिसके द्वारा आप निर्दिष्ट कर सकते हैं कि कौन से 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 (100 एमबी के बजाय 10 एमबी)।


4
2017-09-18 11:44



-shortest एक आउटपुट विकल्प है और इसे इनपुट विकल्प के रूप में अनदेखा किया जा सकता है जैसा कि आप इसका उपयोग कर रहे हैं। - LordNeckbeard


मैं ऐसा करने की कोशिश कर रहा था @matteo, लेकिन ऑडियो के बिना, और @ कोलोनेल आतंकसमाधान का सबसे अच्छा काम किया:

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


यदि कोई उन्हें बैच करना चाहता है, तो इसे आज़माएं।

आप इनपुट और आउटपुट फ़ोल्डर सेट कर सकते हैं, और वह प्रारूप भी जिसमें आप वीडियो चाहते हैं। इस मामले में मैंने इसे एवीआई पर सेट किया है।

यह जवाब FFmpeg का उपयोग करके एक वीडियो बनाने के लिए एक छवि + एक ऑडियो फ़ाइल को मिलाएं मुझे बहुत मदद की।

 @echo off
 set "sourcedir=C:\Users\CodeHard\Desktop\BOX\Newfolder"  
 set "outputdir=C:\Users\CodeHard\Desktop\BOX\Converted" 

 PUSHD "%sourcedir%"

 for %%F in (*.mp3) DO ffmpeg -r 1 -loop 1 -i abc.jpeg -i "%%F" -acodec copy -r 1 -shortest -vf scale=1280:720 "%outputdir%\%%F.avi"  

 POPD

0
2018-05-24 07:43