जवाबों:
अपनी स्ट्रीम चुनने के लिए -map
विकल्प का उपयोग करें । डिफ़ॉल्ट स्ट्रीम चयन केवल प्रत्येक स्ट्रीम प्रकार में से एक का चयन करेगा, इसलिए -map
इसका उपयोग करना होगा।
ffmpeg -i video.mkv -i audio.mp3 -map 0:v -map 0:a:0 -map 1:a \
-metadata:s:a:0 language=eng -metadata:s:a:1 language=sme -codec copy \
-shortest output.mkv
0:v
- 0
पहले इनपुट को संदर्भित करता है जो है video.mkv
। v
इसका मतलब है "का चयन करें वीडियो स्ट्रीम प्रकार"।
0:a:0
- 0
पहले इनपुट को संदर्भित करता है जो है video.mkv
। a
इसका मतलब है "ऑडियो स्ट्रीम प्रकार का चयन करें"। अंतिम 0
इस इनपुट से पहली ऑडियो स्ट्रीम को संदर्भित करता है। यदि केवल 0:a
उपयोग किया जाता है, तो सभी वीडियो स्ट्रीम मैप किए जाएंगे।
1:a
- 1
दूसरे इनपुट को संदर्भित करता है जो है audio.mp3
। a
इसका मतलब है "ऑडियो स्ट्रीम प्रकार का चयन करें"।
-codec copy
सांकेतिक शब्दों में बदलना के बजाय धारा (पुन: mux) को कॉपी करेगा । यदि आपको एक विशिष्ट ऑडियो कोडेक की आवश्यकता है, तो आपको -c:v copy
(वीडियो रखने के लिए) निर्दिष्ट करना चाहिए और फिर, उदाहरण के लिए, -c:a libmp3lame
एमपी 3 को ऑडियो स्ट्रीम को फिर से एनकोड करना होगा।
-shortest
सबसे छोटा इनपुट समाप्त होने पर आउटपुट समाप्त हो जाएगा।
ffmpeg -i vid.mkv -i aud.mp3 -filter_complex "[0:a][1:a]amerge=inputs=2[a]" \
-map 0:v -map "[a]" -c:v copy -c:a aac -strict experimental -b:a 192k -ac 2 \
-shortest out.mp4
amerge
फ़िल्टर का उपयोग किया जाता है, इसलिए ऑडियो को इस उदाहरण में कॉपी नहीं किया जा सकता है।-codec copy
, लेकिन मैंने तय किया कि (ffmpeg के अलग-अलग संस्करण), जो दूसरा मुद्दा मेरे पास था -map
, उसने गलत धाराओं की शिकायत की।
-map 0:v -map 1:a
। मुझे लगता है कि इसका मतलब यह है कि पहली फ़ाइल (video.mkv) से वीडियो ले लो और फिर दूसरी फ़ाइल (audio.mp4) से ऑडियो ले लो output.mkv बनाने के लिए ... सुनिश्चित नहीं है कि इसके लिए क्या -map 0:a:0
है। मैंने इसे बाहर कर दिया और मुझे वे परिणाम मिले जो मैं चाहता था।