Cómo convertir un archivo de sonido a Opus

22

Para las pruebas, quiero convertir un archivo MP3 y WAV que tengo a Opus, ¿cuáles son los pasos para hacerlo?

Luis Alvarado
fuente
1
@EvanCarroll De ahí la parte que dice "Para probar";)
Luis Alvarado
2
@EvanCarroll Eso depende de lo que desea lograr y la calidad del material de entrada. Si está buscando una solución audiófila absoluta, probablemente nunca quiera considerar Opus en primer lugar. Decir que es una idea horrible es solo una declaración horrible, cuando no hay explicación.
LiveWireBT
1
@LiveWireBT dice que codificar un mp3 en opus no es una idea horrible a menos que esté buscando una solución audiófila absoluta es solo una declaración horrible, cuando no hay explicación.
Evan Carroll
2
@EvanCarroll Opus tiene soporte especializado para voz, MP3 no. Esto significa que puede reducir sus podcasts y audiolibros significativamente en tamaño sin ninguna pérdida notable de calidad. No veo cómo es una idea horrible.
Christian
3
@EvanCarroll "detección automática de voz o música para decidir qué modo de codificación usar" de opus-codec.org . Y, por supuesto, incurrirá en una pérdida de calidad. Por eso es un códec con pérdida. Sin embargo, dijiste que esto nunca era justificable y te di un buen ejemplo donde el tamaño es un gran problema, la calidad de importancia secundaria y una fuente sin pérdidas no disponible.
Christian

Respuestas:

23

Por defecto, el convertidor de audio incluido con las herramientas opus puede convertir audio en formato raw, wave o AIFF. La sintaxis mínima utiliza la configuración predeterminada:

opusenc input.wav output.opus

Es posible que queramos agregar una mejor tasa de bits como el valor predeterminado de 96 kbps con la opción --bitrate N.nnn(para todas las opciones, consulte la página de manual de opusenc).

Para convertir mp3 "sobre la marcha". es decir, sin crear un archivo temporal, podemos canalizar la salida de avconv a opusenc de esta manera:

avconv -i input.mp3 -f wav - | opusenc --bitrate 256 - output.opus
Takkat
fuente
¿Dónde obtener "opusenc"?
shevy
1
@ shevy: viene con las herramientas opus .
Takkat
@shevy: $ sudo apt install opus-tools
Jose Barakat
1
Para hacer esto en un montón de archivos flac: for f in *.flac; do ffmpeg -i "$f" -f wav - | opusenc --bitrate 140 - "${f%.flac}.opus"; done(Elegí 140 como bitrate porque según esto es más que suficiente para archivos estéreo.
Joschua
11

Ubuntu 14.04 y Debian 8 vienen con la versión 9 de libav-toolssus repositorios, y tiene soporte incorporado para Opus a través del paquete libopus0.

Ejemplo 1: Vuelva a codificar un archivo de audio como opus

Con la versión 9 libav-toolse libopus0instalada, simplemente puede, por ejemplo, hacer:

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

¿Qué hacen las opciones?

  • -i file.mp3 establece el archivo de entrada.
  • -map 0:aseleccionará todas las secuencias de audio ( a) del archivo de entrada 0. Obtenga más información -mapsobre https://libav.org/avconv.html#Advanced-options
  • -codec:a opusselecciona el codificador opus para las secuencias de audio ( a). Leer más acerca -codecde https://libav.org/avconv.html#Main-options .
  • -b:a 100kestablece la velocidad de bits del audio a 100 kilobit / s. Leer más acerca -bde https://libav.org/avconv.html#Codec-AVOptions
  • -vbr onactiva la tasa de bits variable. Esta es una opción específica para libopus. Aquí están todas las opciones 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 establece el archivo de salida.

Ejemplo 2: toma el audio de un archivo de video y codifícalo como opus

Tome la segunda secuencia de la primera entrada ( -map 0:1), que es la secuencia de audio. Codifíquelo con libopus a 100 kbit / s con velocidad de bits variable en:

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

Con el paquete 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
fuente
1
Funciona en Ubuntu 14.04 perfectamente! ¿Podría explicar qué -map 0:ahace? (¿Y tal vez detallar toda la línea?)
425nesp
@ piña He actualizado la respuesta con una explicación de los argumentos y un ejemplo adicional.
Daniel Jonsson
5

Opus el 12.04

Sin embargo, en 12.04 (Precise), existen problemas de dependencia con la instalación de los códecs y herramientas opus, por lo que he descubierto que la mejor solución es la que ha estado disponible recientemente: compile el codificador y decodificador de audio opus como se indica aquí , y compile ffmpegcon soporte de opus agregando --enable-opusa las opciones de configuración de ffmpeg(como se enumera en la guía de compilación ).

Sé que ffmpegestá desaprobado en Ubuntu a favor Libav, pero compilar es una buena manera de obtener un codificador / decodificador opus completamente funcional integrado en ffmpegsí mismo. Luego puede usarlo para convertir archivos (primero a wav) y luego a .opus. La documentación instalada con libopus y ffmpeg revelará todas las opciones que se pueden usar para convertir archivos.

Al convertir archivos con ffmpegdespués de la compilación, debe especificar -acodec libopuso ffmpegno utilizará el códec opus:

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

Luego puede probar el archivo creado con

ffplay man.opus

Consejos de compilación

No es necesario reproducir la guía aquí en su totalidad, pero vale la pena señalar una o dos cosas:

  • Primero debe instalar las dependencias como se enumeran (omito yasmde la lista: vea mi segundo punto):

     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
    
  • Hay un problema que debe señalarse: la compilación de git parece querer yasm-1.2y no está disponible, por lo que debe compilar la fuente desde el sitio oficial , pero es simple. Simplemente elimine las versiones instaladas de yasm, luego desempaquete el archivo descargado, cda la carpeta, ejecute ./configure && makey luego sudo checkinstall. Si alguna otra compilación requiere la versión anterior, puede eliminar esta versión e instalar la versión del repositorio.

  • Es necesario eliminar cualquier existente libav, ffmpeg, x264, libvpx, o fdk-aacpaquetes antes de que comiencen a evaluar.

  • Es fundamental que se compila e instala x264, fdk-aac, libvpxy opusantes de construir ffmpeg, ya que esas bibliotecas serán utilizados en la construcción.

  • No olvide agregar --enable-opusa las opciones de configuración cuando ejecute la ffmpegcompilación.

  • La versión de opus compilada era 1.1alpha, por lo que es posible que deba volver a compilar la biblioteca de opus y ffmpeg en el futuro nuevamente cuando se lance una nueva versión.

  • Puede usar ffplaypara reproducir cualquier archivo opus que cree.


fuente
ffmpeg es una mala solución para cualquier cosa para la que haya un reemplazo.
Evan Carroll
2
@EvanCarroll ¿Qué quieres decir con esto? Solo es decisión de alguien desaprobarlo: ffmpeg sigue siendo tan bueno como libav, que es solo una bifurcación.
1
Una gran respuesta, y gracias por el recordatorio sobre el requisito de Yasm. x264 aumentó la versión mínima a 1.2.0 en su último empuje. Guía actualizada con instrucciones de Yasm.
llogan el
@Mik Creo que quería decir que el codificador independiente dará mejores resultados.
LiveWireBT
Vi que algunas personas mencionaron tener un error "opus no encontrado" al seguir las instrucciones para compilar ffmpeg. Tuve el mismo problema en Ubuntu 12.04, y luego descubrí que PKG_CONFIG_PATH = "$ HOME / ffmpeg_build / lib / pkgconfig" necesita una barra al final.
3

Así es como lo hago:

  • Primero, abra una terminal en el mismo directorio donde están sus archivos de audio.
  • Luego, escriba este comando:
$ opusenc --bitrate 320 --max-delay 10 "18 - Soul Asylum - Runaway Train (Versión del álbum) .flac" "18 - Soul Asylum - Runaway Train (Versión del álbum) .opus"

EDITAR:

Para audiófilos:

$ opusenc --bitrate 510 --max-delay 10 "18 - Soul Asylum - Runaway Train (Versión del álbum) .flac" "18 - Soul Asylum - Runaway Train (Versión del álbum) .opus"

No es necesario especificar la --maxdelay 10opción porque lo opusenchace de forma predeterminada.

Salida de consola para esta conversión de archivo ( --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)

¡Es súper rápido! Menos de 8 segundos con una complejidad de 10 (complejidad computacional de codificación (0-10, valor predeterminado: 10). Cero proporciona las codificaciones más rápidas pero de menor calidad, mientras que 10 proporciona la codificación más alta pero más lenta) y un tiempo de retraso máximo de 10 ms ( Retraso máximo del contenedor en milisegundos (0-1000, predeterminado: 1000)), por lo que si omite el tiempo en una canción, el efecto de recorte tendrá una duración de 10 ms, por lo que es imperceptible (intente con 1000 y escuche la diferencia de tiempo de omisión con su ratón). La tasa de bits es VBR por defecto. 320kbps funcionó para mí, así que es opcional, juegue con este número:
--bitrate N.nnn=> Bitrate objetivo en kbit / seg (6-256 por canal)

Por cierto, la codificación de MP3 a OPUS no es una buena idea, no va a sonar mejor, sus algoritmos de compresión son demasiado diferentes. Pero desde FLAC o WAV o cualquier otro formato de audio sin pérdida , esa es otra historia.

Nota: Para codificar otro archivo, simplemente presione la flecha hacia arriba en el mismo terminal para llamar al último comando y cambiar el nombre de los archivos de entrada y salida.
Si está buscando una interfaz gráfica de usuario de ffmpeg / avconv, quizás TraGtor sea ​​lo que necesita.

También puede verificar las diferencias de espectograma entre los formatos Lossless y Lossy a altas tasas de bits con Spek o Audacity .

Jose Barakat
fuente
No me funcionó. Entiendo Error parsing input file: Hardvapour remix-.mp3que estoy usando 16.04
Sarah Szabo
La pregunta es sobre mp3, no flac.
Restablece a Mónica - M. Schröder
0
  1. Encuentre un CD (o flac con CDEMU) con el mismo contenido que mp3.
  2. Instal opus-toolsy Audex.
  3. Abra Audex y agregue un nuevo perfil llamado Opus, agregue el patrón de Comando;

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

y sufijo opus

  1. deja que se rasgue!
Joel Garcia
fuente