Converta .flac para .mp3 com ffmpeg, mantendo todos os metadados
88
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)?
Observe que, da próxima vez, você deve fazer ffmpegperguntas 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".
llogan
Ok, resolvi minha pergunta. Eu perguntei aqui porque vi perguntas como essa no StackOverflow (por exemplo, isso ou isso ) e presumi que seria interessante compartilhar meu conhecimento. Além disso, vejo que há uma tag ffmpeg , então por que não compartilho minha solução aqui? O ffmpeg é usado em muitos aplicativos por muitos desenvolvedores.
Vito Gentile
3
A tag ffmpeg diz, "Perguntas sobre o uso interativo da ferramenta de linha de comando FFmpeg devem ser feitas no Superusuário.". Não é grande coisa, mas eu só queria apontar isso, já que há muitas perguntas fora do tópico aqui na minha opinião.
llogan
Respostas:
152
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:
É importante notar que "ffmpeg" pode precisar ser substituído por "avconv".
shockburner
5
O FWIW ffmpeg3.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.
Dai
1
as letras ainda não são copiadas
user151496
1
Ele divide flac se houver várias partes?
Artyom
1
@Artyom Você provavelmente deve ter o arquivo cue junto com seu flac, onde os pontos de divisão estão marcados. Se sim, você pode usar shnsplit (console) ou flacon (GUI) para dividir seu arquivo e converter as partes para mp3. Se você tiver apenas um flac, poderá escrever uma cui para ele ou usar as opções -ss e -t do ffmpeg para cortar cada música.
56
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
Anedota: todos os usuários em nossa empresa têm nomes de estrelas, abreviados para 3-5 caracteres. O meu é "sirius", curto senhor;)
user2707001
Opção não reconhecida 'nome'.
MonsterMMORPG
14
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.
Se você quiser usar esta opção no ffmpeg, você deve usar o -q:a 0alias.
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 -Vopção na ferramenta de interface de linha de comando lame independente.
Depois de pesquisar um pouco, encontrei a -c:v copyopção que especifica que o stream de vídeo deve ser copiado, em vez de transcodificado. O comando completo é:
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.
:rparece ser um zshmodificador, que não funciona em bash. No Bash, você pode substituir "${file:r}.mp3"por "${file%.flac}.mp3".
mivk
para mostrar apenas o nome do arquivo do arquivo, em uso bash${file%.*}
Evhz
2
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.
Opção não reconhecida 'nome'. Erro ao dividir a lista de argumentos: Opção não encontrada
MonsterMMORPG
@MonsterMMORPG você provavelmente esqueceu de digitar o. após o comando find. O . diz a find para procurar na pasta atual e -name diz a ele para procurar nomes de arquivo correspondentes.
Dhiraj Gupta
2
Este script flac2mp3.sh usa ffmpegpara 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 CORESvariá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".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:
fonte
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
Para adicionar automaticamente os arquivos resultantes ao iTunes, obtenha o diretório de importação do iTunes com
resultado, por exemplo
Em seguida, execute por exemplo
Para adicionar automaticamente todas as faixas convertidas ao iTunes.
fonte
Se você quiser economizar um pouco de espaço, experimente a recomendação do hydrogenaud.io :
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.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 é:
fonte
Eu estava testando o seguinte comando para converter o
infile.flac
arquivo emoutfile.mp3
:No Ubuntu 16.04, o comando acima parece copiar (a maioria? Todos?) Os metadados.
-q:a 0
dizffmpeg
para usar o VBR de mais alta qualidade.No entanto,
ffmpeg
estava transcodificando a arte do meu álbum dejpeg
parapng
, o que aumentou o tamanho da capa.(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 é:O comando acima resulta em:
fonte
Para converter recursivamente em mp3 todos os arquivos flac em pastas aninhadas, usei este comando:
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.
fonte
One-liner para converter todos os
.flac
arquivos.mp3
em um único diretório, mantendo a maioria dos metadados:for file in *.flac; do ffmpeg -i $file -q:a 0 ${file:r}.mp3; done
(Nota:
${file:r}
remove a extensão do caminho de arquivo fornecido)fonte
$file
como"$file"
.:r
parece ser umzsh
modificador, que não funciona embash
. 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 \;
fonte
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 umaCORES
variável para criar trabalhos em segundo plano para converter vários arquivos de uma vez.fonte