Quero poder adicionar marcas de capítulo a todos os principais formatos de arquivo de áudio, o que o FFmpeg faz (usando a -map_chapters
opção) – mas o FFmpeg sempre destrói os outros metadados. Quaisquer tags que ele não reconheça, ele remove/remove do arquivo de destino. Como adiciono marcas de capítulo a um arquivo de áudio por meio da linha de comando sem manipular nenhum outro metadado?
relate perguntas
-
-map_metadata captura vários metadados de fluxo de áudio
-
Codec e configuração para saída ffmpeg de taxa de bits mais baixa
-
Como salvar o fluxo de vídeo TS com ffmpeg 2.0.2?
-
Extraia I-frames para imagens rapidamente
-
Os vídeos compactados podem ser decodificados de volta ao formato original não compactado?
As soluções simples
Existem algumas soluções mais simples que são específicas para certos formatos de arquivo: Para ID3 (
.mp3
, etc.) hámp3chap
, para VorbisComment (.ogg
,.flac
,.opus
, etc.) há… bem,vorbiscomment
, e para ISOBMFF (.mp4
,.m4a
,.m4b
, etc.) há… realmente nada além de FFmpeg, no momento em que escrevo. (Se você estiver bem com um programa de GUI, há Kid3 com o plugin MP4v2 habilitado nas configurações.) Se alguém quiser conselhos sobre como usá-los, me avise e eu posso ajudar – mas por enquanto, gostaria de me concentrar em…A solução “tamanho único”
Há uma maneira de adicionar capítulos de forma confiável da mesma forma para todos os principais formatos de metadados de áudio – ID3 ( , etc.), ISOBMFF ( , , , etc.) e VorbisComment ( , , , etc.). É um pouco complicado, no entanto, e é mais adequado para inclusão em scripts, em vez de uso manual.
.mp3
.mp4
.m4a
.m4b
.ogg
.flac
.opus
Requer duas ferramentas:
Dado um arquivo de áudio
audio.m4a
(pode ser qualquer formato, não apenas.m4a
) e um arquivo de metadados FFmpeg contendo os capítulos (ffmetadata.txt
você pode construí-lo manualmente ou, por exemplo, usar este script Python para converter uma exportação de rótulos do Audacity ), execute as seguintes etapas:Em seguida, substitua o arquivo original pelo arquivo temporário (
mv -f temp.m4a audio.m4a
no Linux;move -force temp.m4a audio.m4a
no PowerShell).Nota: Fica um pouco mais complicado se o arquivo original já tiver capítulos que você deseja substituir, pois o Kid3 copiará capítulos para certos formatos de arquivo e, portanto, redefinirá aqueles que você acabou de sobrescrever. Para isso, criei um script QML que você pode baixar e executar
kid3-cli
– os passos então se tornam:Esta solução deve funcionar perfeitamente para tudo.
Algumas notas…
Nos meus dias de pesquisa para isso, me deparei com algumas informações incidentais que podem ser úteis para alguém, algum dia:
desc
tag description nos metadados ISOBMFF/MP4), nos colocando na mesma posição deplorável do FFmpeg.-movflags disable_chpl
à sua invocação do FFmpeg. Em arquivos ISOBMFF/MP4, por padrão, o FFmpeg cria capítulos no estilo QuickTime (usando oCHAP
atom) e capítulos de metadados do Nero (usando oCHPL
atom). Na prática, no entanto, os capítulos no estilo QuickTime têm suporte mais difundido.-map_metadata
e não-map_chapters
para arquivos ISOBMFF/MP4. É por isso que ambos-map_chapters 1
e-map_metadata 1
são necessários.paste
esave
) parecem funcionar somente quando você seleciona um arquivo enquanto ele está dentro do diretório de trabalho atual. Se você estiver executando os comandos do Kid3 de outro diretório, adicione-c "cd 'your-audio-directory/'"
a qualquer momento antes do . finalselect
.