FFMPEG: Convertissez les fichiers m4a en mp3 sans perte / information significative. Bitrate automatisé

J'ai une quantité de fichiers audio (environ 1000) que je veux convertir de m4a en mp3, donc je peux les utiliser sur un lecteur de CD doté d'un port USB.

J'ai essayé de faire quelque chose de simple comme: ffmpeg -i FILE.m4a FILE.mp3 mais cela semble réduire le bitrate à une valeur très faible, ce qui n'est pas ce que je veux.

De même, je ne veux pas convertir en utilisant un bitrate constant, tel que 320k, car certains des fichiers que je convertis sont 320k m4a et certains sont aussi bas que 96k m4a's.

Il semble qu'il n'y ait aucun sens de forcer 320k, car certains fichiers deviendront beaucoup plus importants qu'ils ne le sont. De même, il n'est pas logique de détruire tous mes fichiers de 320 Ko en les convertissant à quelque chose de bien inférieur à 96k. (Actuellement, les fichiers sont convertis à environ 50k.)

Est-ce que quelqu'un sait comment je peux le faire? Ce que je veux vraiment faire, c'est dire à ffmpeg de convertir tous les fichiers m4a dans un répertoire en mp3 tout en conservant la meilleure qualité audio possible. (Bien sûr, il est probable qu'il y ait des pertes supplémentaires lors de la conversion des formats de fichiers à perte ou à perte).

Merci de votre aide. Si cela n'est pas possible, y at-il une sorte de script qui pourrait détecter la qualité requise car il convertit les fichiers individuellement?

PS: Je travaille sur un Mac Intel, mais j'ai aussi une boîte Ubuntu.

VBR

Vous pouvez utiliser la -qscale:a option dans ffmpeg pour créer une sortie MP3 à débit variable (VBR). De FFmpeg Wiki: Encoding VBR (Variable Bit Rate) audio mp3 :

Contrôlez la qualité avec -qscale:a (ou l'alias -q:a ). Les valeurs sont spécifiques au codeur, donc pour libmp3lame, la plage est 0-9 où une valeur inférieure est une qualité supérieure. 0-3 produira normalement des résultats transparents, 4 (par défaut) devraient être proches de la transparence perceptuelle, et 6 produit généralement une qualité "acceptable". L'option -qscale:a est mappée à l'option -V dans l'outil d'interface de ligne de commande lame autonome.

Vous devrez expérimenter pour voir quelle valeur est acceptable pour vous. Voir aussi Hydrogen Audio: Paramètres recommandés LAME Encoder .

Encodage de fichiers multiples

Vous pouvez utiliser un Bash "for loop" pour coder tous les fichiers dans un répertoire:

 $ mkdir newfiles $ for f in *.m4a; do ffmpeg -i "$f" -codec:v copy -codec:a libmp3lame -q:a 2 newfiles/"${f%.m4a}.mp3"; done 

Obtenez ffmpeg

Il est recommandé d'utiliser une compilation récente de ffmpeg si possible. Consultez la page de téléchargement de FFmpeg pour les liens vers les versions OS, Linux et Windows. Vous pouvez également suivre un guide pour compiler FFmpeg .

Utilisation, FFmpeg (Détails complets à: http://ubuntuforums.org/showthread.php?t=1614765 )

 ffmpeg -i filenameee.m4a -acodec libmp3lame -ab 128k output.mp3 

Cela a fonctionné pour moi:

 ffmpeg -i testing.m4v -b:a 192K -vn testing.mp3 

Si vous travaillez à 48 KhZ et au moins 24 bits dans le fichier d'entrée (à partir d'un éditeur de fichiers i.ex.) -q:a 0 reproduira les 20 kHz dans un fichier non aussi grand que flac … Mais un audio de qualité inférieure À moins que vous ne réduisiez le bruit des hautes fréquences (sifflement) par des éditeurs audio de réduction de points ou de nez, créés dans des conversions, qui seront reproduits, utiliserez le fichier de données comme un HF inaudible, mais un bruit coûteux.

En utilisant les réponses existantes, j'ai écrit un script bash qui devrait faire exactement ce que la question pose sur une machine Ubuntu (testée en 16.04). Vous devrez installer avprobe qui se trouve dans le libav-tools . Vous pouvez installer avprobe avec la commande suivante

sudo apt-get install libav-tools

REMARQUE: il serait judicieux de faire une sauvegarde de n'importe quel dossier dans lequel vous exécutez ce script ainsi que de faire vos meilleurs efforts pour lire et comprendre ce qu'il fait avant d' exécuter.

Je n'ai pas testé très rigoureusement pour YMMV.

 #!/bin/bash mkdir "mp3s" for f in *.m4a; do bitrate=$(avprobe "${f}" 2> >(grep bitrate) | sed 's/^.*bitrate://g' | sed 's/[^0-9]*//g') bitrate="${bitrate}K" new_filename=$(echo "${f}" | sed 's/.m4a$/.mp3/g') ffmpeg -y -i "${f}" -acodec libmp3lame -ab "${bitrate}" "mp3s/${new_filename}" done