लिनक्स कमांड ऑडियो फाइलों को संक्षिप्त करने और उन्हें ओग में आउटपुट करने के लिए


10

कई ऑडियो फाइलों को संक्षिप्त करने और उन्हें एक ओग (और / या एमपी 3) के रूप में आउटपुट करने के लिए मुझे किस कमांड-लाइन टूल की आवश्यकता है?

यदि आप ओग को संक्षिप्त और आउटपुट करने के लिए पूरी कमांड प्रदान कर सकते हैं, तो यह भयानक होगा।

संपादित करें : इनपुट फ़ाइलें (मेरे मामले में, वर्तमान में) wmaप्रारूप में हैं, लेकिन आदर्श रूप से यह पर्याप्त रूप से लचीला होना चाहिए कि लोकप्रिय प्रारूपों की एक विस्तृत श्रृंखला का समर्थन करें।

Edit2 : बस स्पष्ट करने के लिए, मैं एक निश्चित निर्देशिका में सभी wma s को मर्ज नहीं करना चाहता , मैं सिर्फ एक में 2 या 3 फ़ाइलों को संक्षिप्त करना चाहता हूं।

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


1
आपको किस इनपुट प्रारूप के लिए समर्थन की आवश्यकता है?
जॉन टी

सिद्धांत रूप में, आप इन सभी आदेशों को एक दूसरे के बीच आउटपुट करने के लिए ट्विक कर सकते हैं। लेकिन व्यावहारिक रूप से, यह काम करने के लिए एक दर्द है, और असफल होने पर डिबग करने के लिए एक दर्द है। अस्थायी फ़ाइलें करने के लिए व्यावहारिक तरीके हैं। मेरी पसंदीदा विधि mktemp -d /tmp/descriptive_name.XXXXXXएक जानकारीपूर्ण नाम के साथ एक अस्थायी निर्देशिका बनाने के लिए उपयोग करना है, फिर मेरे सभी अस्थायी फ़ाइलों को वहां संसाधित करें, फिर आरएम-आर अस्थायी अस्थायी के बाद।
रयान सी। थॉम्पसन

बस स्पष्ट करने के लिए, एक कमांडलाइन में निर्दिष्ट करके, निर्देशिका में सभी wma के लिए काम करने वाली कोई भी चीज़ *.wma, निश्चित रूप से एक छोटी सूची के लिए काम करेगी जैसे 1.wma 2.wma 3.wma 4.wma(5.wma, 6.wma, और 7.wma को छोड़कर), बस उन्हें सूचीबद्ध करके। जैसे कि (उपयोग करने के बजाय *.wma)।
क्वैकोट क्वोटोटे

जवाबों:


9

यहाँ मेरा सुझाव है: नामांकित पाइप के साथ जुड़ा हुआ mplayer और oggenc का उपयोग करें ।

  • mplayerऑडियो को डीकोड करने के लिए उपयोग करें । यह ऑडियो (और वीडियो) प्रारूपों की एक विस्तृत विविधता को वापस खेल सकता है, और यह कई फाइलें भी खेल सकता है।

  • oggencऑडियो को ऑग वॉर्बिस को एनकोड करने के लिए उपयोग करें ।

  • एक अस्थायी फ़ाइल की आवश्यकता को समाप्त करने के लिए, एनकोडर और डिकोडर के बीच डेटा स्थानांतरित करने के लिए एक नामित पाइप का उपयोग करें ।

एक स्क्रिप्ट में लाना:

#!/bin/sh
# Usage: ./combine2ogg destination.ogg source1.wma source2.wma ...
# Requires: mplayer, oggenc
destination="$1"
shift
readpipe="$destination.tmpr"
writepipe="$destination.tmpw"
mkfifo "$readpipe"
mkfifo "$writepipe"
cat "$writepipe" > "$readpipe" &
mplayer -really-quiet -slave -nolirc -vc null -vo null -ao "pcm:fast:file=$writepipe" "$@" &
oggenc --quiet -o "$destination" "$readpipe"
rm -f "$readpipe"
rm -f "$writepipe"

व्याख्या की:

  1. पहले कमांड लाइन पैरामीटर से गंतव्य फ़ाइल नाम लें।
  2. केवल स्रोत फ़ाइल नामों को छोड़कर, पहले कमांड लाइन पैरामीटर निकालें।
  3. से पढ़ने के लिए oggenc के लिए एक पाइप के लिए एक नाम बनाएँ।
  4. लिखने के लिए mplayer के लिए एक पाइप के लिए एक नाम बनाएँ
  5. पाइप बनाएं।
  6. रीडपीप को राइटपाइप को लगातार डंप करने के लिए बिल्ली का उपयोग करें (यह उन मुद्दों से बचने में मदद करता है जहां मेपल समाप्त हो सकता है, लेकिन ऑगेंसे को यह सोचने से रोकता है कि ऐसा होने पर ऐसा किया जाता है)
  7. Mplayer का उपयोग करके स्रोत फ़ाइलों से ऑडियो को डीकोड करें। -really-quiet -slave -nolircसंदेशों को अक्षम करने और कीबोर्ड या रिमोट को न पढ़ने के लिए विकल्प मौजूद हैं। -vc null -vo nullवीडियो एन्कोडिंग और आउटपुट को अक्षम करने के लिए विकल्प हैं। -aoविकल्प यह उत्पादन के लिए नामित किया गया लिखने पाइप के लिए WAV प्रारूप में ऑडियो निर्देशित करता है।
  8. जबकि पिछली कमांड चल रही है, साथ ही ओग का उपयोग करते हुए ओग में नामित रीड पाइप से एक साथ एनकोड करें।
  9. नामित पाइप निकालें।

सुधार करने के लिए बाईं ओर स्टफ: यदि कमांड में से कोई एक (उपयोग set -e) विफल रहता है, तो स्क्रिप्ट को जल्दी समाप्त करना , लेकिन फिर भी पंद्रह को ठीक से साफ करना (आवश्यक संकेतों को फँसाना)।


केवल "मामूली" समस्या फ़ाइलों के बीच एक क्लिक आवाज है
Hasen

@ जेसेन जे: अगर आप परफेक्ट चाहते हैं, तो ऑडेसिटी या किसी अन्य वेव-एडिटर का उपयोग करें। यदि आप क्लिक के स्रोत को ट्रैक कर सकते हैं, तो आप अपराधी पर एक बग्रेपोर्ट दाखिल कर सकते हैं।
क्विकोट क्विकोट करें

15

SoX बड़ी संख्या में ऑडियो प्रारूपों को संभाल सकता है, यह इस बात पर निर्भर करता है कि यह किस लाइब्रेरी के खिलाफ संकलित है, और एक साधारण प्रोग्राम लाइन के साथ फ़ाइलों को संक्षिप्त कर सकता है

sox file1.wav file2.mp3 file3.flac outfile.ogg

मेरा मानना ​​है कि यह केवल तभी काम करता है जब स्रोत ऑडियो फ़ाइलों में सभी समान चैनल होते हैं, लेकिन मैंने इसका परीक्षण नहीं किया है।

जहाँ तक मुझे पता है, SoX के पास .wma फ़ाइलों के लिए शून्य समर्थन है, इसलिए कम से कम उन फ़ाइलों को ffmpeg जैसी किसी चीज़ के साथ परिवर्तित करना संभवत: अपरिहार्य है।

ffmpeg -i infile.wma outfile.wav

2
AFAIK sox केवल उसी तरह काम करता है यदि सभी फ़ाइलों में समान चैनल, नमूना दर, और बिट गहराई है; अन्यथा आपको सभी के लिए निर्दिष्ट करना होगा। मुझे नहीं पता था कि यह एन्कोडेड स्वरूपों को भी डिकोड करेगा, लेकिन मुझे लगता है कि मैं इसके साथ नहीं रहा हूं।
क्वैकोटे

3

मैं ffmpeg का उपयोग करेगा । अर्थोपाय अग्रिम vorbis करने के लिए अर्थोपाय अग्रिम कन्वर्ट करने के लिए:

ffmpeg -i sample.wma -acodec vorbis -aq 100 sample.ogg

या mp3:

ffmpeg -i input.wma -acodec libmp3lame output.mp3

एमपी 3 कन्वर्ट के लिए आपको लंगड़ा स्थापित करना होगा। sudo apt-get install lame libmp3lame0

बिल्ली, तो कन्वर्ट करने के लिए अच्छी तरह से काम नहीं लगता, हालांकि आप वेब पर बहुत सारे संदर्भ यह कहते हुए पा सकते हैं कि आप कुछ ऐसा कर सकते हैं cat *.wma | ffmpeg -i - -acodec ...- यह मेरी मशीन पर काम नहीं करता है - केवल पहली फ़ाइल संसाधित हो जाती है। Ffmpeg के लिए एक 'कॉपी' कोडेक है, लेकिन इससे बहुत फर्क नहीं पड़ता।

पहले ffmpeg के साथ कन्वर्ट कर, फिर बिल्ली * .ogg> output.ogg ने मेरे लिए काम किया।


1
ठीक है, संघ के बारे में क्या?
hasen

उसके लिए माफ़ करना! मेरे अतिरिक्त पढ़ें।
डेवपरिलो

Ffmpeg के बारे में इतना निश्चित नहीं ... WMA डिकोडर के रूप में ठीक है, लेकिन OGG एनकोडर के बारे में बहुत सारी शिकायतें। कम से कम -acodec libvorbisffmpeg के अंतर्निहित एनकोडर से बचने के लिए उपयोग करें।
क्विक्सोट क्विकोट करें

3

ऑडियो फ़ाइलों को सुरक्षित और ट्रांसकोड करने के लिए, यह वह वर्कफ़्लो है जिसका आप अनुसरण करना चाहते हैं:

  1. WAV / PCM डेटा के लिए इनपुट ऑडियो फ़ाइलों को डीकोड करें,
  2. कॉनवेटनेट WAV,
  3. ऑडियो कोडेक फ़ाइल आउटपुट के लिए WAV एनकोड करें।

इन चरणों में प्रसंस्करण WAV डेटा पर संगति करता है, जो कम से कम नुकसान से निपटने के लिए सबसे आसान है। और चूंकि आप किसी भी तरह से ट्रांसकोड करना चाहते हैं, तो आपको इस प्रक्रिया में कहीं WAV को डिकोड करना होगा; साथ ही इसका लाभ उठा सकते हैं।

मेरे द्वारा सुझाए गए चरण यहां दिए गए हैं। हम ffmpegडिकोडिंग के लिए उपयोग करेंगे , soxसंघनन के लिए, और oggencएन्कोडिंग के लिए। आप किसी भी कदम के लिए अन्य उपकरणों को स्थानापन्न कर सकते हैं - mencoderऔर अन्य डिकोडर के रूप में ठीक काम करते हैं, और ओग को एनकोड करने वाले किसी भी उपकरण को एनकोडर के रूप में इस्तेमाल किया जा सकता है - हालांकि मुझे लगता है कि आपके लिए बेहतर टूल खोजने के लिए आपको मुश्किल से दबाया जाएगा sox। संयोजन।

  1. find *.wma -exec ffmpeg -i {} outfile.{}.wav \;
    (यह ffmpeg -i infile.wma outfile.infile.wmaवर्तमान निर्देशिका में प्रत्येक WMA फ़ाइल पर चलता है )

  2. sox outfile* all.wav
    (नोट outfileवही उपसर्ग है जिसे हमने चरण 1 में आउटपुट फाइल दिया था)

  3. oggenc all.wav all.ogg आप शायद यहाँ कुछ गुणवत्ता सेटिंग्स चाहते हैं, लेकिन यह सभ्य गुणवत्ता की चूक देगा। मुझे ऐसे परिणाम नहीं मिले जो मुझे पसंद थे ffmpeg, लेकिन आप इसे पसंद कर सकते हैं, इसलिए मैंने नीचे ffmpeg के साथ एक उदाहरण शामिल किया है।

ध्यान दें कि soxकमांड तब तक ठीक से काम नहीं करेगा जब तक कि सभी WAV फाइलें एक ही प्रारूप की न हों - यदि कुछ 22kHz की हैं और कुछ 44.1kHz की हैं, उदाहरण के लिए, आपको soxकमांडलाइन स्विच के माध्यम से उन्हें पहचानने की आवश्यकता है , और निर्दिष्ट करें कि आप कौन सा प्रारूप चाहते हैं। उत्पादन में, मैं किसी भी कमांडलाइन उपकरण को नहीं जानता, जैसे soxकि समवर्ती चरण के लिए सक्षम । आप संभवतः चरण 1 में एक कच्चे पीसीएम प्रारूप में आउटपुट कर सकते हैं और catचरण 2 के लिए उपयोग कर सकते हैं , लेकिन यह केवल तभी काम करेगा जब वे एक ही प्रारूप में हों, और आपको अपने डिकोडर और एनकोडर दोनों के लिए अत्यंत विशिष्ट होने की आवश्यकता होगी प्रारूप वे उम्मीद करनी चाहिए।

Ffmpeg के साथ एन्कोडिंग: 'नेट शिकायत के चारों ओर बहुत सारे पोस्ट जो कि ffmpeg के बिल्डिन वॉर्बिस एनकोडर के लिए बहुत अच्छा नहीं है। यदि आपका संस्करण libvorbis समर्थन के साथ बनाया गया है, तो -acodec libvorbisइसके बजाय उपयोग करें । नमूना कमांडलाइन:

ffmpeg -i all.wav -acodec libvorbis -ac 2 -ab 128k all.ogg

1

.Ogg फ़ाइलों के लिए काम नहीं करेंगे, लेकिन mp3wrap कई .mp3 फ़ाइलों को एक फ़ाइल में रख सकता है। तो कमांड लाइन से, आप ऐसा कुछ कर सकते हैं

for FILE in *.wma; do ffmpeg -i "$FILE" "`basename "$FILE" .wma`.mp3"; done
mp3wrap bigmp3_MP3WRAP.mp3 *.mp3

यह आपकी सभी .wma फ़ाइलों को .mp3 में बदलने के लिए ffmpeg का उपयोग करेगा , और फिर सभी .mp3 फ़ाइलों को एक ही फ़ाइल में मर्ज कर देगा।


1

Mencoder अस्थायी फ़ाइलों के बिना वीडियो को ट्रांसकोड और ट्रांसकोड कर सकता है ( यहाँ तुच्छ उदाहरण )। वहाँ एक स्क्रिप्ट कहीं के आसपास चल रही है जिसे एकॉनवर्ट कहा जाता है जो मेन्सोडर को ऑडियो-ओनली कर देता है (जो आमतौर पर इसे करने से मना कर देता है)। इन दो चीजों को संयुक्त रूप से ऐसा लगता है कि वे आपकी आवश्यकताओं को पूरा करेंगे।

संपादित करें: मुझे aconvert.sh मिला। दुर्भाग्य से, यह केवल एक ऑडियो फ़ाइल को बदलने के लिए डिज़ाइन किया गया है। लेकिन यहाँ कोड वैसे भी है, अगर कोई भी इसका उपयोग एक कमांड लाइन को तैयार करने के लिए करना चाहता है जो कई ऑडियो फ़ाइलों को परिवर्तित करता है।

#!/bin/sh

# Author: Jonas Jermann
# Description: A hack to allow mencoder to encode from an audio only file

if [ "$1" = "" ]; then
    echo "Usage: $0 <\"input file\"> <\"output file\"> <\"options\">"
    exit 0
fi

options=${3:-"-oac mp3lame"}

mencoder -demuxer rawvideo -rawvideo w=1:h=1 -ovc copy -of rawaudio -endpos `mplayer -identify $1 -frames 0 2>&1 | grep ID_LENGTH | cut -d "=" -f 2` -audiofile $1 -o $2 $options $1


0

सोचा था कि मैं अपना जवाब दे दूं। यह शायद सबसे सुंदर तरीका नहीं है, लेकिन यह वही है जो मैं चाहता था।

चरण 1: ogg में कनवर्ट करें (उपयोग करता है mplayer, pacplऔर ruby, सभी मुफ्त डेबियन रेपो से उपलब्ध हैं। I

#! /usr/bin/ruby

ARGV.each do |target|
  file_ext = target.scan(/\.\w*$/)[0]
  name = target.sub(file_ext, "")

  `mplayer -novideo -ao pcm:file="tmp.wav" "#{target}"`
  `pacpl -t ogg --outfile "#{name}" tmp.wav`
  `rm tmp.wav`
end

चरण 2: कॉन्टेक्ट ओग फ़ाइल

cat *ogg > big-file.ogg

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.