Quando sto semplicemente copiando a.MOV (dal mio iPhone) in c.MOV, ffmpeg rilascia molti metadati, (inclusi lora e la posizione del video).

Ho provato -metadata, ma ffmpeg continua a rilasciare le informazioni (sembra che i metadati non vengano eliminati quando ffmpeg stampa Output #0, ma viene eliminato quando uso ffprobe per vedere i metadati del file di output)

Cosa devo fare per forzare ffmpeg a conservare questi metadati?

$ 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 $ 

Commenti

  • Ho lo stesso problema; quanto sopra ‘ non funziona. Sto usando ffmpeg versione ffmpeg versione 3.4.4-1 ~ 16.04.york0 Copyright (c) 2000-2018 gli sviluppatori FFmpeg e questo ffmpeg -i a.MOV -map_metadata 0 -c copy c.MOV fa ancora cadere questo: – Libreria di scrittura: 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 e da sostituire con: – Scrittura dellapplicazione: Lavf57.83.100

Risposta

Altro le risposte qui funzionano solo con le ” ” meta chiavi note, per le meta chiavi personalizzate / arbitrarie, -map_metadata 0 non è sufficiente per mantenerli tutti.

Nel mio progetto di transcodifica, a molti produttori di fotocamere piace inserire meta chiavi personalizzate nel contenitore MP4 / MOV e voglio mantenerle nel file MP4 / MOV transcodificati. Dopo molti grattacapi, ffmpeg ha un interruttore per questo scopo:

-movflags use_metadata_tags 

Il merito va allautore di questo thread e a Google:

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

Commenti

  • Bel suggerimento, grazie. Una cosa che ho notato quando ho convertito un mucchio di file mov che avevo registrato su iPhone, il tag Rotation nei dati exif diceva 180. ffmpeg per impostazione predefinita ruota automaticamente il video, ma se copi anche i tag mov su mp4, allora continua a dice al giocatore di ruotare di 180 anche se ffmpeg ha ruotato automaticamente lMP4 durante la conversione. Quindi i miei video sono finiti sottosopra quando li ho riprodotti 🙂 – La soluzione alternativa nel mio caso era di dire a ffmpeg di non ruotare automaticamente usando -noautorotate – una soluzione rapida è usare Exiftool e imposta la rotazione su 0 – exiftool -Rotation=0 file.mp4

Risposta

Il Lopzione -metadata serve per manipolare i metadati. Se desideri semplicemente copiare i metadati da un file di input a un file di output, dovresti utilizzare lopzione -map_metadata :

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

Lo specificatore di file è un numero indicizzato zero, quindi “0” prende i metadati dal primo file di input.

Commenti

  • Qualche idea su come farlo funzionare con concat? per esempio. ffmpeg -nostdin -f concat -safe 1 -i "${concatlist}" -map_metadata 0 -c copy "$outfile" dove $concatlist è /tmp/concat.list che ha righe come file 'filenamehere.mp3'
  • ok, capito : ffmpeg -nostdin -i "${infile}" -f ffmetadata "${metadatafile}" poi ffmpeg -nostdin -f concat -safe 1 -i "${concatlist}" -i "${metadatafile}" -map_metadata 1 -c copy "$outfile"
  • -map_metadata 0 o -map_metadata 1?
  • @evandrix As indicato nella risposta, 0 seleziona il primo file di input come sorgente. Per i dettagli, vedi questa sezione dei documenti ffmpeg .
  • ok, grazie mille ~

Risposta

FFmpeg, per impostazione predefinita, rende disponibili tutti i metadati del primo file di input , al file di output muxer, per la scrittura. -map_metadata consente di sovrascriverlo, indicando un input diverso o dicendo a ffmpeg di eliminare i metadati globali di input (valore di -1) .

Tuttavia, quale dei metadati disponibili è effettivamente scritto nel file di output, dipende da il muxer di output. Il muxer QT / ISOBMFF (per MOV / MP4 / 3GP ..) considera solo un numero limitato di tag, principalmente relativi a iTunes. Come ha notato @JerryTian, con -movflags use_metadata_tags, tutti gli altri tag vengono scritti nel file. Tuttavia, questi sono scritti in modo non convenzionale – Quicktime, in particolare, non riconosce queste voci di metadati aggiuntivi. Altri software basati su ffmpeg dovrebbero leggerli. Oppure chiunque utilizzi un s / w personalizzato, come @JerryTian, può adattare il proprio s / w per leggerli.

Nota che movflags si applica solo alloutput del QT muxer. Matroska (MKV) scriverà qualsiasi cosa. Altri muxer variano.

Commenti

  • Sto cercando di mantenere i metadati durante la conversione della musica. Ho un CATALOGID personalizzato, ma quando converto da da wav a flac Il campo non viene mantenuto ffmpeg -i bb.wav bb2.flac -movflags use_metadata_tags. Qualche idea?
  • Quindi, se ti ho capito bene, ‘ stai dicendo che luso di FFmpeg per codificare in un .mkv dovrebbe preservare tutti i metadati dal sorgente per impostazione predefinita , senza dover specificare alcuna opzione aggiuntiva?

Risposta

Non ho trovato un modo per avere ffmpeg preservare i dati. Ma ho scoperto che per le mie esigenze volevo i metadati exif e exiftool era un soluzione conveniente.

Puoi copiare metadati tra file video: https://unix.stackexchange.com/a/492338/83370

Cè “un trucco per copiare tutti i metadati utilizzando lopzione -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 

Commenti

  • Ho provato tutto sopra sui file della Canon 200D e questo è in realtà più utile. Rende ancora exiftool c.MOV molto più piccolo delloutput delloriginale, ma conserva la data di creazione effettiva (-map_metadata lo ha fatto troppo, ma non -movflags) e il nome della fotocamera, ma le informazioni sullobiettivo sono ancora scomparse.
  • OK, questo è stato davvero un ottimo punto di partenza: tutto quello che dovevo fare è saltare quella parte di mappatura. È stato sufficiente utilizzare exiftool -TagsFromFile in.mp4 out.mp4!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *