Retirar metadados de todos os formatos com o FFmpeg

29

Como posso remover todos os metadados de todos os formatos via FFmpeg?

Eu posso apenas definir metadados especiais para cada formato por man ffmpeg . Qualquer opção ou método para limpar todos os metadados e remover mídia de todos os metadados disponíveis no ffmpeg?

   -metadata key=value
       Set a metadata key/value pair.

       For example, for setting the title in the output file:

               ffmpeg -i in.avi -metadata title="my title" out.flv
    
por sweb 25.06.2012 / 18:22

3 respostas

42

Ligeiramente modificando a linha de comando por @izx , recebi o seguinte:

ffmpeg -i in.mov -map_metadata -1 -c:v copy -c:a copy out.mov

O resultado é (novamente, verificado com exiftool ), um registro de metadados reduzido de 81 para 52 linhas. Note que você não pode simplesmente remover todos os metadados, algumas coisas vão ficar. No entanto, eu não consegui mudar a data de criação, o que é estranho porque parecia funcionar na versão do Ubuntu.

Eu postei na lista de discussão do FFmpeg , perguntando se havia alguma atualização ou comenta sobre isso. Vamos ver o que eles têm a dizer.

    
por 23.05.2012 / 19:44
5

OBSERVAÇÃO: Já atualizei ffmpeg (anteriormente eu tinha a versão desatualizada de avconv dos repositórios do Ubuntu).

Agora, o -map_metadata -1 do @shhck funciona perfeitamente.

Eu recomendo @solução do slhck porque é menos digitação e atualizada. Estou deixando isso aqui para qualquer um usando uma versão desatualizada.

A maneira mais fácil de fazer isso é definir -map_metadata para usar um dos fluxos de entrada, em vez de usar metadados globais. 99% do tempo isso deve funcionar. NOTA: Estou usando o avconv, porque está nos repositórios do Ubuntu 12.04; Isso provavelmente será compatível com o ffmpeg, já que sua sintaxe sempre está na minha experiência.

avconv -i input.mp4 -map 0 -map_metadata 0:s:0 -c copy output.mp4

Isso levará os metadados do primeiro fluxo de dados (normalmente o fluxo de vídeo) e os usará para substituir os metadados globais do arquivo contêiner. Isso funciona porque na maioria das vezes, os fluxos de dados não possuem metadados significativos gravados para eles; no entanto, às vezes, e você quer se livrar completamente desses metadados. Infelizmente, a única maneira que posso pensar em fazer isso usou um pipe e dois processos avconv.

avconv -i input.mp4 -f wav - | avconv -i - -i input.mp4 -map 1 -map_metadata 0 -c copy output.mp4

Isso aproveita o fato de que os arquivos WAV não podem conter metadados (já que o formato foi criado antes da existência de tags de metadados).

Ambos os métodos apagaram todos os metadados em um arquivo que acabei de testá-los - tudo o que exiftool relatou foram as informações do codec e o avprobe não relatou nenhum metadado para mim. Usar um pipe para isso é muito feio, e o primeiro método funcionará em 99% dos casos, então isso deve ser o preferido.

    
por 18.12.2012 / 07:44
4

Minha solução para remover metadados, capítulos, para alterar o tempo de criação e o título. Desta forma, qualquer meta-conteúdo deve ser diferente do arquivo original:

ffmpeg -y -i "test.mkv" -c copy -map_metadata -1 -metadata title="My Title" -metadata creation_time=2016-09-20T21:30:00 -map_chapters -1 "test.mkv"
    
por 28.09.2015 / 13:56