Når jeg bare kopierer a.MOV (fra min iPhone) til c.MOV, ffmpeg slipper mange metadata, (inkludert tid og plassering av videoen).

Jeg prøvde -metadata, men ffmpeg slipper fremdeles informasjonen (det ser ut til at metadataene ikke slippes når ffmpeg skriver ut Output #0, men blir droppet når jeg bruker ffprobe for å se metadata for utdatafilen)

Hva skal jeg gjøre for å tvinge ffmpeg til å bevare disse metadataene?

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

Kommentarer

  • Jeg har det samme problemet; det ovennevnte fungerer ikke ‘. Jeg bruker ffmpeg versjon ffmpeg versjon 3.4.4-1 ~ 16.04.york0 Copyright (c) 2000-2018 FFmpeg utviklerne og denne ffmpeg -i a.MOV -map_metadata 0 -c kopi c.MOV fører fortsatt til at dette slippes: – Skrivebibliotek: 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 og skal erstattes med: – Skriftlig søknad: Lavf57.83.100

Svar

Annet svarene her fungerer bare med » kjente » metataster, for tilpassede / vilkårlige metataster, -map_metadata 0 er ikke tilstrekkelig til å beholde dem alle.

I transkoderprosjektet mitt liker mange kameraprodusenter å injisere tilpassede metataster i MP4 / MOV-beholderen, og jeg vil beholde dem i transkodede MP4 / MOV-filer. Etter mye hodeskraping har ffmpeg en bryter for dette formålet:

-movflags use_metadata_tags 

Kreditt går til forfatteren av denne tråden og Google:

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

Kommentarer

  • Fint tips – takk. En ting jeg la merke til da jeg konverterte en haug med mov-filer jeg hadde spilt inn på iphones, sa Rotation-koden i exif-dataene 180. ffmpeg roterer som standard videoen automatisk – men hvis du også kopierer mov-kodene til mp4, så fortsatt forteller spilleren å rotere 180 selv om ffmpeg auto roterte mp4 under konverteringen. Så videoene mine endte opp ned da jeg spilte dem 🙂 – Løsningen i mitt tilfelle var å fortelle ffmpeg om ikke å rotere automatisk ved å bruke -noautorotate – en rask løsning er å bruke Exiftool og sett rotasjonen til 0 – exiftool -Rotation=0 file.mp4

Svar

-metadata alternativet er for å manipulere metadataene. Hvis du bare vil kopiere metadataene fra en inndatafil til en ouput-fil, bør du bruke alternativet -map_metadata :

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

Filspesifikatoren er et nullindeksert tall, så «0» tar metadataene fra den første inndatafilen.

Kommentarer

  • Noen ideer om hvordan du kan få dette til å fungere med concat? f.eks. ffmpeg -nostdin -f concat -safe 1 -i "${concatlist}" -map_metadata 0 -c copy "$outfile" der $concatlist er /tmp/concat.list som har linjer som file 'filenamehere.mp3'
  • ok, fikk det : ffmpeg -nostdin -i "${infile}" -f ffmetadata "${metadatafile}"ffmpeg -nostdin -f concat -safe 1 -i "${concatlist}" -i "${metadatafile}" -map_metadata 1 -c copy "$outfile"
  • -map_metadata 0 eller -map_metadata 1?
  • @evandrix As angitt i svaret, velger 0 den første inndatafilen som kilde. For detaljer, se denne delen av ffmpeg-dokumentene .
  • ok, tusen takk ~

Svar

FFmpeg gjør som standard alle metadata fra den første inndatafilen tilgjengelig , til utdatafilen muxer, for skriving. -map_metadata gjør det mulig å overstyre det, enten ved å peke på en annen inngang, eller ved å be ffmpeg om å forkaste globale globale metadata (verdi på -1) .

Hvilken av de tilgjengelige metadataene er imidlertid som faktisk er skrevet til utdatafilen, avhenger av utgangsmuxeren. QT / ISOBMFF-muxeren (for MOV / MP4 / 3GP ..) vurderer bare et begrenset antall koder, primært iTunes-relaterte. Som @JerryTian bemerket, med -movflags use_metadata_tags, skrives alle andre tagger til filen. Disse er imidlertid skrevet på en ukonvensjonell måte – spesielt Quicktime gjenkjenner ikke disse ekstra metadataoppføringene. Andre, ffmpeg-baserte s / w, bør lese dem. Eller alle som bruker tilpasset s / w, som @JerryTian, kan tilpasse s / w for å lese dem.

Merk at movflags bare gjelder for utdata fra QT-muxeren. Matroska (MKV) vil skrive hva som helst. Andre muxers varierer.

Kommentarer

  • Jeg prøver å beholde metadata når jeg konverterer musikk. Jeg har en egendefinert CATALOGID, men når jeg konverterer fra wav til flac. Feltet er ikke bevart. ffmpeg -i bb.wav bb2.flac -movflags use_metadata_tags. Noen ideer?
  • Så hvis jeg forstår deg riktig, sier du ‘ at bruk av FFmpeg til å kode inn i en .mkv bør bevare alle metadata fra kilden som standard , uten å måtte spesifisere noen ekstra alternativer?

Svar

Jeg har ikke funnet en måte å ha ffmpeg på bevare dataene. Men jeg har funnet ut at for mine behov ønsket jeg exif-metadataene og exiftool var en praktisk løsning.

Du kan kopiere metadata mellom videofiler: https://unix.stackexchange.com/a/492338/83370

Det er et triks for å kopiere alle metadata ved hjelp av alternativet -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 

Kommentarer

  • Jeg prøvde alt ovenfor på filer fra Canon 200D, og denne er faktisk mest nyttig. Det gjør fortsatt exiftool c.MOV mye mindre enn utgangen fra originalen, men den bevarer faktisk opprettelsesdato (-map_metadata gjorde det også, men ikke -movflags) og kameranavn, men linsinformasjonen er fortsatt borte.
  • OK, dette var faktisk et flott utgangspunkt – alt jeg måtte gjøre hopper over denne kartleggingsdelen. Bare å bruke exiftool -TagsFromFile in.mp4 out.mp4 gjorde jobben!

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *