Când pur și simplu copiez a.MOV
(de pe iPhone-ul meu) pe c.MOV
, ffmpeg renunță la o mulțime de metadate (inclusiv ora și locația videoclipului).
Am încercat -metadata
, dar ffmpeg renunță în continuare la informații (se pare că metadatele nu sunt abandonate când ffmpeg tipărește Output #0
, dar este abandonat când folosesc ffprobe pentru a vedea metadatele fișierului de ieșire)
Ce ar trebui să fac pentru a forța ffmpeg să păstreze aceste metadate?
$ 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 $
Comentarii
- Am aceeași problemă; cele de mai sus nu funcționează ‘. Folosesc versiunea ffmpeg versiunea ffmpeg 3.4.4-1 ~ 16.04.york0 Copyright (c) 2000-2018 dezvoltatorii FFmpeg și acest ffmpeg -i a.MOV -map_metadata 0 -c copie c.MOV provoacă în continuare renunțarea la acest lucru: – Bibliotecă de scriere: Apple QuickTime com.apple.quicktime.make: Apple com.apple.quicktime.model: iPhone 5s com.apple.quicktime.software: 10.3.3 com.apple.quicktime.creationdate: 06-06-2018: 15: 37 + 0800 și care trebuie înlocuit cu: – Cerere de scriere: Lavf57.83.100
Răspuns
Altele răspunsurile aici funcționează numai cu ” cunoscute ” meta chei, pentru chei meta personalizate / arbitrare, -map_metadata 0
nu este suficient pentru a le păstra pe toate.
În proiectul meu de transcodare, multor producători de camere le place să injecteze meta chei personalizate în containerul MP4 / MOV și vreau să le păstrez în fișiere MP4 / MOV transcodate. După o mulțime de zgârieturi la cap, ffmpeg are un comutator în acest scop:
-movflags use_metadata_tags
Creditul este acordat autorului acestui fir și Google:
https://superuser.com/questions/1208273/add-new-and-non-defined-metadata-to-a-mp4-file
Comentarii
- Sfat frumos – mulțumesc. Un lucru pe care l-am observat când am convertit o grămadă de fișiere mov pe care le înregistrasem pe iPhone, eticheta Rotation din datele exif spunea 180. ffmpeg implicit auto rotește videoclipul – dar dacă copiați și etichetele mov pe mp4, atunci încă îi spune jucătorului să se rotească 180 chiar dacă ffmpeg auto a rotit mp4 în timpul conversiei. Deci videoclipurile mele au ajuns să fie cu capul în jos când le-am jucat 🙂 – Soluția în cazul meu a fost să-i spun lui ffmpeg să nu se rotească automat folosind
-noautorotate
– o soluție rapidă este să folosiți Exiftool și setați rotația la 0 –exiftool -Rotation=0 file.mp4
Răspuns
Opțiunea -metadata
este pentru manipularea metadatelor. Dacă doriți doar să copiați metadatele dintr-un fișier de intrare într-un fișier de ieșire, trebuie să utilizați opțiunea -map_metadata
:
ffmpeg -i a.MOV -map_metadata 0 -c copy c.MOV
Specificatorul fișierului este un număr indexat zero, deci „0” preia metadatele din primul fișier de intrare.
Comentarii
- Ai vreo idee despre cum să faci acest lucru să funcționeze cu
concat
? de exemplu.ffmpeg -nostdin -f concat -safe 1 -i "${concatlist}" -map_metadata 0 -c copy "$outfile"
unde$concatlist
este/tmp/concat.list
care are linii precumfile 'filenamehere.mp3'
- ok, l-am primit :
ffmpeg -nostdin -i "${infile}" -f ffmetadata "${metadatafile}"
apoiffmpeg -nostdin -f concat -safe 1 -i "${concatlist}" -i "${metadatafile}" -map_metadata 1 -c copy "$outfile"
-
-map_metadata 0
sau-map_metadata 1
? - @evandrix As menționat în răspuns, 0 selectează primul fișier de intrare ca sursă. Pentru detalii, consultați această secțiune din documentele ffmpeg .
- ok, mulțumesc foarte mult ~
Răspuns
FFmpeg, implicit, face ca toate metadatele din primul fișier de intrare să fie disponibile , la fișierul de ieșire muxer, pentru scriere. -map_metadata
permite să suprascrieți acest lucru, fie indicând o intrare diferită, fie spunându-i lui ffmpeg să elimine metadatele globale de intrare (valoarea -1
) .
Cu toate acestea, care dintre metadatele disponibile este scris de fapt în fișierul de ieșire, depinde de muxerul de ieșire. Muxerul QT / ISOBMFF (pentru MOV / MP4 / 3GP ..) ia în considerare doar un număr limitat de etichete, în principal legate de iTunes. După cum a remarcat @JerryTian, cu -movflags use_metadata_tags
, toate celelalte etichete sunt scrise în fișier. Cu toate acestea, acestea sunt scrise într-un mod neconvențional – Quicktime, în special, nu recunoaște aceste intrări de metadate suplimentare. Altele, bazate pe ffmpeg, ar trebui să le citească. Sau oricine folosește s / w personalizat, cum ar fi @JerryTian, își poate adapta s / w pentru a le citi.
Rețineți că movflags se aplică numai la ieșirea din muxerul QT. orice. Alte muxere variază.
Comentarii
- Încerc să păstrez metadatele când convertesc muzică. Am un CATALOGID personalizat, dar când fac conversii din wav to flac. Câmpul nu este păstrat. ffmpeg -i bb.wav bb2.flac -movflags use_metadata_tags. Aveți vreo idee?
- Deci, dacă vă înțeleg corect, ‘ spuneți că utilizarea FFmpeg pentru a codifica într-un .mkv ar trebui să păstreze implicit toate metadatele din sursă , fără a fi nevoie să specificați opțiuni suplimentare?
Răspuns
Nu am găsit o modalitate de a avea ffmpeg păstrez datele. Dar am constatat că, pentru nevoile mele, doream ca metadatele exif și exiftool
să fie soluție convenabilă.
Puteți copia metadate între fișiere video: https://unix.stackexchange.com/a/492338/83370
Există „un truc pentru a copia toate metadatele folosind opțiunea -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
Comentarii
- Am încercat toate cele de mai sus pe fișiere de la Canon 200D și acesta este de fapt, cel mai util. Încă face
exiftool c.MOV
mult mai mic decât rezultatul din original, dar păstrează data reală a creației (-map_metadata
a făcut-o de asemenea, dar nu-movflags
) și numele camerei, dar informațiile despre obiectiv nu mai sunt. - Bine, acesta a fost de fapt un punct de plecare excelent – tot ce am avut de făcut omiteți acea parte de mapare. Doar folosind
exiftool -TagsFromFile in.mp4 out.mp4
ați reușit!