Remova metadados de todos os formatos com o FFmpeg


43

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

Posso apenas definir metadados especiais para cada formato por homem ffmpeg . Alguma opção ou método para limpar todos os metadados e remover a 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

Respostas:


63

Modificando ligeiramente a linha de comando por @izx , obtive 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. Observe que você não pode simplesmente remover todos os metadados; algumas coisas permanecerão. No entanto, não alterei a data de criação, o que é estranho, porque parecia funcionar na versão Ubuntu.

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


2
Em movou mp4arquivos, data de criação é um campo inteiro nos cabeçalhos cabeçalho filme e trilha (expresso em segundos desde 1904). Embora você possa configurá-lo como 0 ou algum outro valor fixo, não há como removê-lo e ainda ter um arquivo movou válido mp4.
Mark4o

Eu sei que não consegui removê-lo completamente, mas a alteração não foi possível por algum motivo.
slhck

3
Usando o ffmpeg atual, o horário de criação pode ser alterado com -metadata creation_time=2012-12-17T21:30:00(UTC).
Mark4o

1
Como posso modificar isso para remover o título também? Atualmente, define o título para algo gerado automaticamente. Eu quero ver o nome completo do arquivo como título no final.
Rookie

2
@Rookie Então você precisa definir -metadata title="Some Value". Ou, para um arquivo, algo parecido com isto para um arquivo MP4:ffmpeg -i "$file" -map_metadata -1 -c copy -metadata title="$file" "${file%%*.mp4}-new.mp4
slhck 15/06

9

Minha solução para remover metadados, capítulos, para alterar o tempo e o título da criação. Dessa forma, qualquer metacontente 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"

1
Essa variante foi útil para mim, obrigado. Eu gostaria que o manual ffmpeg mostrasse mais exemplos como o acima; stackoverflow, superusuário etc ... todos se tornam muito úteis porque contêm muitas informações úteis.
shevy

8

NOTA: Eu já atualizei ffmpeg(anteriormente eu tinha a versão desatualizada dos avconvrepositórios Ubuntu).

Agora o @ slhck's -map_metadata -1 funciona perfeitamente.

Eu recomendo a solução do @ slhck porque é menos digitada e atualizada. Estou deixando isso aqui para qualquer pessoa que use uma versão desatualizada.


A maneira mais fácil de fazer isso é configurar -map_metadatapara usar um dos fluxos de entrada, em vez de usar metadados globais. 99% das vezes 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, pois a sintaxe deles sempre está na minha experiência.

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

Isso pegará os metadados do primeiro fluxo de dados (normalmente o fluxo de vídeo) e o utilizará para substituir os metadados globais do arquivo contêiner. Isso funciona porque, na maioria das vezes, os fluxos de dados não têm metadados significativos gravados neles; no entanto, às vezes o fazem, e você deseja se livrar completamente desses metadados. Infelizmente, a única maneira de pensar nisso foi usando 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 tira vantagem do fato de que os arquivos WAV não podem conter metadados (desde que o formato foi criado antes da existência das tags de metadados).

Ambos os métodos apagaram todos os metadados de um arquivo em que os testei - tudo o que exiftoolfoi relatado 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, portanto, isso deve ser preferido.


1
Arquivos WAVE, como outros arquivos baseados em RIFF (por exemplo, AVI), na verdade, podem conter tags de metadados usando um pedaço de lista "INFO". Apenas não é usado com muita frequência.
blerontin 27/09/17
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.