web-dev-qa-db-fra.com

Supprimer 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 . Toute option ou méthode pour effacer toutes les métadonnées et effacer 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
37
sweb

En modifiant légèrement la ligne de commande avec @izx , j'ai 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 eu la date de création à changer, ce qui est étrange, car cela semblait fonctionner dans la version Ubuntu.

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

53
slhck

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

Maintenant, @ slhck -map_metadata -1 fonctionne parfaitement.

Je recommande la solution de @ slhck car elle tape moins et est à jour. Je laisse cela ici pour quiconque utilise une version obsolète.


Pour ce faire, le moyen le plus simple consiste à définir -map_metadata pour utiliser l'un des flux d'entrée plutôt que d'utiliser des métadonnées globales. Cela devrait fonctionner dans 99% des cas. NOTE: J'utilise avconv car c'est dans les référentiels Ubuntu 12.04; cela sera probablement compatible avec ffmpeg, puisque leur syntaxe est toujours conforme à 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, parfois, ils le font, et vous voulez vous débarrasser complètement de ces métadonnées. Malheureusement, la seule façon pour moi de faire cela consistait en un canal 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 tire parti du fait que les fichiers WAV ne peuvent pas contenir de métadonnées (car 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 que exiftool a rapporté est l'information du codec, et avprobe ne m'a signalé aucune métadonnée. Utiliser un tuyau pour cela est assez moche, et la première méthode fonctionnera dans 99% des cas, donc cela devrait être préférable.

6
evilsoup

Ma solution pour supprimer les métadonnées, les chapitres, pour changer le moment et le titre de la création. De cette façon, tout méta-contenu 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"
6
shub