Wenn ich einfach a.MOV (von meinem iPhone) nach c.MOV, ffmpeg löscht viele Metadaten (einschließlich der Zeit und des Ortes des Videos).

Ich habe -metadata versucht, aber ffmpeg löscht die Informationen immer noch (es scheint, dass die Metadaten nicht gelöscht werden, wenn ffmpeg Output #0, wird jedoch gelöscht, wenn ich ffprobe verwende, um Metadaten der Ausgabedatei anzuzeigen.

Was kann ich tun, um zu erzwingen, dass ffmpeg diese Metadaten beibehält?

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

Kommentare

  • Ich habe das gleiche Problem. Das oben genannte ‚ funktioniert nicht. Ich verwende ffmpeg Version ffmpeg Version 3.4.4-1 ~ 16.04.york0 Copyright (c) 2000-2018 die FFmpeg Entwickler und diese ffmpeg -i a.MOV -map_metadata 0 -c Kopie c.MOV bewirkt immer noch, dass dies gelöscht wird: – Schreibbibliothek: 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 und zu ersetzen durch: – Schreibanwendung: Lavf57.83.100

Antwort

Andere Antworten hier funktionieren nur mit den “ bekannten “ Metaschlüsseln für benutzerdefinierte / beliebige Metaschlüssel -map_metadata 0 reicht nicht aus, um sie alle zu behalten.

In meinem Transcoder-Projekt fügen viele Kamerahersteller benutzerdefinierte Metaschlüssel gerne in den MP4 / MOV-Container ein, und ich möchte sie im behalten transkodierte MP4 / MOV-Dateien. Nach vielem Kopfkratzen hat ffmpeg zu diesem Zweck einen Schalter:

-movflags use_metadata_tags 

Gutschrift geht an den Autor dieses Threads und an Google:

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

Kommentare

  • Netter Tipp – danke. Eine Sache, die mir aufgefallen ist, als ich eine Reihe von Mov-Dateien konvertiert habe, die ich auf dem iPhone aufgezeichnet hatte, war das Rotation-Tag in den Exif-Daten 180. ffmpeg dreht das Video standardmäßig automatisch – aber wenn Sie die Mov-Tags auch in die mp4 kopieren, ist es immer noch so Weist den Player an, 180 zu drehen, obwohl ffmpeg die mp4 während der Konvertierung automatisch gedreht hat. Meine Videos standen also beim Abspielen auf dem Kopf 🙂 – In meinem Fall bestand die Problemumgehung darin, ffmpeg anzuweisen, sich nicht automatisch mit -noautorotate zu drehen. Eine schnelle Problemumgehung ist die Verwendung von Exiftool und Setzen Sie die Drehung auf 0 – exiftool -Rotation=0 file.mp4

Antwort

Die Die Option -metadata dient zum Bearbeiten der Metadaten. Wenn Sie nur die Metadaten aus einer Eingabedatei in eine Ausgabedatei kopieren möchten, sollten Sie die Option -map_metadata verwenden :

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

Der Dateispezifizierer ist eine nullindizierte Zahl, daher übernimmt „0“ die Metadaten aus der ersten Eingabedatei.

Kommentare

  • Haben Sie eine Idee, wie dies mit concat funktioniert? z.B. ffmpeg -nostdin -f concat -safe 1 -i "${concatlist}" -map_metadata 0 -c copy "$outfile" wobei $concatlist /tmp/concat.list ist und Zeilen wie file 'filenamehere.mp3'
  • ok, hat es : ffmpeg -nostdin -i "${infile}" -f ffmetadata "${metadatafile}" dann ffmpeg -nostdin -f concat -safe 1 -i "${concatlist}" -i "${metadatafile}" -map_metadata 1 -c copy "$outfile"
  • -map_metadata 0 oder -map_metadata 1?
  • @evandrix As In der Antwort angegeben, wählt 0 die erste Eingabedatei als Quelle aus. Weitere Informationen finden Sie unter in diesem Abschnitt der ffmpeg-Dokumente .
  • ok, vielen Dank ~

Antwort

FFmpeg stellt standardmäßig alle Metadaten aus der ersten Eingabedatei zur Verfügung an die Ausgabedatei muxer zum Schreiben. Mit -map_metadata können Sie dies überschreiben, indem Sie entweder auf eine andere Eingabe zeigen oder ffmpeg anweisen, globale Eingabemetadaten zu verwerfen (Wert von -1).

Welche der verfügbaren Metadaten jedoch tatsächlich in die Ausgabedatei geschrieben ist, hängt davon ab der Ausgangs-Muxer. Der QT / ISOBMFF-Muxer (für MOV / MP4 / 3GP ..) berücksichtigt nur eine begrenzte Anzahl von Tags, hauptsächlich iTunes-bezogen. Wie @JerryTian feststellte, werden mit -movflags use_metadata_tags alle anderen Tags in die Datei geschrieben. Diese sind jedoch unkonventionell geschrieben – insbesondere Quicktime erkennt diese zusätzlichen Metadateneinträge nicht. Andere, ffmpeg-basierte s / w sollten sie lesen. Oder jeder, der benutzerdefiniertes S / W wie @JerryTian verwendet, kann sein S / W anpassen, um sie zu lesen.

Beachten Sie, dass Movflags nur für die Ausgabe vom QT-Muxer gelten. Matroska (MKV) schreibt Andere Muxer variieren.

Kommentare

  • Ich versuche, Metadaten beim Konvertieren von Musik beizubehalten. Ich habe eine benutzerdefinierte KATALOGID, aber beim Konvertieren von wav to flac. Das Feld bleibt nicht erhalten. ffmpeg -i bb.wav bb2.flac -movflags use_metadata_tags. Irgendeine Idee?
  • Wenn ich Sie also richtig verstehe, ‚ sagen Sie, dass die Verwendung von FFmpeg zum Codieren in eine .mkv standardmäßig alle Metadaten aus der Quelle beibehalten sollte , ohne zusätzliche Optionen angeben zu müssen?

Antwort

Ich habe keinen Weg gefunden, ffmpeg zu haben Bewahren Sie die Daten auf. Aber ich habe festgestellt, dass ich für meine Bedürfnisse die Exif-Metadaten haben wollte und die exiftool eine war bequeme Lösung.

Sie können Metadaten zwischen Videodateien kopieren: https://unix.stackexchange.com/a/492338/83370

Es gibt einen Trick, alle Metadaten mit der Option -all:all>all:all zu kopieren: http://u88.n24.queensu.ca/exiftool/forum/index.php?topic=3440.0

exiftool -TagsFromFile a.MOV "-all:all>all:all" c.MOV 

Kommentare

  • Ich habe alles oben bei Dateien von Canon 200D versucht und dies ist Eigentlich am nützlichsten. Es macht weiter exiftool c.MOV viel kleiner als die Ausgabe des Originals, behält aber das tatsächliche Erstellungsdatum bei (-map_metadata hat es getan Auch, aber nicht -movflags) und Kameraname, aber die Objektivinformationen sind immer noch weg.
  • OK, das war tatsächlich ein guter Ausgangspunkt – alles, was ich tun musste Überspringen Sie diesen Zuordnungsteil. Nur mit exiftool -TagsFromFile in.mp4 out.mp4 wurde der Job erledigt!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.