45 votes

Convertir mp3 en wav en utilisant FFmpeg pour le VBR

Quelle commande dois-je utiliser pour convertir un fichier mp3 en wav dont le débit binaire est variable. Ou comment savoir si l'audio source est en débit binaire fixe ou variable ?

57voto

martineau Points 4189

Vous pouvez obtenir des informations sur le débit binaire de vos fichiers d'entrée en utilisant la commande ffprobe song.mp3. Cependant, cela ne vous donne que le débit binaire du premier cadre. La VBR dans les fichiers MP3 est généralement implémentée simplement en changeant le débit binaire pour chaque cadre, donc il n'est pas possible de déterminer son utilisation en lisant simplement l'en-tête du premier cadre. J'utilise généralement un autre logiciel de lecture audio pour déterminer si la VBR est utilisée, car beaucoup affichent cette information (comme le fait Foobar2000 par exemple).

Lorsque vous utilisez des codecs de sortie avec perte (comme le MPEG-1 Layer III ou l'AAC), ffmpeg choisit un débit binaire par défaut pour le flux de sortie, or un débit binaire 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 prend un nombre prédéfini de bits. Ainsi, ffmpeg -i song.mp3 song.wav vous retournera un fichier WAV encodé en PCM avec un taux d'échantillonnage de 44 100 Hz et 16 bits par échantillon. Cela donne environ 1411 kBit/s pour l'ensemble du fichier, probablement beaucoup plus gros que le fichier d'entrée MP3.

Si vous souhaitez obtenir une taille de fichier plus petite pour le fichier WAV encodé en PCM, définissez un format d'échantillon avec moins de profondeur de bits (voir l'option -encoders pour une liste complète) et/ou choisissez un taux d'échantillonnage plus bas (-ar 22050 utiliserait 22,05 kHz par exemple).

Voici un exemple de mettre en œuvre les deux options :

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

11voto

loretoparisi Points 231

Selon le commentaire de @naught101, je suivrais ce processus pour détecter le meilleur acodec :

$ ffmpeg -formats | grep PCM 

 DE f32be           PCM 32-bit à virgule flottante big-endian
 DE f32le           PCM 32-bit à virgule flottante little-endian
 DE f64be           PCM 64-bit à virgule flottante big-endian
 DE f64le           PCM 64-bit à virgule flottante little-endian
 DE s16be           PCM signé 16-bit big-endian
 DE s16le           PCM signé 16-bit little-endian
 DE s24be           PCM signé 24-bit big-endian
 DE s24le           PCM signé 24-bit little-endian
 DE s32be           PCM signé 32-bit big-endian
 DE s32le           PCM signé 32-bit little-endian
 DE u16be           PCM non signé 16-bit big-endian
 DE u16le           PCM non signé 16-bit little-endian
 DE u24be           PCM non signé 24-bit big-endian
 DE u24le           PCM non signé 24-bit little-endian
 DE u32be           PCM non signé 32-bit big-endian
 DE u32le           PCM non signé 32-bit little-endian

À ce stade, considérez votre plate-forme pour choisir entre big-endian, little-endian, puis choisissez le débit binaire :

$ ffmpeg -i sample.mp3 
[mp3 @ 0x7fb33180da00] Estimation de la durée à partir du débit binaire, cela peut être inexact
Entrée #0, mp3, de '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
  Durée : 00:04:27.76, début : 0.000000, débit: 128 kb/s
    Flux #0:0: Audio: mp3, 44100 Hz, stéréo, 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, vérifiez juste les octets) a un débit binaire de 128 kb/s, le codec était s16p, l'échantillonnage à 44100 Hz, alors nous choisissons en conséquence :

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

Entrée #0, mp3, de '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
  Durée : 00:04:27.76, début : 0.000000, débit: 128 kb/s
    Flux #0:0: Audio: mp3, 44100 Hz, stéréo, s16p, 128 kb/s
Le fichier 'sample.wav' existe déjà. Écraser? [y/N] y
Sortie #0, wav, vers '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
    Flux #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stéréo, s16, 1411 kb/s
    Metadata:
      encoder         : Lavc56.1.100 pcm_s16le
Mapping de flux:
  Flux #0:0 -> #0:0 (mp3 (natif) -> pcm_s16le (natif))
Appuyez sur [q] pour arrêter, [?] pour l'aide
taille=   46125kB durée=00:04:27.75 débit=1411.2kbits/s    
vidéo:0kB audio:46125kB sous-titres:0kB autres flux:0kB en-têtes globaux:0kB surdécoupage: 0.000457%

Si vous êtes sur un Mac, vous pouvez vérifier l'audio pour voir s'il n'y a pas de bruit blanc au début / à la fin (quand l'audio d'origine mp3 n'a pas d'audio pendant quelques msec/sec) :

$ afplay sample.wav

Et bien sûr, vous pouvez revérifier le débit binaire :

$ ffmpeg -i sample.wav
Entrée #0, wav, de '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
  Durée : 00:04:27.76, débit: 1411 kb/s
    Flux #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 canaux, s16, 1411 kb/s

4voto

Mayur Lokare Points 41

Utilisez ffmpeg pour convertir les médias, vérifiez d'abord les spécifications du fichier en utilisant ffprobe. Utilisez cette commande ffmpeg -i kimberly.wav -acodec pcm_s16le -ar 16000 -ac 1 song.wav

-pcm_s16le est le codec de conversion de 16 bits -ar est le taux d'échantillonnage (16000 échantillons/sec) -ac est le nombre de canaux audio

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X