Como removo todos os metadados de um arquivo de filme quicktime?

6

Minha câmera usa arquivos .mov como filmes. Como posso remover todos os metadados deles para que eu possa ter certeza de compartilhá-los no youtube sem compartilhar acidentalmente quando / onde eles foram filmados, que tipo de câmera eu tenho, etc. Uma linha de comando é legal, mas se for muito confusa , um programa GUI seria melhor.

    
por John Baber-Lucero 20.05.2012 / 00:59

2 respostas

11

Bem, eu tenho uma resposta da linha de comando:

Nota: Isso só funciona com o ffmpeg incluído no Ubuntu por padrão: ele terá uma versão semelhante a 0.8.1-4:0.8.1-0ubuntu1 ; NÃO funcionará com quaisquer binários ffmpeg que você instalou de um PPA de terceiros ou compilou você mesmo. Sua milhagem pode variar.

  • Instale estes: sudo apt-get install ffmpeg libimage-exiftool-perl
  • Em seguida, navegue até onde seu arquivo .mov de origem está, nós o chamamos de test.mov
  • E corra:

    ffmpeg -i test.mov -map_metadata -1 -vcodec copy -acodec copy test-nometadata.mov
    
  • Você pode usar exiftool para verificar se funcionou; exiftool test.mov e exiftool test-nometadata.mov devem mostrar a diferença.

  • Aqui estão os meus exemplos de saídas de um antigo .mov da Nikon com toneladas de metadados (pastebin'd):

    1. antes - 80 linhas de metadados
    2. após - 52 linhas de metadados (mesmo que o create, modify etc. tenha sido anulado)

(note que a ordem no ffmpeg acima é essencial - os arquivos de entrada e saída devem ser especificados no final)

    
por ish 20.05.2012 / 01:34
2

NOTA: com uma versão recente do ffmpeg (e presumivelmente avconv, mas eu não testei isso), você pode simplesmente usar:

ffmpeg -i input.mp4 -map 0 -map_metadata -1 -c copy output.mp4

O uso de -map_metadata -1 cria uma fonte de metadados 'fictícia' vazia. Para a versão do avconv nos repositórios ou outras versões desatualizadas, use o método descrito abaixo.

Usando avconv (ou ffmpeg, se essa é a sua arma de escolha, a sintaxe é a mesma):

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.

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.

BONUS: para criar uma versão em branco de cada MP4 em um diretório, e depois substituir as versões de metadados pelas versões em branco (aviso - praticamente irreversível):

for f in *.mp4; do avconv -i "$f" -map 0 -map_metadata 0:s:0 -c copy "out.$f"; mv "out.$f" "$f"; done
    
por evilsoup 18.12.2012 / 07:49