Como converter um arquivo de som para o Opus

22

Para testar, quero converter um arquivo MP3 e WAV que tenho no Opus. Quais são as etapas para fazer isso?

Luis Alvarado
fonte
1
@EvanCarroll Daí a parte que diz "Para testar";)
Luis Alvarado
2
@EvanCarroll Isso depende do que você deseja alcançar e da qualidade do material de entrada. Se você está procurando uma solução audiófila absoluta, provavelmente nunca deseja considerar o Opus em primeiro lugar. Dizer que é uma ideia horrível é apenas uma afirmação horrível, quando não há explicação.
LiveWireBT 4/13/13
1
@LiveWireBT Diz que codificar um mp3 no opus não é uma idéia horrível, a menos que você esteja procurando uma solução audiófila absoluta, é apenas uma afirmação horrível, quando não há explicação.
Evan Carroll
2
@EvanCarroll O Opus possui suporte especializado para fala, o MP3 não. Isso significa que você pode reduzir seus podcasts e audiobooks significativamente em tamanho sem qualquer perda perceptível de qualidade. Não vejo como essa é uma ideia horrível.
Christian
3
@EvanCarroll "detecção automática de fala ou música para decidir qual modo de codificação usar" no opus-codec.org . E é claro que você sofrerá uma perda de qualidade. É por isso que é um codec com perdas. Você disse que isso nunca foi justificável e eu lhe dei um bom exemplo em que tamanho é um problema enorme, qualidade de importância secundária e uma fonte sem perdas não disponível.
Christian

Respostas:

23

Por padrão, o conversor de áudio fornecido com as ferramentas do opus pode converter áudio nos formatos raw, wave ou AIFF. A sintaxe mínima usa as configurações padrão:

opusenc input.wav output.opus

Podemos adicionar uma taxa de bits melhor como os 96 kbps padrão com a opção --bitrate N.nnn(para todas as opções, consulte a página de manual para opusenc).

Para converter mp3 "on the fly". ou seja, sem criar um arquivo temporário, podemos canalizar a saída do avconv para o opusenc como este:

avconv -i input.mp3 -f wav - | opusenc --bitrate 256 - output.opus
Takkat
fonte
Onde obter "opusenc"?
shevy
1
@ Shevy: vem com as ferramentas opus .
Takkat
@shevy: $ sudo apt instalar opus-tools
Jose Barakat
1
Para fazer isso em um monte de arquivos FLAC: for f in *.flac; do ffmpeg -i "$f" -f wav - | opusenc --bitrate 140 - "${f%.flac}.opus"; done(eu escolhi 140 como uma taxa de bits porque de acordo com este é mais do que suficiente para arquivos de som.
Joschua
11

O Ubuntu 14.04 e o Debian 8 são fornecidos com a versão 9 do libav-toolsem seus repositórios e possuem suporte interno para o Opus através do pacote libopus0.

Exemplo 1: recodifique um arquivo de áudio como opus

Com a versão 9 libav-toolse libopus0instalada, você pode simplesmente, por exemplo, fazer:

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

O que as opções fazem

  • -i file.mp3 define o arquivo de entrada.
  • -map 0:aselecionará todos os fluxos de áudio ( a) do arquivo de entrada 0. Leia mais sobre -mapem https://libav.org/avconv.html#Advanced-options
  • -codec:a opusseleciona o codificador opus para os fluxos de áudio ( a). Leia mais sobre -codecsobre https://libav.org/avconv.html#Main-options .
  • -b:a 100kdefine a taxa de bits do áudio para 100 kilobit / s. Leia mais sobre -bem https://libav.org/avconv.html#Codec-AVOptions
  • -vbr onativa a taxa de bits variável. Esta é uma opção específica para libopus. Aqui estão todas as opções para 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 define o arquivo de saída.

Exemplo 2: pegue o áudio de um arquivo de vídeo e codifique-o como opus

Pegue o segundo fluxo da primeira entrada ( -map 0:1), que é o fluxo de áudio. Codifique-o com libopus a 100 kbit / s com taxa de bits variável em:

$ 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%

Com o pacote mediainfoinstalado:

$ 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
Daniel Jonsson
fonte
1
Funciona perfeitamente no Ubuntu 14.04! Você poderia explicar o que -map 0:afaz? (E talvez detalhar a toda a linha?)
425nesp
@ piña Atualizei a resposta com uma explicação dos argumentos e um exemplo adicional.
21714 Daniel Jonsson
5

Opus em 12.04

No 12.04 (Precise), no entanto, existem problemas de dependência na instalação dos codecs e ferramentas do opus, por isso descobri que a melhor solução é a que ficou disponível recentemente: compile o codificador e o decodificador de áudio opus, conforme observado aqui , e crie ffmpegcom o suporte do opus adicionando --enable-opusàs opções de configuração de ffmpeg(conforme listado no guia de compilação ).

Eu sei que isso ffmpegfoi preterido no Ubuntu em favor Libav, mas compilar é uma boa maneira de obter um codificador / decodificador opus totalmente funcional integrado a ffmpegele mesmo. Você pode usá-lo para converter arquivos (primeiro para wav) e depois para .opus. A documentação instalada com libopus e ffmpeg revelará todas as opções que podem ser usadas para converter arquivos.

Ao converter arquivos com ffmpegapós a compilação, você deve especificar -acodec libopusou ffmpegnão usará o codec opus:

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

Você pode testar o arquivo criado com

ffplay man.opus

Dicas de compilação

Não há necessidade de reproduzir o guia aqui na íntegra, mas vale a pena notar uma ou duas coisas:

  • Você deve primeiro instalar as dependências conforme listado (eu omito yasmna lista: veja meu segundo ponto):

     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
    
  • Há um problema que deve ser destacado: o build do git parece querer yasm-1.2, e isso não está disponível; portanto, você deve compilar a fonte do site oficial , mas é simples. Apenas remova todas as versões instaladas yasme descompacte o arquivo baixado cdna pasta, execute ./configure && makee depois sudo checkinstall. Se qualquer outra construção exigir a versão anterior, você poderá remover esta versão e instalar a versão do repositório.

  • É necessário remover qualquer existente libav, ffmpeg, x264, libvpx, ou fdk-aacpacotes antes de você começar a compilar.

  • É crítico que você compilar e instalar x264, fdk-aac, libvpxe opusantes de construir ffmpeg, como as bibliotecas serão utilizadas na compilação.

  • Não se esqueça de adicionar --enable-opusàs opções de configuração ao executar a ffmpegcompilação.

  • A versão do opus compilada era 1.1alpha, portanto, talvez seja necessário recompilar a biblioteca opus e o ffmpeg no futuro novamente quando uma nova versão for lançada.

  • Você pode usar ffplaypara reproduzir todos os arquivos opus criados.


fonte
O ffmpeg é uma solução ruim para qualquer coisa que substitua.
Evan Carroll
2
@EvanCarroll O que você quer dizer com isso? É apenas a decisão de alguém desaprová-lo: o ffmpeg ainda é tão bom quanto o libav, que é apenas um garfo dele.
1
Uma ótima resposta e obrigado pelo lembrete sobre o requisito Yasm. O x264 aumentou a versão mínima para 1.2.0 no último push. Guia atualizado com as instruções Yasm.
Llogan
@ Mik, acho que ele queria dizer que o codificador independente fornecerá melhores resultados.
LiveWireBT
Vi algumas pessoas mencionadas com erro "opus not found" ao seguir as instruções para compilar o ffmpeg. Eu tive o mesmo problema no Ubuntu 12.04, e mais tarde descobri que o PKG_CONFIG_PATH = "$ HOME / ffmpeg_build / lib / pkgconfig" precisa de uma barra no final.
3

É assim que eu faço:

  • Primeiro, abra um terminal no mesmo diretório em que estão seus arquivos de áudio.
  • Em seguida, digite este comando:
$ opusenc --bitrate 320 --max-delay 10 "18 - Soul Asylum - Runaway Train (Album Version) .flac" "18 - Soul Asylum - Runaway Train (Album Version) .opus"

EDITAR:

Para audiófilos:

$ opusenc --bitrate 510 --max-delay 10 "18 - Soul Asylum - Runaway Train (Album Version) .flac" "18 - Soul Asylum - Runaway Train (Album Version) .opus"

Não há necessidade de especificar a --maxdelay 10opção porque opusencfaça isso por padrão.

Saída do console para esta conversão de arquivo ( --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)

É super rápido! Menos de 8 segundos com uma complexidade de 10. (Codificação de complexidade computacional (0-10, padrão: 10). Zero fornece os códigos mais rápidos, mas com qualidade inferior, enquanto 10 fornece a qualidade mais alta, porém com codificação mais lenta) e um tempo de atraso máximo de 10ms ( Atraso máximo do contêiner em milissegundos (0-1000, padrão: 1000)); portanto, se você pular o tempo em uma música, o efeito de recorte terá uma duração de 10ms, tornando-o imperceptível (tente com 1000 e ouça a diferença de tempo com o seu rato). A taxa de bits é VBR por padrão. 320kbps funcionaram para mim, portanto, é opcional, brinque com este número:
--bitrate N.nnn=> Taxa de bits desejada em kbit / s (6-256 por canal)

A propósito, codificar de MP3 para OPUS não é uma boa idéia, não vai soar melhor, seus algoritmos de compressão são muito diferentes. Mas de FLAC ou WAV ou qualquer outro formato de áudio sem perdas , isso é outra história.

Nota: Para codificar outro arquivo, basta pressionar a Seta para cima no mesmo terminal para chamar o último comando e alterar o nome dos arquivos de entrada e saída.
Se você está procurando uma interface gráfica ffmpeg / avconv, talvez o TraGtor seja o que você precisa.

Você também pode verificar as diferenças do espectograma entre os formatos Lossless e Lossy com altas taxas de bits com Spek ou Audacity .

Jose Barakat
fonte
Não funcionou para mim. Eu Error parsing input file: Hardvapour remix-.mp3estou usando o 16.04
Sarah Szabo
A questão é sobre mp3, não flac.
Restabelecer Monica - M. Schröder
0
  1. Encontre um CD (ou flac com CDEMU) com o mesmo conteúdo que mp3.
  2. Instal opus-toolse Audex.
  3. Abra o Audex e adicione um novo perfil chamado Opus, adicione Padrão de comando;

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

e sufixo opus

  1. deixe rasgar!
Joel Garcia
fonte