web-dev-qa-db-fra.com

FFMPEG: Convertissez les fichiers m4a en mp3 sans perte d’information / qualité importante. Débit binaire automatisé

J'ai une charge de fichiers audio (environ 1 000) que je souhaite convertir de m4a en mp3 pour pouvoir les lire 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 débit à 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 ont une taille de 320k m4a et d'autres sont de qualité inférieure à 96k m4a.

Il semble inutile de forcer 320 Ko, car certains fichiers seront plusieurs fois plus volumineux que nécessaire. De la même façon, cela n'a aucun sens de détruire tous mes fichiers 320k en les convertissant en quelque chose de beaucoup inférieur à 96k. (Pour le moment, les fichiers sont convertis à environ 50k.)

Est-ce que quelqu'un sait comment je peux faire ça? Ce que je veux vraiment faire, c'est demander à ffmpeg de convertir tous les fichiers m4a d'un répertoire en mp3 tout en conservant au mieux la qualité audio actuelle. (Bien sûr, la conversion de formats de fichiers avec perte en fichiers avec perte risque de causer des pertes supplémentaires.)

Merci de votre aide. Si cela n’est pas possible, existe-t-il une sorte de script capable de détecter la qualité requise lorsqu’il convertit les fichiers individuellement?

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

40
user3728501

VBR

Vous pouvez utiliser l'option -qscale:a dans ffmpeg pour créer une sortie MP3 à débit binaire variable (VBR). De FFmpeg Wiki: Encodage VBR (débit binaire variable) audio mp3 :

Contrôlez la qualité avec -qscale:a (ou l'alias -q:a). Les valeurs sont spécifiques à l'encodeur. Par conséquent, pour libmp3lame, la plage est comprise entre 0 et 9, une valeur inférieure correspondant à une qualité supérieure. 0-3 donnera normalement des résultats transparents, 4 (par défaut) devrait être proche de la transparence perceptuelle et 6 produit généralement une qualité "acceptable". L'option -qscale:a est associée à l'option -V dans l'outil d'interface de ligne de commande autonome lame.

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

Encodage de plusieurs fichiers

Vous pouvez utiliser un Bash "for loop" 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

Obtenez ffmpeg

Il est recommandé d'utiliser une version récente de ffmpeg si possible. Voir la page FFmpeg Download pour des liens vers des versions pour OS X, Linux et Windows. Vous pouvez également suivre un guide pour compiler FFmpeg .

46
llogan

use FFmpeg (il existe également de nombreuses versions de l'interface graphique)

  1. MP3 est déjà interrompu (en 2017), codec obsolète. Internet est déjà passé en AAC (codec plus efficace et de qualité):

    ffmpeg -i filenameee.m4a -acodec copy output.aac
    
  2. Toutefois, si vous souhaitez toujours utiliser MP3 (car il est toujours pris en charge par plusieurs périphériques):

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

Cela a fonctionné pour moi:

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

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

Sudo apt-get install libav-tools

REMARQUE: il serait sage de sauvegarder tout dossier dans lequel vous exécutez ce script et de faire de votre mieux pour lire et comprendre ce qu'il fait before running.

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
1
jbowman

Si vous travaillez à 48 kHz et au moins 24 bits dans le fichier d'entrée (à partir d'un éditeur de fichier i.ex.), -q:a 0 reproduira le fichier à 20 kHz avec un fichier aussi volumineux que flac ... le bruit des hautes fréquences (sifflement) par les éditeurs audio de dithering ou de réduction de nez, créés lors de conversions, qui seront reproduits, puis utiliseront le fichier de données comme un HF inaudible, mais coûteux.

0
Kaiser Lima