Když jednoduše kopíruji a.MOV (z mého iPhonu) do c.MOV, ffmpeg vypustí spoustu metadat (včetně času a umístění videa).

Zkoušel jsem -metadata, ale ffmpeg stále upustí od informací (zdá se, že metadata nebudou zahozena, když ffmpeg vytiskne Output #0, ale je zrušeno, když používám ffprobe k zobrazení metadat výstupního souboru)

Co mám udělat, abych vynutil ffmpeg uchovat tato metadata?

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

Komentáře

  • Mám stejný problém; výše uvedené ‚ nefunguje. Používám verzi ffmpeg ffmpeg verze 3.4.4-1 ~ 16.04.york0 Copyright (c) 2000-2018 vývojáři FFmpeg a tato ffmpeg -i a.MOV -map_metadata 0 -c kopie c.MOV stále způsobí, že bude upuštěno: – Knihovna pro psaní: 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 a bude nahrazeno: – Psací žádost: Lavf57.83.100

Odpověď

Ostatní odpovědi zde fungují pouze se “ známými “ meta klíči, pro vlastní / libovolné meta klíče, -map_metadata 0 nestačí k tomu, aby byly všechny.

V mém projektu transkodéru mnoho tvůrců fotoaparátů chce vložit vlastní meta klíče do kontejneru MP4 / MOV a chci je ponechat v překódované soubory MP4 / MOV. Po velkém poškrábání hlavy má ffmpeg pro tento účel přepínač:

-movflags use_metadata_tags 

Kredit patří autorovi tohoto vlákna a Googlu:

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

Komentáře

  • Pěkný tip – děkuji. Jedna věc, kterou jsem si všiml, když jsem převedl spoustu souborů mov, které jsem zaznamenal na iPhonech, značka Rotation v datech exif uvedla 180. ffmpeg ve výchozím nastavení automaticky otáčí video – ale pokud také zkopírujete značky mov do mp4, pak to stále řekne hráči, aby otočil o 180, přestože ffmpeg během převodu automaticky otočil MP4. Takže moje videa skončila, když jsem je přehrával vzhůru nohama 🙂 – Řešením v mém případě bylo říct ffmpeg, aby se automaticky neotáčel pomocí -noautorotate – rychlým řešením je použít Exiftool a nastavte rotaci na 0 – exiftool -Rotation=0 file.mp4

odpověď

Možnost -metadata slouží k manipulaci s metadaty. Pokud chcete pouze zkopírovat metadata ze vstupního souboru do výstupního souboru, měli byste použít možnost -map_metadata :

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

Specifikátor souboru je číslo s nulovým indexem, takže „0“ převezme metadata z prvního vstupního souboru.

Komentáře

  • Nějaký nápad, jak zajistit, aby to fungovalo s concat? např. ffmpeg -nostdin -f concat -safe 1 -i "${concatlist}" -map_metadata 0 -c copy "$outfile" kde $concatlist je /tmp/concat.list který má řádky jako file 'filenamehere.mp3'
  • ok, rozumím : ffmpeg -nostdin -i "${infile}" -f ffmetadata "${metadatafile}" pak ffmpeg -nostdin -f concat -safe 1 -i "${concatlist}" -i "${metadatafile}" -map_metadata 1 -c copy "$outfile"
  • -map_metadata 0 nebo -map_metadata 1?
  • @evandrix As uvedený v odpovědi, 0 vybere první vstupní soubor jako zdroj. Podrobnosti najdete v této části dokumentů ffmpeg .
  • ok, moc děkuji ~

Odpověď

FFmpeg ve výchozím nastavení zpřístupňuje všechna metadata z prvního vstupního souboru do muxeru výstupního souboru pro zápis. -map_metadata to umožňuje přepsat buď tím, že ukáže na jiný vstup, nebo řekne ffmpeg, aby zahodil vstupní globální metadata (hodnota -1) .

Která z dostupných metadat je však do výstupního souboru skutečně zapsána , záleží na výstupní muxer. Muxer QT / ISOBMFF (pro MOV / MP4 / 3GP ..) zohledňuje pouze omezený počet značek, primárně souvisejících s iTunes. Jak poznamenal @JerryTian, s -movflags use_metadata_tags se do souboru zapíší všechny ostatní značky. Jsou však psány netradičním způsobem – zejména Quicktime nerozpozná tyto další položky metadat. Ostatní, založené na ffmpeg, by si je měli přečíst. Nebo kdokoli, kdo používá vlastní s / w, jako @JerryTian, může svůj s / w přizpůsobit tak, aby si je přečetl.

Pamatujte, že movflags platí pouze pro výstup z QT muxeru. Matroska (MKV) bude psát cokoli. Ostatní muxery se liší.

Komentáře

  • Při převodu hudby se snažím zachovat metadata. Mám vlastní CATALOGID, ale při převodu z wav to flac. pole není zachováno. ffmpeg -i bb.wav bb2.flac -movflags use_metadata_tags. Máte nějaký nápad?
  • Takže pokud vám rozumím správně, ‚ říkáte, že použití FFmpeg pro kódování do souboru .mkv by mělo ve výchozím nastavení zachovat všechna metadata ze zdroje , aniž byste museli specifikovat další možnosti?

Odpovědět

Nenašel jsem způsob, jak mít ffmpeg uchovat data. Ale zjistil jsem, že pro své potřeby jsem chtěl metadata exif a exiftool byl pohodlné řešení.

Můžete kopírovat metadata mezi soubory videa: https://unix.stackexchange.com/a/492338/83370

Existuje trik ke zkopírování všech metadat pomocí možnosti -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 

Komentáře

  • Všechno výše jsem zkoušel na souborech z Canon 200D a tento je vlastně nejužitečnější. Stále ještě exiftool c.MOV mnohem menší než výstup z originálu, ale zachovává skutečné datum vytvoření (-map_metadata to udělal také, ale ne -movflags) a název fotoaparátu, ale informace o objektivu jsou stále pryč.
  • Dobře, to byl vlastně skvělý výchozí bod – vše, co jsem musel udělat je přeskočit tuto část mapování. Pouhé použití exiftool -TagsFromFile in.mp4 out.mp4 to udělalo!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *