Ffmpeg का उपयोग करके वीडियो में एक नया ऑडियो (मिश्रण नहीं) कैसे जोड़ें?


131

मैंने एक कमांड का उपयोग किया:

ffmpeg -i video.avi -i audio.mp3 -vcodec codec -acodec codec output_video.avi -newaudio

वीडियो के लिए नया ऑडियो ट्रैक जोड़ने के लिए नवीनतम संस्करण में (मिक्स नहीं)।

लेकिन मैंने ffmpeg को नवीनतम संस्करण ( ffmpeg संस्करण git-2012-06-16-809d71d ) में अपडेट किया और अब इस संस्करण में पैरामीटर -newaudioकाम नहीं करता है।

कृपया मुझे बताएं कि मैं अपने वीडियो में नया ऑडियो कैसे जोड़ सकता हूं (मिश्रण नहीं) ffmpeg


@Kiquenet हाँ, आप सही हैं। और जवाब पहले से ही दिया जाता है। जरा इस सूत्र को पढ़िए। यह सवाल 5 साल पुराना है।
वेटलल

नए ऑडियो को जोड़ने से आपका मतलब है ऑडियो को बदलना, है ना? मैं आपके प्रश्न को स्पष्ट करने के लिए संपादित कर सकता हूं।
tommy.carstensen

जवाबों:


295

वीडियो में ऑडियो जोड़ें: स्ट्रीम कॉपी

ffmpeg -i video.avi -i audio.mp3 -codec copy -shortest output.avi
  • -mapविकल्प को छोड़ना डिफ़ॉल्ट स्ट्रीम चयन का उपयोग करेगा । यदि आपके वीडियो इनपुट में कोई ऑडियो नहीं है तो यह काम करेगा।
  • यह उदाहरण स्ट्रीम कॉपी-codec copy करने के लिए उपयोग करता है (पुन: एन्कोडिंग नहीं; गुणवत्ता संरक्षित है और यह तेज है)।
  • -shortestविकल्प कर देगा output.aviकम से कम इनपुट के रूप में इसी अवधि।

वीडियो में ऑडियो जोड़ें: फिर से एनकोड करें

यदि आपका आउटपुट मूल स्वरूपों को पसंद नहीं करता है, या यदि आप प्रारूप बदलना चाहते हैं तो आप एन्कोडर निर्दिष्ट कर सकते हैं:

ffmpeg -i video.avi -i audio.mp3 -c:v libx264 -c:a libvorbis -shortest output.mkv

मैन्युअल रूप से विशिष्ट स्ट्रीम चुनने के लिए

कभी-कभी डिफ़ॉल्ट स्ट्रीम चयन आपको वह परिणाम नहीं देगा जो आप चाहते हैं। इस उदाहरण video.mp4में वीडियो और ऑडियो है, और audio.m4aकेवल ऑडियो है। -mapसे वीडियो video.mp4और ऑडियो चुनने के लिए उपयोग करें audio.m4a:

ffmpeg -i video.mp4 -i audio.m4a -map 0:v -map 1:a -c copy -shortest output.mp4
  • -map 0:v- इनपुट से 0(पहला इनपुट, जो है video.mp4) video स्ट्रीम (एस) चुनें।
  • -map 1:a- इनपुट से 1(दूसरा इनपुट, जो है audio.m4a) audio स्ट्रीम चुनें ।

दो ऑडियो इनपुट को एक में मिलाना / जोड़ना

से वीडियो लें video.webm, और ऑडियो को संयोजित करने के लिए एगर फिल्टर का उपयोग करें video.webmऔर audio.oga:

ffmpeg -i video.webm -i audio.oga -filter_complex \
"[0:a][1:a]amerge=inputs=2[a]" \
-map 0:v -map "[a]" -c:v copy -c:a libvorbis -ac 2 -shortest out.webm

मूक ऑडियो उत्पन्न करें

आप एक मूक ऑडियो स्ट्रीम बनाने के लिए aullsrc फ़िल्टर का उपयोग कर सकते हैं । फ़िल्टर आपको वांछित चैनल लेआउट (मोनो, स्टीरियो, 5.1, आदि) और नमूना दर चुनने की अनुमति देता है।

ffmpeg -i video.mp4 -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 \
-c:v copy -shortest output.mp4

और देखें


5
यह मेरे लिए पहले काम नहीं करता था, लेकिन -map 0:0 -map 1:0इसके बजाय -map 0 -map 1मेरे लिए चाल चली। धन्यवाद!
योनिक्स

यह शुरुआत में एक खाली फ्रेम सम्मिलित करता है।
लेनार होयट

मैं इस आदेश की कोशिश है, लेकिन मैं वीडियो ऑडियो खो देते हैं। मेरा वीडियो प्रारूप mp4 है
एलन 3

@ Allan.Chan मूल प्रश्न वीडियो इनपुट से ऑडियो नहीं चाहता था, लेकिन मैंने एक और उदाहरण जोड़ा: एक अन्य ऑडियो इनपुट उदाहरण को मिलाते / मिलाते हुए देखें ।
6

-shortestविकल्प के बिना 1 समाधान ने मेरे लिए बेहतर काम किया।
एमएमजे

24

एमपी 3 संगीत wav करने के लिए

ffmpeg -i music.mp3 music.wav

वीडियो फिट करने के लिए काट-छाँट करें

ffmpeg -i music.wav -ss 0 -t 37 musicshort.wav

मिक्स म्यूजिक और वीडियो

ffmpeg -i musicshort.wav -i movie.avi final_video.avi

3
जैसा कि मुझे याद है, अंतिम संस्करण पुराने ऑडियो को नए के साथ बदल देगा।
वेटलल

क्या पुराने ऑडियो के साथ नए ऑडियो को मर्ज करने का कोई विकल्प है?
इकबाल मलिक

1
@jwilson मैं इस आदेश की कोशिश की है, लेकिन मैं वीडियो ऑडियो खो देते हैं। मेरा वीडियो प्रारूप mp4
एलन

@ हार के लिए समाधान नहीं?
कीकनीत

20

यदि इनपुट वीडियो में कई ऑडियो ट्रैक हैं और आपको एक और जोड़ने की आवश्यकता है, तो निम्न कमांड का उपयोग करें:

ffmpeg -i input_video_with_audio.avi -i new_audio.ac3 -map 0 -map 1 -codec copy output_video.avi

-map 0पहली इनपुट फ़ाइल से सभी धाराओं को कॉपी (शामिल) करने का मतलब है ( input_video_with_audio.avi) और -map 1दूसरी इनपुट फ़ाइल से सभी धाराओं (इस मामले में एक) को शामिल करने का मतलब है ( new_audio.ac3)।


मुझे लगता है, यह उत्तर सबसे अच्छा उत्तर होना चाहिए।
नबी

3

इनमें से कोई भी समाधान मेरे लिए बहुत काम नहीं आया। मेरे मूल ऑडियो को अधिलेखित किया जा रहा था, या मुझे एक त्रुटि मिल रही थी जैसे अधिक जटिल 'एम्बर' उदाहरण के साथ "मेमोरी को मैप करने में विफल"। ऐसा लगता है कि मुझे जरूरत है -filter_complex amix।

ffmpeg -i videowithaudioyouwanttokeep.mp4 -i audiotooverlay.mp3 -vcodec copy -filter_complex amix -map 0:v -map 0:a -map 1:a -shortest -b:a 144k out.mkv

1

मेरे लिए कुछ भी काम नहीं किया (मुझे लगता है कि यह था क्योंकि मेरे इनपुट .mp4 वीडियो में कोई ऑडियो नहीं था) इसलिए मैंने पाया कि यह मेरे लिए काम कर रहा है:

ffmpeg -i input_video.mp4 -i balipraiavid.wav -map 0:v:0 -map 1:a:0 output.mp4


0

यदि आप FFMPEG के पुराने संस्करण का उपयोग कर रहे हैं और आप अपग्रेड नहीं कर सकते हैं तो आप निम्नलिखित कार्य कर सकते हैं:

ffmpeg -i PATH/VIDEO_FILE_NAME.mp4 -i PATH/AUDIO_FILE_NAME.mp3 -vcodec copy -shortest DESTINATION_PATH/NEW_VIDEO_FILE_NAME.mp4

ध्यान दें कि मैंने -vcodec का उपयोग किया है


0

Ffmpeg का उपयोग करके वीडियो में ऑडियो जोड़ने के लिए कोड।

यदि ऑडियो की लंबाई वीडियो की लंबाई से अधिक है तो यह ऑडियो को वीडियो की लंबाई तक काट देगा। यदि आप विडियो हटाना चाहते हैं तो cmd से निकालें।

String[] cmd = new String[]{"-i", selectedVideoPath,"-i",audiopath,"-map","1:a","-map","0:v","-codec","copy", ,outputFile.getPath()};

private void execFFmpegBinaryShortest(final String[] command) {



            final File outputFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/videoaudiomerger/"+"Vid"+"output"+i1+".mp4");




            String[] cmd = new String[]{"-i", selectedVideoPath,"-i",audiopath,"-map","1:a","-map","0:v","-codec","copy","-shortest",outputFile.getPath()};


            try {

                ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {
                    @Override
                    public void onFailure(String s) {
                        System.out.println("on failure----"+s);
                    }

                    @Override
                    public void onSuccess(String s) {
                        System.out.println("on success-----"+s);
                    }

                    @Override
                    public void onProgress(String s) {
                        //Log.d(TAG, "Started command : ffmpeg "+command);
                        System.out.println("Started---"+s);

                    }

                    @Override
                    public void onStart() {


                        //Log.d(TAG, "Started command : ffmpeg " + command);
                        System.out.println("Start----");

                    }

                    @Override
                    public void onFinish() {
                        System.out.println("Finish-----");


                    }
                });
            } catch (FFmpegCommandAlreadyRunningException e) {
                // do nothing for now
                System.out.println("exceptio :::"+e.getMessage());
            }


        }

क्या है Environment.getExternalStorageDirectory().getAbsolutePath()+"/videoaudiomerger/"+"Vid"+"output"+i1+".mp4");?
कीकेनेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.