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
?
Réponses
Trop de publicités?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
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
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
où -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