Команда Linux, чтобы связать звуковые файлы и произвести их к ogg

В каких инструментах командной строки я нуждаюсь, чтобы связать несколько звуковых файлов и произвести их как один ogg (и/или mp3)?

Если бы можно обеспечить полную команду, чтобы связать и произвести к ogg, который был бы потрясающим.

Править: Входные файлы (в моем случае, в настоящее время) находятся в wma формат, но идеально это должно быть достаточно гибко для поддержки широкого спектра популярных форматов.

Edit2: Просто для уточнения я не хочу объединять все wmas в определенном каталоге, я просто хочу связать 2 или 3 файла в один.

Спасибо за предлагаемые решения, но они все, кажется, требуют создающих временных файлов, бы, если это возможно, вообще, я хотел бы избежать этого.

10
задан 02.11.2009, 08:14

7 ответов

Вот мое предложение: Используйте 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"

Объясненный:

  1. Возьмите целевое имя файла от первого параметра командной строки.
  2. Удалите первый параметр командной строки, оставив только имена исходного файла.
  3. Создайте название канала для oggenc для чтения из.
  4. Создайте название канала для mplayer для записи в
  5. Создайте каналы.
  6. Используйте кошку для непрерывного дампа writepipe к readpipe (это помогает избежать проблем, где mplayer может завершиться, но препятствует тому, чтобы oggenc думал, что это сделано, когда это происходит),
  7. Декодируйте аудио от исходных файлов с помощью mplayer. Опции -really-quiet -slave -nolirc есть ли, чтобы отключить сообщения и заставить его не считать клавиатуру или удаленное. Опции -vc null -vo null есть ли, чтобы отключить видео кодирование и произвести. -ao опция направляет его для вывода аудио в формате WAV к именованному каналу записи.
  8. В то время как предыдущая команда работает, одновременно закодируйте от именованного канала чтения в Ogg с помощью oggenc.
  9. Удалите именованные каналы.

Материал к левому для улучшения: Завершение сценария рано, если один из сбоев команд (использование set -e), но все еще правильно очищая FIFO (захватывают необходимые сигналы).

9
ответ дан 07.12.2019, 12:34

SoX может обработать большое количество форматов аудио, в зависимости от того, какие библиотеки он компилируется против и может связать файлы с простой командной строкой

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

Я полагаю, что это только работает, если исходные звуковые файлы, у всех есть то же количество каналов, но я не протестировал это.

Насколько я знаю, SoX имеет нулевую поддержку .wma файлов, таким образом преобразовывание, по крайней мере, тех файлов с чем-то как ffmpeg сначала, вероятно, неизбежно.

ffmpeg -i infile.wma outfile.wav
15
ответ дан 07.12.2019, 12:34
  • 1
    AFAIK только работают как этот, если все файлы имеют те же каналы, частоту дискретизации, и битовую глубину; иначе необходимо указать для всех. я не понял, что это будет декодировать закодированные форматы также, но я предполагаю, что не не отставал от него. – quack quixote 02.11.2009, 15:17

Я использовал бы 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 работала на меня.

3
ответ дан 07.12.2019, 12:34
  • 1
    хорошо, что относительно конкатенации? – hasen 02.11.2009, 04:33
  • 2
    извините об этом! Считайте мои дополнения. – DaveParillo 02.11.2009, 04:52
  • 3
    , не столь уверенный в ffmpeg... прекрасном как декодер WMA, но много жалоб на кодер OGG. по крайней мере, используйте -acodec libvorbis избегать встроенного кодера ffmpeg. положительная сторона – quack quixote 02.11.2009, 06:59

Чтобы связать и транскодировать звуковые файлы, это - рабочий процесс, за которым Вы хотите следовать:

  1. Декодируйте входные звуковые файлы к данным WAV/PCM,
  2. Свяжите WAV,
  3. Закодируйте WAV для вывода файла аудиокодека.

Обработка на этих шагах выполняет конкатенацию на данных WAV, которые являются самыми легкими иметь дело с и наименее с потерями. И так как Вы хотите транскодировать так или иначе, необходимо будет декодировать к WAV где-нибудь в процессе; мог бы также использовать в своих интересах его.

Вот шаги, которые я рекомендую. Мы будем использовать ffmpeg для декодирования, sox для конкатенации, и oggenc для кодирования. Вы могли заменить другими инструментами для любого шага- mencoder и другие хорошо работают как декодер, и любой инструмент, который кодирует Ogg, может использоваться в качестве кодера - хотя я думаю, что Вам будет трудно находить лучший инструмент, чем 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 не будут тем же форматом - если некоторые - 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
3
ответ дан 07.12.2019, 12:34

Не будет работать на .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 файлы в единственный файл.

1
ответ дан 07.12.2019, 12:34

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
1
ответ дан 07.12.2019, 12:34

Это не могло бы быть точно, в чем Вы нуждаетесь, но это должно помочь http://bitzenbytes.com/index.php?name=PNphpBB2&file=viewtopic&t=6538&postdays=0&postorder=asc&sid=f87b364ddbae3ddd9417f5d10fae870c

0
ответ дан 07.12.2019, 12:34

Теги

Похожие вопросы