web-dev-qa-db-fra.com

Conversion de mp3 en wav en utilisant FFmpeg pour VBR

Quelle commande dois-je utiliser pour convertir un fichier mp3 en wav dont le débit est variable. Ou mieux, comment saurais-je si le son source est fixed bitrate ou variable?

25
Soham Dasgupta

Vous pouvez obtenir des informations sur le débit de vos fichiers d’entrée à l’aide de la commande ffprobe song.mp3. Cependant, cela ne vous indique que le débit de la première image. Le format VBR dans les fichiers MP3 est généralement mis en œuvre simplement en modifiant le débit binaire de chaque image. Il est donc impossible de déterminer s'il est utilisé en lisant simplement l'en-tête de la première image. J'utilise habituellement un autre logiciel de lecture de fichiers audio pour déterminer si VBR est utilisé, car beaucoup le montreront (par exemple, Foobar2000).

Lorsque vous utilisez des codecs de sortie avec perte (tels que MPEG-1 Layer III ou AAC), ffmpeg choisit un débit par défaut pour le flux de sortie ou un débit variable. Cela dépend de l'encodeur lui-même.

Pour les codecs sans perte, vous ne pouvez pas définir un débit binaire variable, car chaque échantillon utilise un nombre prédéfini de bits. ffmpeg -i song.mp3 song.wav vous fournira donc un fichier WAV codé PCM avec une fréquence d'échantillonnage de 44 100 Hz et 16 bits par échantillon. Il en résulte environ 1411 kBit/s pour l’ensemble du conteneur, probablement beaucoup plus volumineux que le fichier d’entrée MP3.

Si vous voulez une taille de fichier plus petite pour le fichier WAV codé en PCM, définissez un format d'échantillon avec une profondeur de bits moindre (voir l'option -encoders pour une liste complète) et/ou choisissez une fréquence d'échantillonnage inférieure (par exemple, -ar 22050 utiliserait 22,05 kHz) ).

Voici un exemple de faire les deux:

ffmpeg -i song.mp3 -acodec pcm_u8 -ar 22050 song.wav
32
martineau

Selon le commentaire de @ naught101, je suivrais ce processus pour détecter la meilleure variable 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

À ce stade, pensez à votre plate-forme de choisir entre big-endian, little-endian et le débit binaire choisi:

$ 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

Nous pouvons voir que ce fichier audio est un mp3 (ce n'est pas évident, malgré l'extension du fichier d'entrée, il suffit de vérifier les octets) a un débit de 128 kb/s, le codec était s16p, échantillonnage à 44100 Hz, nous avons donc choisi en conséquence:

$ 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 vous êtes sur mac, vous pouvez vérifier l’audio s’il n’a pas de white noise au début/à la fin (quand l’audio original mp3 n’a pas d’audio pour quelques ms/sec):

$ afplay sample.wav

et bien sûr, vous pouvez vérifier le bitmap:

$ 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
3
loretoparisi

Utilisez ffmpeg pour convertir le support, vérifiez d’abord la spécification du fichier à l’aide de ffprobe. utiliser cette commande ffmpeg -i kimberly.wav -acodec pcm_s16le -ar 16000 -ac 1 song.wav

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

0
Mayur Lokare