Convierte mp3 a wav usando FFmpeg para VBR

27

¿Qué comando debo usar para convertir un mp3archivo wavcuya tasa de bits es variable? O mejor ¿Cómo podría saber si esa fuente de audio es fixedla tasa de bits o variable?

Soham Dasgupta
fuente
3
No creo que el formato de archivo WAV sea compatible con velocidades de bits variables. Dado que todos los decodificadores de MP3 deben ser compatibles con los estándares, debe poder convertir cualquier archivo MP3 en un WAV de tasa de bits fija, aunque sus resultados variarán dependiendo de la calidad del MP3 de origen y la tasa de bits fija elegida para el WAV creado. La mayoría del software de reproducción de MP3 proporciona una forma de ver las propiedades del archivo que se está reproduciendo, por lo que puede usar uno para ver qué tipo de archivos fuente está tratando.
Martineau
¿Y qué hay del comando? ¿Que recomiendas?
Soham Dasgupta
Por favor lea la respuesta de martineau nuevamente. Corrija algunos errores. En particular, no puede establecer la tasa de bits para archivos WAV codificados por PCM.
slhck

Respuestas:

36

Puede obtener información sobre la tasa de bits de sus archivos de entrada mediante el ffprobe song.mp3comando. Sin embargo, esto solo le indica la tasa de bits del primer fotograma. El VBR en archivos MP3 generalmente se implementa simplemente cambiando la tasa de bits para cada cuadro, por lo que no se puede determinar si se está utilizando simplemente leyendo el encabezado del primer cuadro. Usualmente uso algún otro software de reproducción de archivos de audio para determinar si se está utilizando VBR, ya que muchos lo mostrarán (Foobar2000 lo hace, por ejemplo).

Cuando utiliza códecs de salida con pérdida (como MPEG-1 Layer III o AAC), ffmpeg elige una tasa de bits predeterminada para la secuencia de salida, o una tasa de bits variable. Depende del codificador en sí.

Para códecs sin pérdidas, no puede establecer una tasa de bits variable, ya que cada muestra toma un número predefinido de bits. ffmpeg -i song.mp3 song.wavpor lo tanto, obtendrá un archivo WAV codificado por PCM con una frecuencia de muestreo de 44,100 Hz y 16 bits por muestra. Esto resulta en aproximadamente 1411 kBit / s para todo el contenedor, probablemente mucho, mucho más grande que el archivo de entrada MP3.

Si desea un tamaño de archivo más pequeño para el archivo WAV codificado por PCM, configure un formato de muestra con menos profundidad de bits (consulte la -encodersopción para obtener una lista completa de ellos) y / o elija una frecuencia de muestreo más baja ( -ar 22050usaría 22.05 kHz por ejemplo).

Aquí hay un ejemplo de hacer ambas cosas:

ffmpeg -i song.mp3 -acodec pcm_u8 -ar 22050 song.wav
Martineau
fuente
55
Si codifica audio PCM en un contenedor WAV, no puede establecer la tasa de bits. Eso no tiene sentido. PCM es un formato sin comprimir: no puede decirle que use más o menos bits por segundo. La única forma de ajustar el tamaño es usar un tamaño de muestra diferente (ver -sample_fmtsopción). -ar 128ksignifica que la frecuencia de muestreo será de 128,000 Hz, en lugar de la habitual de 44,1 o 48 kHz.
slhck
12
Probablemente sea mejor hacerlo ffmpeg -i song.mp3 song.wav, ya que eso elegirá la tasa de bits adecuada (que probablemente sea 44.1khz). Si está convirtiendo a wav, probablemente no quiera perder más información ..
naught101
@ naught101 tenía razón, de hecho es mejor dejar ffpmegelegir la tasa de bits de muestreo correcta de acuerdo con los song.mp3datos de entrada. De esta manera, el wavarchivo de mapa de bits de salida tendrá la mejor tasa de bits. Esto significa por cierto que el tamaño del archivo será excelente, pero con el sobreajuste de los datos: `Stream # 0: 0: Audio: mp3, 44100 Hz, estéreo, s16p, 128 kb / s`
loretoparisi
1
Es bastante seguro suponer que el propósito del autor de la pregunta es grabar los archivos WAV resultantes en un CD de audio. La única frecuencia adecuada para eso es 44100 Hz, por lo que -ar 44100es imprescindible incluso si ffmpeg usará automáticamente un códec de 16 bits adecuado.
Mikhail T.
3

Según el comentario de @ naught101, seguiría este proceso para detectar lo mejor acodec:

$ ffmpeg -formats | grep PCM 

 DE f32be           PCM 32-bit floating-point big-endian
 DE f32le           PCM 32-bit floating-point little-endian
 DE f64be           PCM 64-bit floating-point big-endian
 DE f64le           PCM 64-bit floating-point little-endian
 DE s16be           PCM signed 16-bit big-endian
 DE s16le           PCM signed 16-bit little-endian
 DE s24be           PCM signed 24-bit big-endian
 DE s24le           PCM signed 24-bit little-endian
 DE s32be           PCM signed 32-bit big-endian
 DE s32le           PCM signed 32-bit little-endian
 DE u16be           PCM unsigned 16-bit big-endian
 DE u16le           PCM unsigned 16-bit little-endian
 DE u24be           PCM unsigned 24-bit big-endian
 DE u24le           PCM unsigned 24-bit little-endian
 DE u32be           PCM unsigned 32-bit big-endian
 DE u32le           PCM unsigned 32-bit little-endian

En este punto, considere su plataforma que elegir entre big-endian, little-endian, el elegir el bitrate:

$ ffmpeg -i sample.mp3 
[mp3 @ 0x7fb33180da00] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from 'sample.mp3':
  Metadata:
    title           : Saturday
    artist          : Winterwood
    album           : Love In The Heart
    track           : 2/15
    TPA             : 1/1
    encoded_by      : iTunes 11.0.1
    genre           : Country & Folk
    date            : 1997
  Duration: 00:04:27.76, start: 0.000000, bitrate: 128 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s

Podemos ver que este archivo de audio es un mp3(esto no es obvio, a pesar de la extensión del archivo de entrada, solo verifique los bytes) tiene una tasa de bits de 128 kb/s, el códec s16p, el muestreo en 44100 Hz, por lo que elegimos en consecuencia:

$ ffmpeg -i sample.mp3 -acodec pcm_s16le -ar 44100 sample.wav


Input #0, mp3, from 'sample.mp3':
  Metadata:
    title           : Saturday
    artist          : Winterwood
    album           : Love In The Heart
    track           : 2/15
    TPA             : 1/1
    encoded_by      : iTunes 11.0.1
    genre           : Country & Folk
    date            : 1997
  Duration: 00:04:27.76, start: 0.000000, bitrate: 128 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s
File 'sample.wav' already exists. Overwrite ? [y/N] y
Output #0, wav, to 'sample.wav':
  Metadata:
    INAM            : Saturday
    IART            : Winterwood
    IPRD            : Love In The Heart
    IPRT            : 2/15
    TPA             : 1/1
    ITCH            : iTunes 11.0.1
    IGNR            : Country & Folk
    ICRD            : 1997
    ISFT            : Lavf56.4.101
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
    Metadata:
      encoder         : Lavc56.1.100 pcm_s16le
Stream mapping:
  Stream #0:0 -> #0:0 (mp3 (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
size=   46125kB time=00:04:27.75 bitrate=1411.2kbits/s    
video:0kB audio:46125kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000457%

Si está en Mac, puede verificar el audio si no tiene white noiseal principio / final (cuando el audio original mp3 no tiene audio durante algunos ms / seg):

$ afplay sample.wav

y, por supuesto, puede verificar el mapa de bits:

$ ffmpeg -i sample.wav
Input #0, wav, from 'sample.wav':
  Metadata:
    artist          : Winterwood
    date            : 1997
    genre           : Country & Folk
    title           : Saturday
    album           : Love In The Heart
    track           : 2/15
    encoder         : Lavf56.4.101
    encoded_by      : iTunes 11.0.1
  Duration: 00:04:27.76, bitrate: 1411 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s
loretoparisi
fuente
0

Use ffmpeg para convertir los medios, primero verifique las especificaciones del archivo usando ffprobe. usa este comando ffmpeg -i kimberly.wav -acodec pcm_s16le -ar 16000 -ac 1 song.wav

dónde -pcm_s16le is codec 16 bit conversion -ar is sampling rate (16000samples/sec) -ac no of audio channel

Mayur Lokare
fuente