62 votes

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

Comment puis-je 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 man ffmpeg . Une option ou une méthode pour effacer toutes les métadonnées et dépouiller le média 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

90voto

slhck Points 209720

En modifiant légèrement le ligne de commande par @izx j'ai eu ça :

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.

Si vous souhaitez supprimer la nouvelle encoder ajoutez ceci à la commande (avant le nom du fichier de sortie) :

-fflags +bitexact -flags:v +bitexact -flags:a +bitexact

Merci à @wisbucky pour l'indice.

Cependant, je n'ai pas réussi à modifier la date de création, ce qui est étrange car cela semblait fonctionner dans la version Ubuntu. J'ai posté sur le site Liste de diffusion FFmpeg Il a demandé s'il y avait des mises à jour ou des commentaires à ce sujet, mais il n'y a pas eu de réponse.

11voto

evilsoup Points 12077

NOTE : J'ai depuis mis à jour ffmpeg (auparavant, j'avais la version obsolète de avconv depuis les dépôts Ubuntu).

Maintenant @slhck's -map_metadata -1 fonctionne parfaitement.

Je recommande La solution de @slhck parce qu'elle est moins typée et plus moderne. Je laisse ceci ici pour tous ceux qui utilisent une version obsolète.


La façon la plus simple de le faire est de définir -map_metadata pour utiliser l'un des flux d'entrée, plutôt que d'utiliser les métadonnées globales. Dans 99% des cas, cela devrait fonctionner. NOTE : J'utilise avconv, parce qu'il est dans les dépôts d'Ubuntu 12.04 ; cela va probablement être compatible avec ffmpeg, puisque leur syntaxe l'est toujours d'après mon expérience.

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

Cette opération prend les métadonnées du premier flux de données (normalement le flux vidéo) et les utilise pour remplacer les métadonnées globales du fichier conteneur. Cela fonctionne parce que la plupart du temps, les flux de données n'ont pas de métadonnées significatives écrites sur eux ; cependant, parfois ils en ont, et vous voulez vous débarrasser complètement de ces métadonnées. Malheureusement, la seule façon à laquelle j'ai pensé pour faire cela utilisait un pipe 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 permet de tirer parti du fait que les fichiers WAV ne peuvent pas contenir de métadonnées (puisque le format a été créé avant l'existence des balises de métadonnées).

Ces deux méthodes ont supprimé toutes les métadonnées d'un fichier sur lequel je viens de les tester. exiftool était l'information sur le codec, et avprobe ne m'a rapporté aucune métadonnée. L'utilisation d'un pipe pour cela est plutôt moche, et la première méthode fonctionnera dans 99% des cas, donc il faut la préférer.

11voto

shub Points 1392

Ma solution pour dépouiller les métadonnées, les chapitres, pour changer l'heure de création et le titre. De cette façon, tout métacontenu devrait ê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"

3voto

SebMa Points 1175

Pour dépouiller les métadonnées, j'utilise -map_metadata:g -1 parce que je ne supprime que les métadonnées globales et conserve les métadonnées des sous-titres telles que les noms des langues des pistes :

$ ffmpeg -hide_banner -i "$video" -map 0:v:0? -map 0:a? -map 0:s? -c copy -map_metadata:g -1 "$outputVideo"

En -map 0:...? signifie que (selon l'argument de l'option man ffmpeg ) :

Un " ?" de fin après l'index du flux permettra à la carte d'être optionnel : si la carte ne correspond à aucun flux, la carte sera ignorée au lieu d'échouer.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X