FFMPEG: Converta arquivos m4a para mp3 sem perda significativa de informação / qualidade. Taxa de bits automatizada

37

Eu tenho uma carga de arquivos de áudio (cerca de 1000) que eu quero converter de m4a para mp3 para que eu possa usá-los em um CD player que tenha uma porta USB.

Eu tentei fazer algo simples como: ffmpeg -i FILE.m4a FILE.mp3 , mas isso parece reduzir o bitrate para um valor muito baixo, que não é o que eu quero.

Da mesma forma, eu não quero converter usando uma taxa de bits constante, como 320k, porque alguns dos arquivos que estou convertendo são 320k m4a e alguns são de baixa qualidade como 96k m4a.

Parece não fazer sentido forçar 320k, já que alguns arquivos se tornarão muitas vezes maiores do que precisam. Da mesma forma, não faz sentido destruir todos os meus arquivos 320k, convertendo-os em algo muito inferior a 96k. (No momento, os arquivos estão sendo convertidos para cerca de 50k).

Alguém sabe como posso fazer isso? O que eu realmente quero fazer é dizer ao ffmpeg para converter todos os arquivos m4a em um diretório para mp3, mantendo a qualidade de áudio atual da melhor maneira possível. (É claro que é provável que haja algumas perdas extras na conversão de formatos de arquivos com perdas para perdas.)

Obrigado pela sua ajuda. Se isso não for possível, existe algum tipo de script que detecte a qualidade necessária ao converter arquivos individualmente?

PS: Estou trabalhando em um Mac Intel, mas também tenho uma caixa Ubuntu.

    
por user3728501 20.01.2014 / 21:23

5 respostas

42

VBR

Você pode usar a opção -qscale:a em ffmpeg para criar uma saída MP3 de taxa de bits variável (VBR). De FFmpeg Wiki: Codificando o áudio mp3 VBR (Variable Bit Rate) :

Control quality with -qscale:a (or the alias -q:a). Values are encoder specific, so for libmp3lame the range is 0-9 where a lower value is a higher quality. 0-3 will normally produce transparent results, 4 (default) should be close to perceptual transparency, and 6 usually produces an "acceptable" quality. The option -qscale:a is mapped to the -V option in the standalone lame command-line interface tool.

Você terá que experimentar para ver qual valor é aceitável para você. Veja também Áudio do Hidrogênio: Configurações Recomendadas do Codificador LAME .

Codificando vários arquivos

Você pode usar um Bash "for loop" para codificar todos os arquivos em um diretório:

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

Obter ffmpeg

É recomendável usar uma compilação recente de ffmpeg , se possível. Consulte a página Download do FFmpeg para obter links para compilações para OS X, Linux e Windows. Você também pode seguir um guia para compilar o FFmpeg .

    
por 20.01.2014 / 22:46
19

use FFmpeg (também há muitas versões de GUI)

  1. MP3 já está descontinuado (em 2017), codec obsoleto. Internet já mudou para AAC (codec mais eficiente e de qualidade):

    ffmpeg -i filenameee.m4a -acodec copy output.aac
    
  2. No entanto, se você ainda deseja usar o MP3 (porque ainda é suportado por mais dispositivos):

    ffmpeg -i filenameee.m4a -acodec libmp3lame -ab 256k output.mp3
    
por 24.08.2015 / 14:05
3

Isso funcionou para mim:

ffmpeg -i testing.m4v -b:a 192K -vn testing.mp3
    
por 25.04.2016 / 10:07
1

Usando as respostas existentes como base, escrevi um script bash que deve fazer exatamente o que a pergunta faz em uma máquina Ubuntu (testada em 16.04). Você precisará instalar o avprobe , que está no pacote libav-tools . Você pode instalar avprobe com o seguinte comando

sudo apt-get install libav-tools

OBSERVAÇÃO: Seria sensato fazer um backup de qualquer pasta na qual você executasse esse script, além de fazer o melhor esforço para ler e entender o que está fazendo antes em execução.

Eu não testei muito rigorosamente para 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
    
por 23.05.2017 / 09:04
0

Se você trabalha a 48 KhZ e pelo menos 24 bits no arquivo de entrada (a partir de um editor de arquivo i.ex.) -q:a 0 reproduzirá 20 kHz em arquivos não tão grandes como flac ... Mas baixa qualidade áudio, a menos que você reduza o ruído de altas freqüências (chiados) por editores de áudio de redução de ruídos ou nariz, criados em conversões, que serão reproduzidos, então usará o arquivo de dados como um HF inaudível, mas um ruído caro.

    
por 01.05.2016 / 04:52