Как преобразовать звуковой файл в Opus

22

Для тестирования я хочу конвертировать файлы MP3 и WAV, которые у меня есть, в Opus, как это сделать?

Луис Альварадо
источник
1
@EvanCarroll Отсюда и та часть, в которой написано «Для тестирования»;)
Луис Альварадо
2
@EvanCarroll Это зависит от того, чего вы хотите достичь, и от качества исходного материала. Если вы ищете абсолютное аудиофильное решение, вы, вероятно, никогда не захотите рассматривать Opus в первую очередь. Сказать, что это ужасная идея - это просто ужасное утверждение, когда нет объяснения.
LiveWireBT
1
@LiveWireBT Говорит, что кодирование mp3 в opus - это не ужасная идея, если вы не ищете абсолютное аудиофильское решение, это просто ужасное утверждение, когда нет объяснений.
Эван Кэрролл
2
@EvanCarroll Opus имеет специализированную поддержку речи, MP3 - нет. Это означает , что вы можете уменьшить ваши подкасты и аудиокниги значительно размера без заметной потери качества. Я не понимаю, как это ужасная идея.
Кристиан
3
@EvanCarroll "автоматическое определение речи или музыки, чтобы решить, какой режим кодирования использовать" от opus-codec.org . И, конечно, вы понесете потери в качестве. Вот почему это кодек с потерями. Вы сказали, что это никогда не может быть оправдано, и я привел вам хороший пример, где размер является огромной проблемой, качество второстепенной важности и источник без потерь недоступен.
Кристиан

Ответы:

23

По умолчанию аудио конвертер, поставляемый с инструментами opus, может конвертировать аудио в формат raw, wave или AIFF. Минимальный синтаксис использует настройки по умолчанию:

opusenc input.wav output.opus

Возможно, мы захотим добавить лучшую скорость передачи данных в качестве 96 кбит / с по умолчанию с этой опцией --bitrate N.nnn(для всех опций обратитесь к man-странице для opusenc).

Конвертировать mp3 "на лету". т.е. без создания временного файла мы можем передать вывод из avconv в opusenc следующим образом:

avconv -i input.mp3 -f wav - | opusenc --bitrate 256 - output.opus
Takkat
источник
Где взять "опусенц"?
Шев
1
@shevy: это идет с опус-инструментами .
Таккат
@shevy: $ sudo apt устанавливает opus-tools
Хосе Баракат
1
Чтобы сделать это на куче файлов flac :( for f in *.flac; do ffmpeg -i "$f" -f wav - | opusenc --bitrate 140 - "${f%.flac}.opus"; doneЯ выбрал 140 в качестве битрейта, потому что в соответствии с этим этого более чем достаточно для стереофонических файлов.
Иошуа
11

Ubuntu 14.04 и Debian 8 поставляются с версией 9 libav-toolsв своих репозиториях, и в него встроена поддержка Opus через пакет libopus0.

Пример 1: перекодировать аудиофайл в опус

С установленной версией 9 libav-toolsи libopus0вы можете, например, сделать:

avconv -i file.mp3 -map 0:a -codec:a opus -b:a 100k -vbr on file.opus

Какие варианты делают

  • -i file.mp3 устанавливает входной файл.
  • -map 0:aвыберет все аудиопотоки ( a) из входного файла 0. Подробнее о -mapна https://libav.org/avconv.html#Advanced-options
  • -codec:a opusвыбирает кодер opus для аудиопотоков ( a). Подробнее о -codecна https://libav.org/avconv.html#Main-options .
  • -b:a 100kустанавливает битрейт аудио на 100 килобит / с. Подробнее о -bна https://libav.org/avconv.html#Codec-AVOptions
  • -vbr onвключает переменный битрейт. Это опция, специфичная для libopus. Вот все варианты для libopus:

    $ avconv -h full | grep opus -A 11
    avconv version 9.11-6:9.11-3+b2, Copyright (c) 2000-2013 the Libav developers
      built on Apr  6 2014 17:45:45 with gcc 4.8 (Debian 4.8.2-16)
    libopus AVOptions:
    -application       <int>   E..A. Intended application type
       voip                    E..A. Favor improved speech intelligibility
       audio                   E..A. Favor faithfulness to the input
       lowdelay                E..A. Restrict to only the lowest delay modes
    -frame_duration    <float> E..A. Duration of a frame in milliseconds
    -packet_loss       <int>   E..A. Expected packet loss percentage
    -vbr               <int>   E..A. Variable bit rate mode
       off                     E..A. Use constant bit rate
       on                      E..A. Use variable bit rate
       constrained             E..A. Use constrained VBR
    
  • file.opus устанавливает выходной файл.

Пример 2: захват аудио из видеофайла и кодирование его как opus

Возьмите второй поток первого входа ( -map 0:1), который является аудиопотоком. Кодируйте его с помощью libopus на скорости 100 кбит / с с переменной скоростью передачи данных:

$ avconv -stats -i linuxactionshowep309-432p.mp4 -map 0:1 -c libopus -b 100k linuxactionshowep309-432p-audio-only.opus
avconv version 9.11-6:9.11-3+b2, Copyright (c) 2000-2013 the Libav developers
  built on Apr  6 2014 17:45:45 with gcc 4.8 (Debian 4.8.2-16)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'linuxactionshowep309-432p.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.33.100
  Duration: 01:14:48.45, start: 0.042667, bitrate: 466 kb/s
    Stream #0.0(und): Video: h264 (High), yuv420p, 768x432 [PAR 1:1 DAR 16:9], 330 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc
    Stream #0.1(und): Audio: aac, 48000 Hz, stereo, fltp, 128 kb/s
Output #0, ogg, to 'linuxactionshowep309-432p-audio-only.opus':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf54.20.3
    Stream #0.0(und): Audio: libopus, 48000 Hz, stereo, flt, 100 kb/s
Stream mapping:
  Stream #0:1 -> #0:0 (aac -> libopus)
Press ctrl-c to stop encoding
size=   54360kB time=4488.47 bitrate=  99.2kbits/s    
video:0kB audio:53875kB global headers:0kB muxing overhead 0.900602%

С mediainfoустановленным пакетом :

$ mediainfo linuxactionshowep309-432p-audio-only.opus
General
Complete name                            : linuxactionshowep309-432p-audio-only.opus
Format                                   : OGG
File size                                : 53.1 MiB
Duration                                 : 1h 14mn
Overall bit rate                         : 99.2 Kbps
Writing application                      : Lavf54.20.3
major_brand                              : isom
minor_version                            : 512
compatible_brands                        : isomiso2avc1mp41

Audio
ID                                       : 2104437746 (0x7D6F2BF2)
Format                                   : Opus
Duration                                 : 1h 14mn
Channel(s)                               : 2 channels
Channel positions                        : Front: L R
Sampling rate                            : 48.0 KHz
Compression mode                         : Lossy
Writing library                          : Lavf54.20.3
Даниэль Йонссон
источник
1
Работает на Ubuntu 14.04 отлично! Не могли бы вы объяснить, что -map 0:aделает? (А может быть подробно вся линия?)
425nesp
@ piña Я обновил ответ объяснением аргументов и дополнительным примером.
Даниэль Йонссон
5

Опус 12.04

Однако 12.04 (Precise) существуют проблемы с зависимостями при установке кодеков и инструментов opus, поэтому я обнаружил, что наилучшим решением является то, которое стало доступно совсем недавно: скомпилируйте аудиокодер и декодер opus, как указано здесь , и собрать ffmpegс поддержкой opus, добавив --enable-opusв настройки опции ffmpeg(как указано в руководстве по компиляции ).

Я знаю, что ffmpegэто устарело в Ubuntu в пользу Libav, но компиляция - это хороший способ интегрировать полностью функционирующий кодер / декодер opus в ffmpegсебя. Затем вы можете использовать его для преобразования файлов (сначала в wav), а затем в .opus. Документация, установленная с libopus и ffmpeg, покажет все опции, которые можно использовать для конвертации файлов.

При конвертации файлов ffmpegпосле компиляции вы должны указать -acodec libopusили ffmpegне использовать кодек opus:

ffmpeg -i pc.wav -ar 48000 -ac 2 -acodec libopus -ab 256k man.opus

Затем вы можете проверить файл, созданный с

ffplay man.opus

Советы по компиляции

Нет необходимости воспроизводить руководство здесь полностью, но стоит отметить одну или две вещи:

  • Сначала вы должны установить зависимости, как указано (я опускаю yasmиз списка: см. Мой второй пункт):

     sudo apt-get -y install autoconf build-essential checkinstall git libass-dev libfaac-dev libgpac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev librtmp-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libx11-dev libxext-dev libxfixes-dev pkg-config texi2html zlib1g-dev
    
  • Есть одна проблема, на которую следует обратить внимание: сборка git, кажется, нужна yasm-1.2, и она недоступна, поэтому вам нужно скомпилировать исходный код с официального сайта , но это просто. Просто удалите все установленные версии yasm, затем распакуйте загруженный архив cdв папку, запустите ./configure && makeи затем sudo checkinstall. Если для любых других сборок требуется более ранняя версия, вы можете просто удалить эту версию и установить версию репозитория.

  • Необходимо удалить любые существующие libav, ffmpeg, x264, libvpxили fdk-aacпакеты , прежде чем приступить к составлению.

  • Это критически , что вы скомпилировать и установить x264, fdk-aac, libvpxи , opusпрежде чем строить ffmpeg, так как эти библиотеки будут использоваться в сборке.

  • Не забудьте добавить --enable-opusв настройки параметры при запуске ffmpegкомпиляции.

  • Скомпилированная версия opus была 1.1alpha, поэтому вам может понадобиться повторно скомпилировать библиотеку opus и ffmpeg в будущем, когда будет выпущена новая версия.

  • Вы можете использовать ffplayдля воспроизведения любых файлов Opus, которые вы создаете.


источник
ffmpeg - плохое решение для замены.
Эван Кэрролл
2
@EvanCarroll Что ты имеешь в виду под этим? Это только чье-то решение отказаться от него: ffmpeg по-прежнему так же хорош, как и libav, что является его форком.
1
Отличный ответ, и спасибо за напоминание о требовании Yasm. x264 увеличил минимальную версию до 1.2.0 при последнем нажатии. Руководство дополнено инструкциями Yasm.
Llogan
@ Мик Я думаю, он хотел сказать, что автономный кодер даст лучшие результаты.
LiveWireBT
Я видел, как некоторые люди упоминали об ошибке «opus not found» при следовании инструкциям по компиляции ffmpeg. У меня была та же проблема в Ubuntu 12.04, и позже выяснилось, что в конце PKG_CONFIG_PATH = "$ HOME / ffmpeg_build / lib / pkgconfig" требуется косая черта.
3

Вот как я это делаю:

  • Сначала откройте терминал в той же директории, где находятся ваши аудиофайлы.
  • Затем введите эту команду:
$ opusenc - bitrate 320 --max-delay 10 "18 - Убежище души - Беглый поезд (альбомная версия) .flac" "18 - Убежище души - Беглый поезд (альбомная версия) .opus"

РЕДАКТИРОВАТЬ:

Для аудиофилов:

$ opusenc - bitrate 510 - max-delay 10 "18 - Убежище души - Беглый поезд (альбомная версия) .flac" "18 - Убежище души - Беглый поезд (альбомная версия) .opus"

Не нужно указывать --maxdelay 10опцию, потому что opusencделать это по умолчанию.

Консольный вывод для этого преобразования файла ( --bitrate 320):

    Encoding using libopus 1.1.2 (audio)
    -----------------------------------------------------
       Input: 44.1kHz 2 channels
      Output: 2 channels (2 coupled)
          20ms packets, 320kbit/sec VBR
     Preskip: 356

    Encoding complete   
    -----------------------------------------------------
           Encoded: 4 minutes and 22.4 seconds
           Runtime: 8 seconds
                    (32.8x realtime)
             Wrote: 10955530 bytes, 13120 packets, 13124 pages
           Bitrate: 317.691kbit/s (without overhead)
     Instant rates: 1.2kbit/s to 510.4kbit/s
                    (3 to 1276 bytes per packet)
          Overhead: 4.89% (container+metadata)

Это супер быстро! Менее 8 секунд со сложностью 10 (сложность кодирования (0-10, по умолчанию: 10). Ноль дает самые быстрые кодировки, но более низкое качество, в то время как 10 дает самое высокое качество, но более медленное кодирование) и максимальное время задержки 10 мс ( Максимальная задержка контейнера в миллисекундах (0-1000, по умолчанию: 1000)), поэтому, если вы пропустите время в песне, эффект отсечения будет иметь продолжительность 10 мс, поэтому он незаметен (попробуйте с 1000 и услышите время пропуска разницы с вашим мышь). Битрейт - это VBR по умолчанию. 320
--bitrate N.nnnкбит / с у меня сработало, так что необязательно, играйте с этим числом: => Целевой битрейт в кбит / с (6-256 на канал)

Между прочим, кодирование из MP3 в OPUS не очень хорошая идея, лучше не будет звучать, их алгоритмы сжатия слишком разные. Но из FLAC, WAV или любого другого формата аудио без потерь , это другая история.

Примечание. Чтобы кодировать другой файл, просто нажмите стрелку вверх в том же терминале, чтобы вызвать последнюю команду и изменить имя входного и выходного файлов.
Если вы ищете графический интерфейс ffmpeg / avconv, возможно, TraGtor - то, что вам нужно.

Вы также можете проверить различия в спектограммах между форматами Lossless и Lossy при высоких битрейтах с помощью Spek или Audacity .

Хосе Баракат
источник
Это не сработало для меня. Я получаю, Error parsing input file: Hardvapour remix-.mp3я использую 16.04
Сара Сабо
Вопрос по поводу mp3, а не flac.
Восстановить Монику - М. Шредер
0
  1. Найдите компакт-диск (или диск с CDEMU) с тем же содержанием, что и mp3.
  2. Инстал opus-toolsа Audex.
  3. Откройте Audex и добавьте новый профиль под названием Opus, добавьте шаблон Command;

    opusenc $i --comment="TRACKNUMBER="$trackno"" --artist "$artist" --album "$title" --title "$ttitle" --date "$date" --picture "$cover" $o

и суффикс opus

  1. пусть рвет!
Джоэл Гарсия
источник