101 votes

FFMPEG : Convertir m4a en mp3 sans perte significative

J'ai un tas de fichiers audio (environ 1000) que je veux convertir de m4a en mp3 pour pouvoir les lire sur un lecteur de CD qui a 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 débit binaire à 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 débit constant, tel que 320k, car certains des fichiers que je convertis sont des m4a de 320k et d'autres sont de qualité aussi faible que des m4a de 96k.

Cela n'a aucun sens de forcer 320k, puisque certains fichiers deviendront plusieurs fois plus grands qu'ils ne le devraient. De même, cela n'a aucun sens de détruire tous mes fichiers de 320k en les convertissant à quelque chose de bien inférieur à 96k (pour l'instant, les fichiers sont convertis à environ 50k).

Quelqu'un sait-il comment je peux faire cela ? Ce que je veux vraiment faire, c'est dire à ffmpeg de convertir tous les fichiers m4a d'un répertoire en mp3 tout en conservant la qualité audio actuelle du mieux qu'il peut. (Bien sûr, il est probable qu'il y ait des extra les pertes liées à la conversion de avec perte à avec perte au-delà de ce qui serait attendu lors de la conversion d'un format sans perte vers un format avec perte).

Merci pour votre aide. Si ce n'est pas possible, existe-t-il une sorte de script qui pourrait détecter la qualité requise en convertissant les fichiers individuellement ?

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

129voto

llogan Points 50040

Utiliser le débit binaire variable (VBR)

Vous pouvez utiliser le -q:a option dans ffmpeg pour créer une sortie MP3 à débit binaire variable (VBR) :

ffmpeg -i input.m4a -c:v copy -c:a libmp3lame -q:a 4 output.mp3

Quoi -q:a valeurs à utiliser

De FFmpeg Wiki : MP3 :

Contrôlez la qualité avec -q:a (ou l'alias -qscale:a ). Les valeurs sont spécifiques à l'encodeur, ainsi pour libmp3lame la gamme est de 0-9 où une valeur plus faible une valeur inférieure correspond à une qualité supérieure.

  • 0-3 produira normalement une image transparente résultats
  • 4 (par défaut) devrait être proche de la transparence perceptuelle
  • 6 produit généralement une qualité "acceptable".

L'option -q:a est mis en correspondance avec le -V dans l'application autonome lame outil d'interface de ligne de commande.

Vous devrez expérimenter pour voir quelle valeur est acceptable pour vous. Voir aussi Hydrogène Audio : Paramètres recommandés pour l'encodeur LAME .

Encodage de plusieurs fichiers

Sous Linux et macOS, vous pouvez utiliser un Bash "boucle for" pour encoder tous les fichiers d'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

44voto

T.Todua Points 3394

Utilisez FFmpeg version en ligne de commande.

MP3 est officiellement abandonnée ( à partir de 2017 ) et un codec obsolète (je l'appelle un mort maintenant). Le monde est déjà passé à AAC (codec plus efficace et de qualité), et tout le monde devrait l'utiliser, au lieu du mp3 :

ffmpeg -i filenameee.m4a -acodec copy output.aac

Mise à jour : Même si je ne le recommande pas, malheureusement, certains développeurs de matériel de mauvaise qualité et obsolète produisent toujours des appareils qui utilisent mp3 et certaines personnes demandent encore ce format... Eh bien, le voici :

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

6voto

user205987 Points 201

Cela a marché pour moi :

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

4voto

jbowman Points 111

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

sudo apt-get install libav-tools

NOTE : Il serait sage de faire une sauvegarde de tout dossier dans lequel vous exécutez ce script ainsi que de faire de votre mieux pour lire et comprendre ce qu'il fait. avant en cours d'exécution.

Je n'ai pas testé très rigoureusement, donc 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

0voto

vozman Points 111

Mon fichier m4a n'a pas du tout été converti avec ffmpeg (générant un fichier mp3 illisible de la même taille que le m4a). Pour moi, cela a fonctionné d'utiliser vlc pour la conversion :

  1. Médias ->
  2. Convertir \Save ->
  3. Sélectionnez le fichier ->
  4. Convertir le fichier ->
  5. Choisissez le profil "Audio mp3) ->
  6. appuyez sur le bouton de la clé à molette près du profil ->
  7. Sélectionnez le codec audio et modifiez 128kbps à 320 ->.
  8. appuyez sur enregistrer ->
  9. Entrez le nom du fichier de sortie ->
  10. Début

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