FFmpeg का उपयोग करके वीडियो में ऑडियो जोड़ें


26

मैं FFmpeg का उपयोग करके एक वीडियो में ध्वनि जोड़ने की कोशिश कर रहा हूं, लेकिन किसी कारण से, जब मैं परिणामी फ़ाइल खेलता हूं, तो इसमें कोई ध्वनि नहीं होती है। मैंने इसे एक एएसी ऑडियो फ़ाइल के साथ करने की कोशिश की, साथ ही साथ -acodec copyइसे बाहर छोड़ने और इसे एक wav फ़ाइल देने की कोशिश की।

यहाँ पूरा उत्पादन है:

C:\Users\SM-Audio\Desktop>ffmpeg -i PrintingCDs.mp4 -i AudioPrintCDs.mp3 -acodec
 copy -vcodec copy PrintCDs1.mp4
ffmpeg version N-48886-g5ce023b Copyright (c) 2000-2013 the FFmpeg developers
  built on Jan 14 2013 19:16:33 with gcc 4.7.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libg
sm --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --e
nable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --e
nable-libspeex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --en
able-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable
-libxavs --enable-libxvid --enable-zlib --enable-filter=frei0r
  libavutil      52. 14.100 / 52. 14.100
  libavcodec     54. 89.100 / 54. 89.100
  libavformat    54. 59.107 / 54. 59.107
  libavdevice    54.  3.102 / 54.  3.102
  libavfilter     3. 32.100 /  3. 32.100
  libswscale      2.  1.103 /  2.  1.103
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'PrintingCDs.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2013-05-01 13:35:52
  Duration: 00:02:35.57, start: 0.000000, bitrate: 585 kb/s
    Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 1024x
768 [SAR 1:1 DAR 4:3], 457 kb/s, 10 fps, 10 tbr, 30k tbn, 30 tbc
    Metadata:
      creation_time   : 2013-05-01 13:35:53
      handler_name    : Mainconcept MP4 Video Media Handler
    Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 22050 Hz, mono, fltp, 126
kb/s
    Metadata:
      creation_time   : 2013-05-01 13:35:53
      handler_name    : Mainconcept MP4 Sound Media Handler
[mp3 @ 003dd6c0] max_analyze_duration 5000000 reached at 5015510 microseconds
Input #1, mp3, from 'AudioPrintCDs.mp3':
  Metadata:
    encoder         : Lavf54.59.107
  Duration: 00:02:36.21, start: 0.000000, bitrate: 64 kb/s
    Stream #1:0: Audio: mp3, 44100 Hz, mono, s16p, 64 kb/s
File 'PrintCDs1.mp4' already exists. Overwrite ? [y/N] y
Output #0, mp4, to 'PrintCDs1.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    encoder         : Lavf54.59.107
    Stream #0:0(eng): Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1024x768 [S
AR 1:1 DAR 4:3], q=2-31, 457 kb/s, 10 fps, 30k tbn, 30k tbc
    Metadata:
      creation_time   : 2013-05-01 13:35:53
      handler_name    : Mainconcept MP4 Video Media Handler
    Stream #0:1(eng): Audio: aac ([64][0][0][0] / 0x0040), 22050 Hz, mono, 126 k
b/s
    Metadata:
      creation_time   : 2013-05-01 13:35:53
      handler_name    : Mainconcept MP4 Sound Media Handler
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 1555 fps=0.0 q=-1.0 Lsize=   11133kB time=00:02:35.57 bitrate= 586.2kbits
/s
video:8674kB audio:2408kB subtitle:0 global headers:0kB muxing overhead 0.459569
%

ध्यान दें कि एक अलग mp4 ऑडियो-केवल फ़ाइल के साथ एम्बेडेड ऑडियो ट्रैक के बिना एक mp4 वीडियो-केवल फ़ाइल को मर्ज करने के मामले में प्रश्न में कमांड पूरी तरह से पर्याप्त है।
वडज़िम

जवाबों:


50

डिफ़ॉल्ट रूप से, FFmpeg केवल एक ऑडियो और एक वीडियो स्ट्रीम लेगा। आपके मामले में यह केवल पहली फ़ाइल से लिया गया है।

आपको धाराओं को सही ढंग से मैप करने की आवश्यकता है:

ffmpeg -i input.mp4 -i input.mp3 -c copy -map 0:v:0 -map 1:a:0 output.mp4

कुछ नोट:

  • ऑर्डर मैपिंग विकल्प निर्धारित करते हैं कि इनपुट से कौन सी स्ट्रीम आउटपुट पर मैप की जाती हैं।
  • 0:v:0पहली फ़ाइल का पहला वीडियो स्ट्रीम है और 1:a:0दूसरी फ़ाइल का पहला ऑडियो स्ट्रीम है। v/ aसख्ती से आवश्यक नहीं हैं, लेकिन इस मामले में अपने इनपुट फ़ाइलें एकाधिक स्ट्रीम शामिल, कि स्पष्ट करने में मदद करता है। मैपिंग के बारे में अधिक जानकारी FFmpeg Wiki पर पाई जा सकती है ।
  • यदि आपकी ऑडियो स्ट्रीम वीडियो फ़ाइल, या इसके विपरीत से अधिक लंबी है, तो आप -shortestविकल्प का उपयोग कर सकते हैं जब दो छोरों के छोटे होने पर ffmpeg रूपांतरण को रोक दें।
  • -c copyऑडियो और वीडियो धाराओं को कॉपी करता है। इसका मतलब है कि प्रक्रिया तेज होगी और गुणवत्ता समान होगी। लेकिन जब मौजूदा वीडियो फ़ाइल में WAV ऑडियो जोड़ते हैं, कहते हैं, तो पहले उस ऑडियो को संपीड़ित करना बेहतर होगा। उदाहरण के लिए:

    ffmpeg -i input.mp4 -i input.wav -c:v copy -map 0:v:0 -map 1:a:0 -c:a aac -b:a 192k output.mp4
    

    यहां, हम केवल वीडियो स्ट्रीम ( -c:v copy) की प्रतिलिपि बनाते हैं , और ऑडियो स्ट्रीम -c:a aacको 192 kBit / s पर ffmpeg में निर्मित AAC एन्कोडर ( ) के साथ फिर से एनकोड करते हैं ।

  • यदि आपका आउटपुट स्वरूप किसी विशेष कोडेक (जैसे, MP4, या AAC से AVI, आदि को जोड़ने पर) का समर्थन नहीं करता है, तो पुन: एन्कोडिंग की भी आवश्यकता होती है।

1
बहुत-बहुत धन्यवाद, जो सही काम करता है। क्या है -c copy? क्या वह आशुलिपि है -acodec copy -vcodec copy?
अर्लेन बीलर

1
हाँ, मूल रूप से यह सभी प्रकार की धाराओं को कॉपी करने के लिए कहता है - इसमें उपशीर्षक भी शामिल है।
slhck

1
जिज्ञासा से बाहर अगर ऑडियो या वीडियो की लंबाई समान नहीं है तो क्या होगा! क्या वीडियो समान रहता है और ऑडियो लंबाई वीडियो आकार के साथ स्वचालित रूप से मेल खाती है!
आकाश दुबे

1
@ आकाश ffmpeg हमेशा दो धाराओं के लंबे समय तक उपयोग करेगा और अंत में ब्लैक वीडियो या साइलेंट ऑडियो जोड़ेगा। जब तक आप -shortestविकल्प निर्दिष्ट नहीं करते हैं , उस स्थिति में सबसे छोटी धारा एन्कोडिंग प्रक्रिया को समाप्त कर देती है।
slhck

1
@AkashDubey यह है कि आप इसे कैसे उपयोग करते हैं, हाँ। कहीं भी -i <input>और आउटपुट फ़ाइल के बीच ।
slhck
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.