Elimina i metadati da tutti i formati con FFmpeg


43

Come posso rimuovere tutti i metadati da tutti i formati tramite FFmpeg?

Posso semplicemente impostare metadati speciali per ogni formato per man ffmpeg . Qualche opzione o metodo per cancellare tutti i metadati e rimuovere i media da tutti i metadati disponibili su 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

Risposte:


63

Modificando leggermente la riga di comando con @izx , ho ottenuto questo:

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

Il risultato è (di nuovo, verificato con exiftool), un record di metadati ridotto da 81 a 52 righe. Nota che non puoi semplicemente rimuovere tutti i metadati, alcune cose rimarranno. Tuttavia, non ho fatto cambiare la data di creazione, il che è strano perché sembrava funzionare nella versione di Ubuntu.

Ho pubblicato sulla mailing list di FFmpeg , chiedendo se ci fossero aggiornamenti o commenti a riguardo. Vediamo cosa hanno da dire.


2
In movo mp4file, la data di creazione è un campo intero nell'intestazione del filmato e nelle intestazioni delle tracce (espresse in secondi dal 1904). Sebbene sia possibile impostarlo su 0 o su un altro valore fisso, non è possibile rimuoverlo e disporre di un file movo di un mp4file valido .
mark4o

So di non poterlo rimuovere del tutto, ma per qualche motivo non è stato possibile modificarlo.
Slhck,

3
Utilizzando l'attuale ffmpeg, l'ora di creazione può essere modificata con -metadata creation_time=2012-12-17T21:30:00(UTC).
mark4o

1
Come posso modificarlo per rimuovere anche il titolo? Attualmente imposta il titolo su qualcosa generato automaticamente. Voglio vedere il nome file completo come titolo alla fine.
Rookie,

2
@Rookie Quindi devi impostare -metadata title="Some Value". O, per un file, qualcosa del genere per un file MP4:ffmpeg -i "$file" -map_metadata -1 -c copy -metadata title="$file" "${file%%*.mp4}-new.mp4
slhck,

9

La mia soluzione per eliminare metadati, capitoli, per cambiare il tempo di creazione e il titolo. In questo modo qualsiasi metacontento dovrebbe essere diverso dal file originale:

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
Quella variante mi è stata utile, grazie. Vorrei che il manuale di ffmpeg mostrasse più esempi come sopra; StackOverflow, superutente ecc ... diventano tutti molto utili perché contengono molte informazioni utili.
Shevy il

8

NOTA: da allora ho aggiornato ffmpeg(in precedenza avevo la versione obsoleta dei avconvrepository Ubuntu).

Ora @ slhck -map_metadata -1 funziona perfettamente.

Raccomando la soluzione di @ slhck perché è meno digitante e aggiornata. Lo lascio qui per chiunque utilizzi una versione obsoleta.


Il modo più semplice per eseguire questa operazione consiste -map_metadatanell'impostare l'utilizzo di uno dei flussi di input anziché utilizzare i metadati globali. Il 99% delle volte dovrebbe funzionare. NOTA: sto usando avconv, perché è nei repository Ubuntu 12.04; questo sarà probabilmente compatibile con ffmpeg, poiché la loro sintassi è sempre nella mia esperienza.

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

Questo prenderà i metadati dal primo flusso di dati (normalmente il flusso video) e li userà per sostituire i metadati globali del file contenitore. Questo funziona perché la maggior parte delle volte, i flussi di dati non hanno metadati significativi scritti su di essi; tuttavia, a volte lo fanno e tu vuoi sbarazzarti completamente di quei metadati. Sfortunatamente, l'unico modo in cui mi viene in mente di farlo è stato usare una pipe e due processi avconv.

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

Ciò sfrutta il fatto che i file WAV non possono contenere metadati (poiché il formato è stato creato prima dell'esistenza dei tag metadati).

Entrambi questi metodi hanno cancellato tutti i metadati su un file su cui li avevo appena testati - tutto ciò che exiftoolriportava erano le informazioni sul codec e avprobe non mi ha segnalato alcun metadata. L'uso di una pipe per questo è piuttosto brutto e il primo metodo funzionerà nel 99% dei casi, quindi dovrebbe essere preferito.


1
I file WAVE, come altri file basati su RIFF (ad es. AVI) possono effettivamente contenere tag di metadati usando un pezzo di elenco "INFO". Non viene usato molto spesso.
blerontin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.