SoX zvládne velké množství zvukových formátů v závislosti na knihovnách, s nimiž je kompilován, a dokáže zřetězit soubory pomocí jednoduchého příkazového řádku
sox file1.wav file2.mp3 file3.flac outfile.ogg
Věřím, že to funguje pouze v případě, že všechny zdrojové zvukové soubory mají stejný počet kanálů, ale toto jsem netestoval.
Pokud vím, SoX nemá nulovou podporu pro soubory .wma, takže převedení alespoň těchto souborů pomocí něčeho jako ffmpeg first je pravděpodobně nevyhnutelné.
ffmpeg -i infile.wma outfile.wav
Zde je můj návrh:Použijte mplayer a oggenc připojeno k pojmenovanému kanálu.
-
Použijte
mplayer
k dekódování zvuku. Dokáže přehrávat širokou škálu audio (a video) formátů a také může přehrávat více souborů. -
Použijte
oggenc
pro kódování zvuku do Ogg Vorbis. -
Chcete-li eliminovat potřebu dočasného souboru, použijte pro přenos dat mezi kodérem a dekodérem namedpipet.
Vložení do skriptu:
#!/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"
Vysvětleno:
- Převezměte název cílového souboru z prvního parametru příkazového řádku.
- Odstraňte první parametr příkazového řádku a ponechte pouze názvy zdrojových souborů.
- Vytvořte název kanálu, ze kterého bude oggenc číst.
- Vytvořte název kanálu, do kterého bude mplayer zapisovat
- Vytvořte potrubí.
- Použijte cat k nepřetržitému výpisu z kanálu pro zápis do readpipe (to pomůže vyhnout se problémům, při kterých může mplayer ukončit, ale zabrání tomu, aby si oggenc myslel, že je hotovo, když k tomu dojde)
- Dekódujte zvuk ze zdrojových souborů pomocí mplayeru. Možnosti
-really-quiet -slave -nolirc
jsou zde k deaktivaci zpráv a k tomu, aby nečetly klávesnici nebo dálkové ovládání. Možnosti-vc null -vo null
existují pro deaktivaci kódování a výstupu videa.-ao
volba jej nasměruje k výstupu zvuku ve formátu WAV do pojmenovaného zapisovacího kanálu. - Zatímco běží předchozí příkaz, současně zakódujte z pojmenovaného čtecího kanálu do Ogg pomocí oggenc.
- Odstraňte pojmenované kanály.
Věci doleva pro zlepšení:Předčasné ukončení skriptu, pokud některý z příkazů selže (použijte set -e
), ale stále řádně vyčistit fifo (zachyťte potřebné signály).
Použil bych ffmpeg. Chcete-li převést wma na ogg vorbis, zkuste:
ffmpeg -i sample.wma -acodec vorbis -aq 100 sample.ogg
nebo mp3:
ffmpeg -i input.wma -acodec libmp3lame output.mp3
budete muset nainstalovat lame pro převod mp3. sudo apt-get install lame libmp3lame0
Cat, then convert, zdá se, nefunguje dobře, i když na webu můžete najít spoustu odkazů, které říkají, že můžete udělat něco jako cat *.wma | ffmpeg -i - -acodec ...
- na mém počítači to nefunguje - zpracuje se pouze první soubor. Existuje kodek 'copy' pro ffmpeg, ale nedělá to velký rozdíl.
Nejprve jsem provedl konverzi pomocí ffmpeg a poté cat *.ogg> output.ogg.