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 somfile 'filenamehere.mp3'
- ok, fikk det :
ffmpeg -nostdin -i "${infile}" -f ffmetadata "${metadatafile}"
så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!