SoX dapat menangani sejumlah besar format audio, bergantung pada pustaka apa yang dikompilasi, dan dapat menggabungkan file dengan baris perintah sederhana
sox file1.wav file2.mp3 file3.flac outfile.ogg
Saya yakin ini hanya berfungsi jika semua file audio sumber memiliki jumlah saluran yang sama, tetapi saya belum mengujinya.
Sejauh yang saya tahu, SoX tidak memiliki dukungan untuk file .wma, jadi mengonversi setidaknya file tersebut dengan sesuatu seperti ffmpeg terlebih dahulu mungkin tidak dapat dihindari.
ffmpeg -i infile.wma outfile.wav
Inilah saran saya:Gunakan mplayer dan oggenc terhubung dengan pipa bernama.
-
Gunakan
mplayer
untuk memecahkan kode audio. Ini dapat memutar ulang berbagai format audio (dan video), dan juga dapat memutar banyak file. -
Gunakan
oggenc
untuk menyandikan audio ke Ogg Vorbis. -
Untuk menghilangkan kebutuhan akan file sementara, gunakan pipa bernama untuk mentransfer data antara pembuat enkode dan dekoder.
Memasukkannya ke dalam skrip:
#!/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" "[email protected]" &
oggenc --quiet -o "$destination" "$readpipe"
rm -f "$readpipe"
rm -f "$writepipe"
Dijelaskan:
- Ambil nama file tujuan dari parameter baris perintah pertama.
- Hapus parameter baris perintah pertama, hanya menyisakan nama file sumber.
- Buat nama pipa untuk dibaca oleh oggenc.
- Buat nama pipa untuk ditulisi mplayer
- Buat pipa.
- Gunakan cat untuk membuang pipa tulis ke pipa baca secara terus-menerus (ini membantu menghindari masalah di mana mplayer dapat dihentikan, tetapi mencegah oggenc berpikir bahwa ini sudah selesai saat ini terjadi)
- Mendekodekan audio dari file sumber menggunakan mplayer. Opsi
-really-quiet -slave -nolirc
apakah ada untuk menonaktifkan pesan dan membuatnya tidak membaca keyboard atau remote. Opsi-vc null -vo null
apakah ada untuk menonaktifkan penyandian dan keluaran video.-ao
opsi mengarahkannya untuk mengeluarkan audio dalam format WAV ke pipa tulis bernama. - Saat perintah sebelumnya berjalan, enkodekan secara bersamaan dari pipa baca bernama ke Ogg menggunakan oggenc.
- Hapus pipa bernama.
Hal-hal ke kiri untuk ditingkatkan:Mengakhiri skrip lebih awal jika salah satu perintah gagal (gunakan set -e
), tetapi masih membersihkan fifo dengan benar (memerangkap sinyal yang diperlukan).
Saya akan menggunakan ffmpeg. Untuk mengonversi wma ke ogg vorbis coba:
ffmpeg -i sample.wma -acodec vorbis -aq 100 sample.ogg
atau mp3:
ffmpeg -i input.wma -acodec libmp3lame output.mp3
Anda perlu menginstal lame untuk konversi mp3. sudo apt-get install lame libmp3lame0
Cat, lalu konversi tampaknya tidak berfungsi dengan baik, meskipun Anda dapat menemukan banyak referensi di web yang mengatakan bahwa Anda dapat melakukan sesuatu seperti cat *.wma | ffmpeg -i - -acodec ...
- ini tidak berfungsi di mesin saya - hanya file pertama yang diproses. Ada codec 'salin' untuk ffmpeg, tetapi tidak membuat banyak perbedaan.
Melakukan konversi dengan ffmpeg terlebih dahulu, lalu cat *.ogg> output.ogg berhasil untuk saya.