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 precum file 'filenamehere.mp3'
  • ok, l-am primit : ffmpeg -nostdin -i "${infile}" -f ffmetadata "${metadatafile}" apoi ffmpeg -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!

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *