Como usar o ffmpeg para adicionar metadados a um arquivo AAC sem recodificar?

13

Estou usando o ffmpeg para extrair apenas o fluxo de áudio de um arquivo de vídeo:

ffmpeg -i video.mp4 -vn -acodec copy audio.aac

Isso produz um arquivo de áudio limpo, mas sem nenhum metadado.

Para adicionar metadados, o ffmpeg tem uma opção de linha de comando:

ffmpeg -i video.mp4 -vn -acodec copy -metadata title="My Title" audio.aac

Isso é executado sem erros, mas quando o arquivo de saída é verificado com ffprobe, ele não possui tags de metadados.

Se o contêiner de saída for alterado para mp4, os metadados poderão ser configurados e aparecerão no arquivo de saída:

ffmpeg -i video.mp4 -vn -acodec copy -metadata title="My Title" audio.mp4

Aqui está a parte interessante; se eu usar o Banshee para editar os metadados de um arquivo .aac existente, use ffmpeg para processar o arquivo da mesma maneira, os metadados originais serão copiados com êxito para o novo arquivo .aac.

ffmpeg -i metadata.aac -vn -acodec copy audio.aac

mas, as tentativas de alterar os metadados não têm efeito:

ffmpeg -i metadata.aac -vn -acodec copy -metadata title="My Title" audio.aac

Portanto, parece que o contêiner .aac pode conter metadados e o ffmpeg pode copiá-lo da entrada para a saída, mas não pode alterá-lo quando o codec de cópia é usado.

Alguém sabe uma maneira de fazer com que o ffmpeg altere os metadados em um contêiner aac sem precisar recodificar?

Como alternativa, existe outra ferramenta genérica que eu poderia estar usando para definir os metadados após o processamento do arquivo?

Muito obrigado. Chris.

Chris C.
fonte

Respostas:

12

O objetivo era produzir um arquivo somente de áudio a partir de um arquivo de vídeo sem recodificação e introduzir metadados reconhecíveis pelos players de mídia. O ambiente é o Debian GNU / Linux.

Gostaria de agradecer à @bootload por me colocar no caminho certo para encontrar uma resposta.

O ffmpeg parece não oferecer suporte à adição de tags de metadados aos arquivos de saída .AAC, no entanto, aqui estão duas soluções possíveis.

  1. Os utilitários de linha de comando id3 e id3v2 (disponíveis nos repositórios padrão) podem aplicar tags id3 a um arquivo de áudio .aac. O Nautilus reconheceu os estilos de tags v1 e v2, portanto, ambos devem funcionar. As mesmas tags foram reconhecidas pelo media player Banshee.
id3v2 -t "My Title" audio.aac
  1. O ffmpeg pode adicionar metadados a um contêiner MP4, mas uma extensão .mp4 no Nautilus aparecerá como um arquivo de vídeo. A Apple Inc. usa extensões não padrão no contêiner MP4 para distinguir arquivos de vídeo (.m4v) dos arquivos de áudio (.m4a). Essas extensões são reconhecidas no Debian pelo Nautilus e pelo ffmpeg. Então,
ffmpeg -i video.mp4 -vn -acodec copy -metadata title="My Title" audio.m4a

produzirá um arquivo somente de áudio reconhecido pelo Nautilus e o ffmpeg poderá adicionar metadados ao contêiner com segurança.

Chris C.
fonte
3

Qual é o hardware pretendido? É para um dispositivo Apple iP *? Nesse caso, tente http://atomicparsley.sourceforge.net/ Caso contrário, tente http://ffmpeg.org/ffmpeg.html#Examples usando o método mex / demux "INI codificado em UTF-8" . (Extraia os metadados como arquivo utf8 e modifique e reinsira).

bootload
fonte
O ambiente é o Debian GNU / Linux.
26611 Chris C.
A documentação do ffmpeg não é clara sobre como usar o metadado muxer / desmuxer, embora o link do documento mostre o formato do arquivo resultante. Você pode fornecer um exemplo de linha de comando de como isso seria feito? Obrigado.
Chris C.
@ChrisC não parece bom. Sem percorrer as especificações do aac & ffmpeg para verificar isso, parece que os metadados honrados pelo ffmpeg estão listados aqui ~ wiki.multimedia.cx/index.php?title=FFmpeg_Metadata#Basic_Usage e acc não é suportado. Usando o cli para outros formatos, você segue o padrão 'ffmpeg -i track05.wav -metadata title = "Faixa # 5" -metadata author = "Artista desconhecido" -acodec alac -y track05.m4a, por exemplo. O padrão generalizado é ffmpeg -i <SOURCE> -metadata key = "value" <SOURCE>. Este é exatamente o processo que você seguiu :(
bootload
Vamos ficar muito específicos. Qual é o formato dos metadados para os quais você deseja codificar? Estamos falando de ID3? Com que formato você finalmente vai trabalhar?
bootload
Dei uma olhada ao redor para ver o que o AAC suporta. Pode não haver um formato oficial, mas dentro do Debian ID3V1 e ID3V2 ambos parecem funcionar. O Banshee parece estar colocando tags ID3V2 ao usar seu editor.
Chris C.
1

O MP4Box (parte do pacote "gpac") envolve arquivos AAC com contêineres MP4 sem alterar os dados originais. Os metadados podem ser adicionados usando praticamente qualquer software de marcação:

MP4Box -add old.aac new.mp4
Gid
fonte