В каких инструментах командной строки я нуждаюсь, чтобы связать несколько звуковых файлов и произвести их как один ogg (и/или mp3)?
Если бы можно обеспечить полную команду, чтобы связать и произвести к ogg, который был бы потрясающим.
Править: Входные файлы (в моем случае, в настоящее время) находятся в wma
формат, но идеально это должно быть достаточно гибко для поддержки широкого спектра популярных форматов.
Edit2: Просто для уточнения я не хочу объединять все wma
s в определенном каталоге, я просто хочу связать 2 или 3 файла в один.
Спасибо за предлагаемые решения, но они все, кажется, требуют создающих временных файлов, бы, если это возможно, вообще, я хотел бы избежать этого.
Вот мое предложение: Используйте mplayer и oggenc, соединенный с именованным каналом.
Использовать mplayer
декодировать аудио. Это может воспроизвести большое разнообразие аудио (и видео) форматы, и это также может играть несколько файлов.
Использовать oggenc
закодировать аудио к Ogg Vorbis.
Для избавления от необходимости временный файл используйте именованный канал для передачи данных между кодером и декодером.
Помещение этого в сценарий:
#!/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"
Объясненный:
-really-quiet -slave -nolirc
есть ли, чтобы отключить сообщения и заставить его не считать клавиатуру или удаленное. Опции -vc null -vo null
есть ли, чтобы отключить видео кодирование и произвести. -ao
опция направляет его для вывода аудио в формате WAV к именованному каналу записи.Материал к левому для улучшения: Завершение сценария рано, если один из сбоев команд (использование set -e
), но все еще правильно очищая FIFO (захватывают необходимые сигналы).
SoX может обработать большое количество форматов аудио, в зависимости от того, какие библиотеки он компилируется против и может связать файлы с простой командной строкой
sox file1.wav file2.mp3 file3.flac outfile.ogg
Я полагаю, что это только работает, если исходные звуковые файлы, у всех есть то же количество каналов, но я не протестировал это.
Насколько я знаю, SoX имеет нулевую поддержку .wma файлов, таким образом преобразовывание, по крайней мере, тех файлов с чем-то как ffmpeg сначала, вероятно, неизбежно.
ffmpeg -i infile.wma outfile.wav
Я использовал бы ffmpeg. Преобразовать wma в ogg vorbis попытка:
ffmpeg -i sample.wma -acodec vorbis -aq 100 sample.ogg
или mp3:
ffmpeg -i input.wma -acodec libmp3lame output.mp3
Вам будет нужен Ламе, установленный для mp3, преобразовывают. sudo apt-get install lame libmp3lame0
CAT, затем преобразуйте doen't, кажется, работают хорошо, хотя можно найти много ссылок в сети, говоря, что можно сделать что-то как cat *.wma | ffmpeg -i - -acodec ...
- это не работает над моей машиной - только первый файл обрабатывается. Существует кодек 'копии' для ffmpeg, но не имеет большого значения.
Выполнение преобразования с ffmpeg сначала, затем кошка *.ogg> output.ogg работала на меня.
-acodec libvorbis
избегать встроенного кодера ffmpeg. положительная сторона
– quack quixote
02.11.2009, 06:59
Чтобы связать и транскодировать звуковые файлы, это - рабочий процесс, за которым Вы хотите следовать:
Обработка на этих шагах выполняет конкатенацию на данных WAV, которые являются самыми легкими иметь дело с и наименее с потерями. И так как Вы хотите транскодировать так или иначе, необходимо будет декодировать к WAV где-нибудь в процессе; мог бы также использовать в своих интересах его.
Вот шаги, которые я рекомендую. Мы будем использовать ffmpeg
для декодирования, sox
для конкатенации, и oggenc
для кодирования. Вы могли заменить другими инструментами для любого шага- mencoder
и другие хорошо работают как декодер, и любой инструмент, который кодирует Ogg, может использоваться в качестве кодера - хотя я думаю, что Вам будет трудно находить лучший инструмент, чем sox
для конкатенации.
find *.wma -exec ffmpeg -i {} outfile.{}.wav \;
(это работает ffmpeg -i infile.wma outfile.infile.wma
на каждом файле WMA в текущем каталоге)
sox outfile* all.wav
(примечание outfile
тот же префикс, который мы дали выходным файлам на шаге 1),
oggenc all.wav all.ogg
Вы, вероятно, хотите некоторые качественные настройки здесь, но это даст достойные качественные значения по умолчанию. Я не получил результаты, с которыми я любил ffmpeg
, но можно предпочесть его, таким образом, я включал пример с ffmpeg ниже.
Обратите внимание что sox
команда не будет работать правильно, если все файлы WAV не будут тем же форматом - если некоторые - 22 кГц, и некоторые - 44.1 кГц, например, необходимо определить их к sox
через переключатели командной строки, и указывают, в каком формате Вы хотите вывод. Я не знаю инструментов командной строки как способные как sox
для шага конкатенации. Вы могли возможно произвести к необработанному формату PCM на шаге 1 и использовании cat
для шага 2, но это только работало бы, если бы они находятся в том же формате, и необходимо было бы быть чрезвычайно характерны и для декодера и для кодера относительно того, какой формат они должны ожидать.
Кодирование ffmpeg: много сообщений вокруг 'сети жалуется, что встроенный кодер Vorbis ffmpeg не очень хорош. Если Ваша версия создается с поддержкой libvorbis, использовать -acodec libvorbis
вместо этого. Демонстрационная командная строка:
ffmpeg -i all.wav -acodec libvorbis -ac 2 -ab 128k all.ogg
Не будет работать на .ogg файлы, но mp3wrap может связать несколько .mp3 файлов в единственный файл. Таким образом из командной строки, Вы могли сделать что-то вроде этого
for FILE in *.wma; do ffmpeg -i "$FILE" "`basename "$FILE" .wma`.mp3"; done
mp3wrap bigmp3_MP3WRAP.mp3 *.mp3
Это будет использовать ffmpeg, чтобы преобразовать все Ваши .wma файлы в .mp3 и затем объединить все .mp3 файлы в единственный файл.
Mencoder может связать и транскодировать видео без временных файлов (тривиальный пример здесь). Существует сценарий, плавающий вокруг где-нибудь названного aconvert, который обманывает 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
Это не могло бы быть точно, в чем Вы нуждаетесь, но это должно помочь http://bitzenbytes.com/index.php?name=PNphpBB2&file=viewtopic&t=6538&postdays=0&postorder=asc&sid=f87b364ddbae3ddd9417f5d10fae870c