Ffmpeg में, ऑडियो को रूपांतरित किए बिना केवल .mp4 वीडियो के ऑडियो में देरी कैसे करें?


44

मेरी .mp4 फ़ाइल में ऑडियो देरी -3840 ms है। मैंने इसे KMplayer में सिंक किया है, और मैं .mkv फ़ाइल बनाने के लिए MKVGUI का उपयोग नहीं करना चाहता। मुझे बस ऑडियो -3840 एमएस देरी करने की जरूरत है, बाकी सब कुछ बरकरार है।
Ffmpeg का उपयोग करके इसे पूरा करने के लिए सही कमांड क्या होगा?
आपकी सहायता का मुझ पर आभार होगा।

जवाबों:


72

यदि आपको वीडियो को 3.84 सेकंड तक देरी करने की आवश्यकता है , तो इस तरह से एक कमांड का उपयोग करें:

ffmpeg.exe -i "movie.mp4" -itsoffset 3.84 -i "movie.mp4" -map 1:v -map 0:a -c copy "movie-video-delayed.mp4"

यदि आपको 3.84 सेकंड में ऑडियो विलंबित करने की आवश्यकता है , तो इस तरह से एक कमांड का उपयोग करें:

ffmpeg.exe -i "movie.mp4" -itsoffset 3.84 -i "movie.mp4" -map 0:v -map 1:a -c copy "movie-audio-delayed.mp4"

सुनिश्चित करें, कि आपका ffmpeg बिल्ड बहुत पुराना नहीं है, 2012 की तुलना में नया पर्याप्त होगा।


व्याख्या

-itsoffset 3.84 -i "movie.mp4"

ऑप्शन की फ़ाइल में 3.84 सेकेंड तक सभी स्ट्रीमों के ऑफ़सेट टाइमस्टैम्प्स जो कि विकल्प (मूवी .mp4) का अनुसरण करते हैं।

-map 1:v -map 0:a

पहले इनपुट से दूसरे (विलंबित) इनपुट और ऑडियो स्ट्रीम से वीडियो स्ट्रीम लेता है - दोनों इनपुट बेशक एक ही फ़ाइल हो सकते हैं।

एक अधिक क्रिया विवरण यहां पाया जा सकता है:
http://alien.slackbook.org/blog/fixing-audio-sync-with-ffmpeg/


2
आप सभी ऑडियो ट्रैक्स में देरी करने के बजाय एक विशिष्ट ऑडियो ट्रैक कैसे चुनते हैं?
फ्रीडो

1
मानचित्र विकल्प की क्षमताओं का उपयोग करना । आपको पहली बार इनमें से किसी भी आदेश का उपयोग करके इनपुट फ़ाइल में वांछित ऑडियो स्ट्रीम के सूचकांक को खोजने की आवश्यकता है: ffprobe.exe "input_file.mp4"या ffmpeg.exe -i "input_file.mp4" मान लें कि विलंबित होने वाली ऑडियो स्ट्रीम का सूचकांक 2 है (यानी तीसरी धारा) और विलंबित इनपुट है दूसरा वाला (जैसा कि मेरे उदाहरण में)। केवल तीसरी धारा में देरी करने के लिए, दूसरा (देरी) इनपुट से पहले इनपुट और केवल एक ऑडियो स्ट्रीम से सभी अन्य धाराओं ले:-map 0:0 -map 0:1 -map 1:2
वीवर

मेरा मतलब यह नहीं है। इस मामले में मुझे अभी भी ffmpeg पर कॉल करना है और परिणामों को अनुक्रमित करने के लिए पार्स करना है। क्या कहने के लिए एक बराबर है -मैप eng
6

खैर, @Freedo, जैसा कि आपको पहले से ही सुपरयूजर. com/questions/639402/… में पहले ही सलाह दी जा चुकी है , आप जो सुझाव देते हैं, वह वास्तव में मेटाडेटा मानों का उपयोग करके धाराओं को निर्दिष्ट करके संभव है , उदाहरण के लिए: -map 1:m:language:eng हालांकि, ध्यान में रखते हुए, कि यह सभी धाराओं का चयन करेगा। कई ऑडियो और / या उपशीर्षक धाराओं सहित संभवतः मानदंड को संतुष्ट करना। आप stackoverflow.com/questions/46769419/… पर
बुनकर

1
AFAIK के -c copyबजाय का उपयोग किया जा सकता है -vcodec copy -acodec copy, और itsoffsetकेवल वीडियो को प्रभावित करता है, इसलिए शायद यह समान काम करेगा ?: ffmpeg -i "movie.mp4" -itsoffset 3.84 -c copy "movie-video-delayed.mp4"और इसके बजाय ऑडियो को विलंब करने के लिए केवल अवधि के लिए एक नकारात्मक संकेत जोड़ें -3.84:।
मलयेश्स

0

पहले मौन ऑडियो बनाएं:

ffmpeg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 3 silence_3_sec.mp3

फिर कॉनैट फाइलें:

ffmpeg -i "concat:silence_3_sec.mp3|input.mp3" -acodec copy out.mp3
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.