M4a फ़ाइलों का कॉनटैनेशन या तो बहुत लंबा है या बहुत छोटा है


0

मैं दो को समेटना चाहता हूं m4a फाइलें, एक 20:49 लंबी और दूसरी 10:23 लंबी। निम्नलिखित यह पन्ना , पहला विकल्प है:

ffmpeg -i 'concat:file1.m4a|file2.m4a' -c copy output.m4a

यह केवल पहली फ़ाइल को प्रोसेस करता है, उदा। मानक उत्पादन दिखाता है:

size=   10921kB time=00:20:48.69

और आउटपुट फ़ाइल पहली फ़ाइल की तरह 20 मिनट है।

दूसरा विकल्प है:

ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.m4a

कहा पे mylist.txt है:

file 'file1.m4a'
file 'file2.m4a'

यह कमांड मानक आउटपुट शो के रूप में दोनों फाइलों का उपयोग करता है:

size=   16339kB time=00:33:56.73

लेकिन अवधि गलत है, क्योंकि यह 31:42 होना चाहिए। इसके अलावा, आउटपुट फ़ाइल की अवधि 32:06 है जब ऑपरेटिंग सिस्टम (macOS) से खेला जाता है।

मैं अपनी अवधि का सम्मान करते हुए दो फ़ाइलों को संक्षिप्त करने के लिए FFMPEG कैसे प्राप्त कर सकता हूं?


का उपयोग करते हुए -c copy से m4a सेवा मेरे mp3 बकवास पैदा करने के लिए बाध्य है।
Eugen Rieck

आप सही कह रहे हैं, कमांड्स कॉपी करने में मेरी गलती थी। मैंने प्रश्न संपादित किया। मुझे libmp3lame के साथ एमपी 3 में परिवर्तित करने में समस्या थी, फिर सरलता के लिए कमांड को केवल m4a में बदल दिया। वास्तव में, आप जिस कमांड का उल्लेख करते हैं वह मेरे में विफल रहता है ffmpeg साथ में Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
mmorin

यदि यह सब m4a है, तो समस्या थोड़ी अधिक जटिल है: m4a में टाइमकोड होते हैं, जो शून्य पर शुरू हो भी सकते हैं और नहीं भी। concat इस पर विचार न करने के लिए डिमॉक्सर कुख्यात है। प्रसारण में हम कच्चे पीसीएम (या कुछ और जो टाइमस्टैम्प नहीं है) में परिवर्तित करते हैं, फिर कॉनकैट करते हैं, फिर अंतिम आउटपुट स्वरूप बनाते हैं। इस के समान ffmpeg -i file1,m4a -c:a pcm_s16le -f s16le file1.pcm ; ffmpeg -i file2,m4a -c:a pcm_s16le -f s16le file2.pcm ; cat file2.pcm >> file1.pcm ; ffmpeg -f s16le -i file1.pcm -c:a aac -b:a whatever -ac whatever output.m4a
Eugen Rieck

मैं पीसीएम को रूपांतरण ठीक कर सकता हूं और मुझे विश्वास है cat सिर्फ दो फाइलों को जोड़ रहा है। मुझे अंतिम आदेश के साथ त्रुटियां हो रही हैं और मैं नहीं ढूँढ सकता -b मैनुअल में। क्या आप इसका उदाहरण दे सकते हैं whatever अंतिम पंक्ति में
mmorin

-b:a ऑडियो बैंडविड्थ सेट करता है। कुछ इस तरह -b:a 96k (या 192 k) एक अच्छा प्रारंभिक बिंदु हो सकता है, -ac ऑडियो चैनलों की संख्या को परिभाषित करता है, इसलिए -ac 2 स्टीरियो के लिए काम करता है। आप सही कह रहे हैं, कि cat बस फ़ाइल को जोड़ता है - यह कच्चे पीसीएम का बड़ा लाभ है (जैसा कि .wav के विपरीत)।
Eugen Rieck

जवाबों:


1

फ़ाइलों का संघनन कभी-कभी बहुत सहज नहीं होता है - यह इस तथ्य के कारण है कि कई स्वरूपों में टाइमस्टैम्प होते हैं, जो उस फ़ाइल के निर्माण और संपादन इतिहास के आधार पर, शून्य पर शुरू नहीं हो सकते हैं, निरंतर हो सकते हैं आदि।

यह एक कारण है, ब्रॉडकास्ट वर्ल्ड फॉरमेट के नियम में, जिसे सिर्फ संक्षिप्त किया जा सकता है: MPEGTS (निरंतरता काउंटरों पर नजर रखने की आवश्यकता के साथ) या रॉ (कच्चे पीसीएम सम्मान। कच्चे h.264)

यदि रेनकोडिंग एक विकल्प है, तो मैं आपको अपनी मूल फाइलों को कच्चे पीसीएम में बदलने की सलाह देता हूं

ffmpeg -i file1.m4a -c:a pcm_s16le -ac 2 -ar 48000 -f s16le file1.pcm
ffmpeg -i file2.m4a -c:a pcm_s16le -ac 2 -ar 48000 -f s16le file2.pcm

यह 2 कच्चे पीसीएम फाइल बनाएगा, जिसमें 2 चैनल होंगे (स्टीरियो, -ac 2 ) प्रत्येक और 48KHz का एक नमूना दर ( -ar 48000 )

अब आप उन फ़ाइलों को संक्षिप्त कर सकते हैं, उदा। के जरिए cat file2.pcm >> file1.pcm - यह बिना किसी टाइमस्टैम्प वाली फ़ाइल का एक नया कच्चा प्रतिनिधित्व बनाता है, सिर्फ सादे ऑडियो नमूने।

एएसी में परिणाम को पुन: दर्ज करने के लिए, आप की तर्ज पर चलते हैं

ffmpeg -f s16le -ac 2 -ar 48000 -i file1.pcm -c:a aac -b:a 192K -ac 2 output.m4a

आइए इसे तोड़ते हैं:

  • सबसे पहले मैं ffmpeg को फॉर्मेट कच्चे पीसीएम (हस्ताक्षरित 16 बिट कम एंडियन) की फाइल खोलने के लिए कहता हूं -f s16le ) जिसमें 2 ऑडियो चैनल हैं ( -ac 2 ) 48KHz नमूना दर ( -ar 48000 ) और file1.pcm में संग्रहीत (सामान्य रूप से ffmpeg के साथ, मापदंडों का क्रम महत्वपूर्ण है)
  • एएसी के साथ फिर से लोड करने के लिए ( -c:a ) और 192Kbit / s की बैंडविड्थ -ba:a ) फिर से स्टीरियो में ( -ac 2 )
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.