Supprimez les métadonnées de tous les formats avec FFmpeg

43

Comment supprimer toutes les métadonnées de tous les formats via FFmpeg?

Je peux simplement définir des métadonnées spéciales pour chaque format par homme ffmpeg . Une option ou une méthode pour effacer toutes les métadonnées et supprimer les médias de toutes les métadonnées disponibles sur 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
sweb
la source

Réponses:

63

Modifiant légèrement la ligne de commande par @izx , j'ai obtenu ceci:

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

Le résultat est (encore une fois, vérifié avec exiftool), un enregistrement de métadonnées réduit de 81 à 52 lignes. Notez que vous ne pouvez pas simplement supprimer toutes les métadonnées, certaines choses resteront. Cependant, je n'ai pas changé la date de création, ce qui est étrange car cela semblait fonctionner dans la version Ubuntu.

J'ai posté sur la liste de diffusion FFmpeg , demandant s'il y avait des mises à jour ou des commentaires à ce sujet. Voyons ce qu'ils ont à dire.

slhck
la source
2
Dans movou mp4fichiers, la date de création est un champ entier dans l'en-tête du film et les en-têtes de piste (exprimés en secondes depuis 1904). Bien que vous puissiez le définir sur 0 ou sur une autre valeur fixe, il n'y a aucun moyen de le supprimer tout en conservant un fichier movou valide mp4.
mark4o
Je sais que je ne pouvais pas le supprimer complètement, mais le changement n'était pas possible pour une raison quelconque.
slhck
3
En utilisant le ffmpeg actuel, l'heure de création peut être modifiée avec -metadata creation_time=2012-12-17T21:30:00(UTC).
mark4o
1
Comment puis-je modifier cela pour supprimer le titre aussi? Actuellement, il définit le titre sur quelque chose généré automatiquement. Je veux voir le nom de fichier complet comme titre à la fin.
Rookie
2
@Rookie Ensuite, vous devez définir -metadata title="Some Value". Ou, pour un fichier, quelque chose comme ça pour un fichier MP4:ffmpeg -i "$file" -map_metadata -1 -c copy -metadata title="$file" "${file%%*.mp4}-new.mp4
slhck
9

Ma solution pour supprimer les métadonnées, les chapitres, pour changer l'heure de création et le titre. De cette façon, tout métacontenu doit être différent du fichier d'origine:

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"
shub
la source
1
Cette variante m'a été utile, merci. J'aimerais que le manuel ffmpeg montre plus d'exemples comme ci-dessus; stackoverflow, superutilisateur etc ... tous deviennent très utiles car ils contiennent beaucoup d'informations utiles.
shevy
8

REMARQUE: j'ai depuis mis à jour ffmpeg(j'avais auparavant la version obsolète de avconvdes référentiels Ubuntu).

Maintenant, @ slhck -map_metadata -1 fonctionne parfaitement.

Je recommande la solution de @ slhck car elle est moins typée et à jour. Je laisse ceci ici à toute personne utilisant une version obsolète.


La façon la plus simple de le faire est de définir l' -map_metadatautilisation d'un des flux d'entrée, plutôt que d'utiliser des métadonnées globales. 99% du temps, cela devrait fonctionner. REMARQUE: j'utilise avconv, car il se trouve dans les référentiels Ubuntu 12.04; ce sera probablement compatible avec ffmpeg, car leur syntaxe est toujours dans mon expérience.

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

Cela prendra les métadonnées du premier flux de données (normalement le flux vidéo) et les utilisera pour remplacer les métadonnées globales du fichier conteneur. Cela fonctionne car la plupart du temps, les flux de données ne contiennent aucune métadonnée significative; cependant, ils le font parfois, et vous voulez vous débarrasser complètement de ces métadonnées. Malheureusement, la seule façon de penser à cela est d'utiliser un tuyau et deux processus avconv.

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

Cela profite du fait que les fichiers WAV ne peuvent pas contenir de métadonnées (puisque le format a été créé avant que les balises de métadonnées n'existent).

Ces deux méthodes ont effacé toutes les métadonnées d'un fichier sur lequel je viens de les tester - tout ce qui a exiftoolété rapporté était les informations du codec, et avprobe ne m'a signalé aucune métadonnée. L'utilisation d'un tuyau pour cela est assez moche, et la première méthode fonctionnera dans 99% des cas, donc cela devrait être préféré.

evilsoup
la source
1
Les fichiers WAVE, comme les autres fichiers RIFF (par exemple AVI), peuvent en fait contenir des balises de métadonnées à l'aide d'un bloc de liste "INFO". Il n'est tout simplement pas utilisé très souvent.
blerontin