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.