Lorsque je copie simplement a.MOV (depuis mon iPhone) vers c.MOV, ffmpeg supprime beaucoup de métadonnées, (y compris lheure et lemplacement de la vidéo).

Jai essayé -metadata, mais ffmpeg laisse toujours tomber les informations (il semble que les métadonnées ne soient pas supprimées lorsque ffmpeg imprime Output #0, mais est abandonné lorsque jutilise ffprobe pour voir les métadonnées du fichier de sortie)

Que dois-je faire pour forcer ffmpeg à conserver ces métadonnées?

$ ffmpeg -i a.MOV -c copy c.MOV -y Input #0, mov,mp4,m4a,3gp,3g2,mj2, from "a.MOV": Metadata: major_brand : qt minor_version : 0 compatible_brands: qt creation_time : 2018-03-... com.apple.quicktime.location.ISO6709: .../ com.apple.quicktime.make: Apple com.apple.quicktime.model: iPhone ... com.apple.quicktime.software: 11.... com.apple.quicktime.creationdate: 2018-03-... Duration: 00:00:01.77, start: 0.000000, bitrate: 7868 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, 7707 kb/s, 30 fps, 30 tbr, 600 tbn, 1200 tbc (default) Metadata: creation_time : 2018-03-... handler_name : Core Media Data Handler encoder : H.264 Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 87 kb/s (default) Metadata: creation_time : 2018-03-... handler_name : Core Media Data Handler Stream #0:2(und): Data: none (mebx / 0x7862656D), 0 kb/s (default) Metadata: creation_time : 2018-03-... handler_name : Core Media Data Handler Stream #0:3(und): Data: none (mebx / 0x7862656D), 0 kb/s (default) Metadata: creation_time : 2018-03-... handler_name : Core Media Data Handler Output #0, mov, to "c.MOV": Metadata: major_brand : qt minor_version : 0 compatible_brands: qt com.apple.quicktime.creationdate: 2018-03-... com.apple.quicktime.location.ISO6709: .../ com.apple.quicktime.make: Apple com.apple.quicktime.model: iPhone ... com.apple.quicktime.software: 11.... encoder : Lavf57.71.100 Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, q=2-31, 7707 kb/s, 30 fps, 30 tbr, 19200 tbn, 600 tbc (default) Metadata: creation_time : 2018-03-... handler_name : Core Media Data Handler encoder : H.264 Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 87 kb/s (default) Metadata: creation_time : 2018-03-... handler_name : Core Media Data Handler Stream mapping: Stream #0:0 -> #0:0 (copy) Stream #0:1 -> #0:1 (copy) Press [q] to stop, [?] for help frame= 23 fps=0.0 q=-1.0 Lsize= 732kB time=00:00:01.76 bitrate=7827.5kbits/s speed= 971x video:921kB audio:9kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.291216% $ ffprobe c.MOV Input #0, mov,mp4,m4a,3gp,3g2,mj2, from "c.MOV": Metadata: major_brand : qt minor_version : 512 compatible_brands: qt encoder : Lavf57.71.100 Duration: 00:00:00.77, start: 0.000000, bitrate: 7819 kb/s Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, 7707 kb/s, 30 fps, 30 tbr, 19200 tbn, 38400 tbc (default) Metadata: handler_name : DataHandler encoder : H.264 Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 92 kb/s (default) Metadata: handler_name : DataHandler $ 

Commentaires

  • Jai le même problème; ce qui précède ne fonctionne ‘ t. Jutilise la version ffmpeg ffmpeg version 3.4.4-1 ~ 16.04.york0 Copyright (c) 2000-2018 les développeurs FFmpeg et ce ffmpeg -i a.MOV -map_metadata 0 -c copie c.MOV fait toujours tomber ceci: – Bibliothèque décriture: Apple QuickTime com.apple.quicktime.make: Apple com.apple.quicktime.model: iPhone 5s com.apple.quicktime.software: 10.3.3 com.apple.quicktime.creationdate: 2018-06-06T01: 15: 37 + 0800 et à remplacer par: – Application décriture: Lavf57.83.100

Réponse

Autre les réponses ici ne fonctionnent quavec les clés méta  » connues « , pour les clés méta personnalisées / arbitraires, -map_metadata 0 nest pas suffisant pour les conserver tous.

Dans mon projet de transcodeur, de nombreux fabricants de caméras aiment injecter des méta clés personnalisées dans le conteneur MP4 / MOV, et je souhaite les conserver dans le fichiers MP4 / MOV transcodés. Après avoir beaucoup gratté la tête, ffmpeg a un commutateur à cet effet:

-movflags use_metadata_tags 

Le mérite revient à lauteur de ce fil et à Google:

https://superuser.com/questions/1208273/add-new-and-non-defined-metadata-to-a-mp4-file

Commentaires

  • Bonne astuce – merci. Une chose que jai remarquée lorsque jai converti un tas de fichiers mov que javais enregistrés sur iphones, la balise Rotation dans les données exif disait 180. ffmpeg par défaut fait pivoter automatiquement la vidéo – mais si vous copiez également les balises mov sur le mp4, alors il dit au joueur de faire une rotation de 180 même si ffmpeg a automatiquement fait pivoter le mp4 pendant la conversion. Donc mes vidéos ont fini par être à lenvers lorsque je les ai lues 🙂 – La solution de contournement dans mon cas était de dire à ffmpeg de ne pas pivoter automatiquement en utilisant -noautorotate – une solution rapide consiste à utiliser Exiftool et définir la rotation sur 0 – exiftool -Rotation=0 file.mp4

Réponse

Le -metadata permet de manipuler les métadonnées. Si vous souhaitez simplement copier les métadonnées dun fichier dentrée vers un fichier de sortie, vous devez utiliser loption -map_metadata :

ffmpeg -i a.MOV -map_metadata 0 -c copy c.MOV

Le spécificateur de fichier est un nombre indexé à zéro, donc « 0 » prend les métadonnées du premier fichier dentrée.

Commentaires

  • Une idée comment faire fonctionner cela avec concat? par exemple. ffmpeg -nostdin -f concat -safe 1 -i "${concatlist}" -map_metadata 0 -c copy "$outfile"$concatlist est /tmp/concat.list qui comporte des lignes telles que file 'filenamehere.mp3'
  • ok, compris : ffmpeg -nostdin -i "${infile}" -f ffmetadata "${metadatafile}" puis ffmpeg -nostdin -f concat -safe 1 -i "${concatlist}" -i "${metadatafile}" -map_metadata 1 -c copy "$outfile"
  • -map_metadata 0 ou -map_metadata 1?
  • @evandrix As indiqué dans la réponse, 0 sélectionne le premier fichier dentrée comme source. Pour plus de détails, consultez cette section de la documentation ffmpeg .
  • ok, merci beaucoup ~

Réponse

FFmpeg, par défaut, rend toutes les métadonnées du premier fichier dentrée disponibles , vers le multiplexeur de fichier de sortie, pour lécriture. -map_metadata permet de remplacer cela, soit en pointant vers une entrée différente, soit en indiquant à ffmpeg de supprimer les métadonnées globales dentrée (valeur de -1) .

Cependant, laquelle des métadonnées disponibles est réellement écrite dans le fichier de sortie, dépend de le multiplexeur de sortie. Le multiplexeur QT / ISOBMFF (pour MOV / MP4 / 3GP ..) ne prend en compte quun nombre limité de balises, principalement liées à iTunes. Comme @JerryTian la noté, avec -movflags use_metadata_tags, toutes les autres balises sont écrites dans le fichier. Cependant, ceux-ci sont écrits dune manière non conventionnelle – Quicktime, en particulier, ne reconnaît pas ces entrées de métadonnées supplémentaires. Les autres s / w basés sur ffmpeg devraient les lire. Ou toute personne qui utilise un s / w personnalisé, comme @JerryTian, peut adapter son s / w pour les lire.

Notez que movflags ne sapplique quà la sortie du multiplexeur QT. Matroska (MKV) écrira tout. Les autres multiplexeurs varient.

Commentaires

  • Jessaie de conserver les métadonnées lors de la conversion de musique. Jai un CATALOGID personnalisé, mais lors de la conversion depuis wav à flac. Le champ nest pas conservé. ffmpeg -i bb.wav bb2.flac -movflags use_metadata_tags. Une idée?
  • Donc, si je vous comprends bien, vous ‘ dites que lutilisation de FFmpeg pour encoder dans un .mkv devrait préserver toutes les métadonnées de la source par défaut , sans avoir à spécifier doptions supplémentaires?

Réponse

Je nai pas trouvé de moyen davoir ffmpeg conserver les données. Mais jai trouvé que pour mes besoins, je voulais les métadonnées exif et que exiftool était un solution pratique.

Vous pouvez copier des métadonnées entre des fichiers vidéo: https://unix.stackexchange.com/a/492338/83370

Il existe « une astuce pour copier toutes les métadonnées en utilisant loption -all:all>all:all: http://u88.n24.queensu.ca/exiftool/forum/index.php?topic=3440.0

exiftool -TagsFromFile a.MOV "-all:all>all:all" c.MOV 

Commentaires

  • Jai essayé tout ce qui précède sur des fichiers de Canon 200D et celui-ci est plus utile. Cela rend encore plus exiftool c.MOV beaucoup plus petit que la sortie de loriginal, mais il préserve la date de création réelle (-map_metadata la fait aussi, mais pas -movflags) et le nom de la caméra, mais les informations sur lobjectif ont toujours disparu.
  • Daccord, cétait en fait un excellent point de départ – tout ce que javais à faire est dignorer cette partie du mappage. Il suffit dutiliser exiftool -TagsFromFile in.mp4 out.mp4 pour faire laffaire!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *