FFMPEG: converti i file m4a in mp3 senza una significativa perdita di informazioni / qualità. Bitrate automatico


45

Ho un sacco di file audio (circa 1000) che voglio convertire da m4a in mp3, quindi posso usarli su un lettore CD che ha una porta USB.

Ho provato a fare qualcosa di semplice come: ffmpeg -i FILE.m4a FILE.mp3ma questo sembra ridurre il bitrate a un valore molto basso, che non è quello che voglio.

Allo stesso modo non voglio convertire usando un bitrate costante, come 320k, perché alcuni dei file che sto convertendo sono 320k m4a e alcuni sono di bassa qualità come 96k m4a.

Non ha senso forzare 320k, poiché alcuni file diventeranno molte volte più grandi di quanto debbano essere. Allo stesso modo non ha senso distruggere tutti i miei file da 320k convertendoli in qualcosa di molto inferiore a 96k. (Al momento, i file vengono convertiti in circa 50k.)

Qualcuno sa come posso farlo? Quello che voglio davvero fare è dire a ffmpeg di convertire tutti i file m4a in una directory in mp3 mantenendo la qualità audio attuale nel miglior modo possibile. (Naturalmente è probabile che si verifichino alcune perdite extra dalla conversione da formati di file con perdita a formati con perdita).

Grazie per l'aiuto. Se ciò non è possibile, esiste una sorta di script che potrebbe rilevare la qualità richiesta mentre converte i file singolarmente?

PS: sto lavorando su un Mac Intel, ma ho anche una scatola Ubuntu.

Risposte:


51

VBR

È possibile utilizzare l' -qscale:aopzione in ffmpegper creare un'uscita MP3 bitrate variabile (VBR). Da FFmpeg Wiki: codifica dell'audio mp3 VBR (Variable Bit Rate) :

Controlla la qualità con -qscale:a(o l'alias -q:a). I valori sono specifici dell'encoder, quindi per libmp3lame l'intervallo è 0-9, dove un valore inferiore è una qualità superiore. 0-3 produrrà normalmente risultati trasparenti, 4 (impostazione predefinita) dovrebbe essere vicina alla trasparenza percettiva e 6 di solito produce una qualità "accettabile". L'opzione -qscale:aè associata -Vall'opzione nello strumento di interfaccia della riga di comando di lame standalone.

Dovrai sperimentare per vedere quale valore è accettabile per te. Vedi anche Hydrogen Audio: impostazioni consigliate per l'encoder LAME .

Codifica di più file

Puoi usare un Bash "for loop" per codificare tutti i file in una directory:

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

Ottenere ffmpeg

Si consiglia di utilizzare una build recente di ffmpegse possibile. Vedi la pagina di download di FFmpeg per i collegamenti ai build per OS X, Linux e Windows. Puoi anche seguire una guida per compilare FFmpeg .


1
Ok grazie, i comandi hanno funzionato ma non penso che stia facendo quello che volevo. Ho impostato -q: uno 0, che sta facendo quello che mi aspettavo per m4a di qualità superiore (producendo file di grandi dimensioni con velocità vbr più alte) ma i file di qualità inferiore penso che siano ancora convertiti in file di grandi dimensioni, con vbr di circa 250-260 KB / s. Mi sarei aspettato che i file che erano circa 96k in formato m4a fossero convertiti in un bitrate simile con l'encoder lame in modalità vbr. Suppongo di non aver capito bene come funziona la modalità di codifica VBR?
user3728501,

21

Usa FFmpeg (ci sono anche versioni della GUI disponibili, ma la mia risposta si riferisce solo alla riga di comando)

  1. MP3 è ufficialmente fuori produzione ( dal 2017 ), obsoleto e codec morto. Internet è già stato convertito in CAA (codec più efficiente e di qualità) e si consiglia vivamente a tutti di utilizzare quel codec:

    ffmpeg -i filenameee.m4a -acodec copy output.aac
    
  2. Tuttavia, se per qualche motivo hai ancora bisogno di MP3 (perché è supportato da più dispositivi ancora):

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

4
Poiché la domanda riguarda la qualità, forse sarà utile se convertito in 256k anziché in 128.
VessoVit

3

Questo ha funzionato per me:

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

1

Usando le risposte esistenti come base ho scritto uno script bash che dovrebbe fare esattamente quello che la domanda pone su una macchina Ubuntu (testata su 16.04). Dovrai installare quello avprobeche è nel libav-toolspacchetto. È possibile installare avprobecon il seguente comando

sudo apt-get install libav-tools

NOTA: sarebbe saggio eseguire un backup di qualsiasi cartella in cui si esegue questo script e fare del proprio meglio per leggere e capire cosa sta facendo prima di eseguirlo.

Non ho testato molto rigorosamente quindi 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

0

Se lavori a 48 KhZ e almeno 24 bit nel file di input (da un editor di file i.ex.) -q:a 0riproducerai i 20 kHz in un file non così grande come flac ... Ma audio di bassa qualità a meno che non riduca il rumore da alte frequenze (sibilo) da dithering o redattori audio di riduzione del naso, creati in conversioni, che verranno riprodotti, quindi utilizzerà il file di dati come un HF impercettibile, ma rumore costoso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.