Como posso converter .flac para .mp3 com ffmpeg, mantendo todos os metadados (ou seja, convertendo o comentário Vorbis em arquivos .flac para metadados ID3v2 de .mp3)?
Como posso converter .flac para .mp3 com ffmpeg, mantendo todos os metadados (ou seja, convertendo o comentário Vorbis em arquivos .flac para metadados ID3v2 de .mp3)?
Respostas:
O comando a seguir mantém a alta qualidade em .mp3 (320 kbps) e os metadados do arquivo .flac são convertidos para o formato ID3v2, que pode ser incluído em arquivos .mp3:
ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3
ffmpeg
3.2 copia automaticamente os metadados para ID3v2 do FLAC sem a necessidade de especificar -map_metadata 0 -id3v2_version 3
, embora não copie para tags ID3v1. Eu uso uma ferramenta separada para isso.
Resposta perfeita acima. Eu o uso junto com o find para adicionar todos os arquivos FLAC em uma subárvore ao iTunes com este comando
find . -name "*.flac" -exec ffmpeg -i {} -ab 160k -map_metadata 0 -id3v2_version 3 {}.mp3 \;
Para adicionar automaticamente os arquivos resultantes ao iTunes, obtenha o diretório de importação do iTunes com
find ~/Music/ -name "Automatically Add*"
resultado, por exemplo
/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized
Em seguida, execute por exemplo
find . -name "*.mp3" -exec mv {} "/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized/" \;
Para adicionar automaticamente todas as faixas convertidas ao iTunes.
Se você quiser economizar um pouco de espaço, experimente a recomendação do hydrogenaud.io :
Muito alta qualidade: HiFi, casa, ou escuta calma, com melhor tamanho do arquivo
-V0 (~245 kbps)
,-V1 (~225 kbps)
,-V2 (~190 kbps)
ou-V3 (~175 kbps)
são recomendados. Essas configurações VBR normalmente produzirão resultados transparentes. Podem existir diferenças audíveis entre essas predefinições, mas são raras.
Fonte: http://wiki.hydrogenaud.io/index.php?title=LAME
Se você quiser usar esta opção no ffmpeg, você deve usar o -q:a 0
alias.
Controle a qualidade com
-qscale:a
(ou o alias-q:a
). Os valores são específicos do codificador, portanto, para libmp3lame, o intervalo é 0-9, onde um valor inferior é uma qualidade superior. 0-3 normalmente produzirá resultados transparentes, 4 (padrão) deve ser próximo à transparência perceptual e 6 produzirá uma qualidade "aceitável". A opção-qscale:a
é mapeada para a-V
opção na ferramenta de interface de linha de comando lame independente.
Fonte: https://trac.ffmpeg.org/wiki/Encode/MP3
Se você quiser metatags ID3v1 também, deverá adicionar o -write_id3v1 1
parâmetro.
Portanto, meu comando final é:
ffmpeg.exe -y -i input.flac -codec:a libmp3lame -q:a 0 -map_metadata 0 -id3v2_version 3 -write_id3v1 1 output.mp3
Eu estava testando o seguinte comando para converter o infile.flac
arquivo em outfile.mp3
:
ffmpeg -i infile.flac -q:a 0 outfile.mp3
No Ubuntu 16.04, o comando acima parece copiar (a maioria? Todos?) Os metadados.
-q:a 0
diz ffmpeg
para usar o VBR de mais alta qualidade.
No entanto, ffmpeg
estava transcodificando a arte do meu álbum de jpeg
para png
, o que aumentou o tamanho da capa.
Stream mapping:
Stream #0:1 -> #0:0 (mjpeg (native) -> png (native))
Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame))
(Acho que a conversão acima faz sentido, dado como ffmpeg
funciona .)
Depois de pesquisar um pouco, encontrei a -c:v copy
opção que especifica que o stream de vídeo deve ser copiado, em vez de transcodificado. O comando completo é:
ffmpeg -i infile.flac -c:v copy -q:a 0 outfile.mp3
O comando acima resulta em:
Stream mapping:
Stream #0:1 -> #0:0 (copy)
Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame))
Para converter recursivamente em mp3 todos os arquivos flac em pastas aninhadas, usei este comando:
find '~/Music/' -iname '*.flac' -exec bash -c 'D=$(dirname "{}"); B=$(basename "{}"); mkdir "$D/mp3/"; ffmpeg -i "{}" -ab 320k -map_metadata 0 -id3v2_version 3 -acodec libmp3lame "$D/mp3/${B%.*}.mp3"' \;
Ele criará uma pasta chamada "mp3" dentro daquela com os arquivos flac e, dentro da pasta mp3, salvará os arquivos mp3 relativos com uma taxa de bits de 320kbps, sem manter a extensão do arquivo antigo no nome.
$file
como "$file"
.
:r
parece ser um zsh
modificador, que não funciona em bash
. No Bash, você pode substituir "${file:r}.mp3"
por "${file%.flac}.mp3"
.
${file%.*}
Eu sei que isso não foi perguntado, mas considerando que uma das razões pelas quais isso é feito (pelo menos é o que eu queria fazer) é para que a música possa ser importada para o iTunes da Apple que não suporta FLAC. Nesse caso, faz mais sentido converter FLAC para o formato sem perdas da própria Apple, m4a. Usei este comando para converter todos os arquivos na pasta atual, mantendo tamanhos de arquivo semelhantes.
find . -name "*.flac" -exec ffmpeg -i {} -map_metadata 0 -acodec alac {}.m4a \;
Este script flac2mp3.sh usa ffmpeg
para converter uma árvore de pastas de arquivos FLAC em outra árvore de pastas de arquivos MP3. A arte da capa está incluída, quando presente. Você pode definir uma CORES
variável para criar trabalhos em segundo plano para converter vários arquivos de uma vez.
ffmpeg
perguntas sobre o uso do cli no Superusuário . Stack Overflow é apenas para questões envolvendo programação. Além disso, o FLAC suporta oficialmente apenas comentários Vorbis , então presumo que você queira converter para ID3v2 em vez de "manter".