Wie kann Handbrake die Erfassungs- / Erstellungszeit beibehalten?


14

Handbremse ist ein großartiges Tool zur Videokomprimierung, aber es scheint nicht die ursprüngliche Aufnahmezeit nach dem Komprimieren eines Videos beizubehalten. Irgendeine Idee, wie man das behebt?


@slhck Ja, ich meine Erstellungszeit. Ich verwende Lightroom zum Verwalten meiner Videos. Nach der Komprimierung wird die Aufnahme- / Erstellungszeit zur geänderten Zeit.
Pixelfreak

Antworten:


21

Sie können die vorhandenen Metadaten von einer Datei in eine andere kopieren, ohne das Video mit FFmpeg neu codieren zu müssen . Es dauert im Grunde eine Sekunde. Nehmen wir dazu drei Dateien an:

  • in.mp4 - die Originaldatei vor der Konvertierung
  • out.mp4 - die Datei nach der Handbremsenkonvertierung
  • fixed.mp4 - die Datei mit "korrigierten" Metadaten

Der FFmpeg-Befehl zum Kopieren des vollständigen Metadatensatzes in die neue Datei lautet dann:

ffmpeg -i in.mp4 -i out.mp4 -map 1 -map_metadata 0 -c copy fixed.mp4

Erklärung der Syntax:

Um es aufzuschlüsseln, geht dies wie folgt vor:

  • Nehmen Sie zwei Eingabedateien ( in.mp4und out.mp4), denen die IDs 0 bzw. 1 zugewiesen sind.
  • Ordnen Sie nur die Video- / Audio- / Untertitel-Streams von Datei 1 der Ausgabe ( -map 1) zu, sodass wir die bereits konvertierten Bitstreams verwenden
  • Ordnen Sie nur die Metadaten von Datei 0 der Ausgabe zu ( -map_metadata 0)
  • Verwenden Sie den Kopiercodec ( -c copy), um alle Bitströme zu kopieren, anstatt das Video neu zu codieren.

Danach könnten Sie natürlich umbenennen fixed.mp4in out.mp4.


Beweis:

Als Beispiel ist hier ein Teil des Metadatensatzes meiner Originaldatei:

$ mediainfo in.mp4 | grep "Encoded date" | head -n 1
Encoded date : UTC 2012-01-08 11:16:19

Hier ist die Datei nach der Konvertierung der Handbremse:

$ mediainfo out.mp4 | grep "Encoded date" | head -n 1
Encoded date : UTC 2012-12-24 11:39:35

Hier ist die endgültige Datei nach dem Zuordnen der Metadaten:

$ ffmpeg -i in.mp4 -i out.mp4 -map 1 -map_metadata 0 -c copy fixed.mp4
[…]

$ mediainfo fixed.mp4 | grep "Encoded date" | head -n 1
Encoded date : UTC 2012-01-08 11:16:19    

Wenn Sie alles mit FFmpeg machen wollen:

Eigentlich müssen Sie Handbrake nicht wirklich verwenden, wenn Sie FFmpeg verwenden können, auf das Handbrake sowieso angewiesen ist. Im einfachsten Fall können Sie Ihre Konvertierung folgendermaßen durchführen:

ffmpeg -i in.mp4 -c:v libx264 -crf 23 -c:a aac -map_metadata 0 out.mp4

Dadurch wird die Eingabe mit dem x264-Encoder und AAC-Audio in eine Ausgabedatei konvertiert, wobei die ursprünglichen Metadaten kopiert werden. Um die Qualität der Ausgabe zu ändern, können Sie:

  • Ändern Sie den CRF-Wert für Video. Niedriger bedeutet bessere Qualität. 23 ist die Standardeinstellung, und alles unter 18 ist wahrscheinlich visuell verlustfrei.
  • Ändern Sie die Bitrate für Audio. Weitere Informationen finden Sie im AAC-Codierungshandbuch .

Weitere Informationen finden Sie in der x264-Codierungsanleitung im FFmpeg-Wiki.


1
Wow, das ist eine coole Problemumgehung, sieht aber ein bisschen entmutigend aus. Ich wünschte, Handbrake macht das hinter den Kulissen. Vielen Dank!
Pixelfreak

Der Metadatenübertragungsbefehl funktioniert, aber der letzte Befehl, der auch die Konvertierung durchführte, gab mir einen Unknown encoder 'libfaac'Fehler
pixelfreak

Dann wird Ihr ffmpeg nicht mit FAAC-Unterstützung kompiliert. Versuchen Sie es -c:a aac -strict experimentalstattdessen.
Slhck

5

Leider scheint es, dass die Handbremse dies nicht alleine kann, aber ähnlich wie im Beispiel ffmpeg können die Zeitstempel nach der Komprimierung mit dem touchUnix-Befehl aus dem Original kopiert werden :

touch -r MVI_1234.MOV compressed_MVI_1234.m4v

Dadurch wird der Zeitstempel für die komprimierte Datei auf den gleichen Wert wie für die angegebene Referenzdatei gesetzt.


1
Es wird den Zeitstempel für die Datei setzen, ja, aber nur im Dateisystem. Die EXIF-Daten haben nicht den richtigen Zeitstempel "Datum / Uhrzeit Original".
Stephen Schrauger

3

Ich fand einen einfacheren Weg , dies zu tun, eine andere Software genannt Adapter: http://www.macroplant.com/adapter/

Es hat nicht alle erweiterten Einstellungen wie HandBrake, aber es erledigt den Job (auch mit ffmpeg) und behält die Metadaten bei, die ich brauche.


1
Ich glaube nicht, dass Adapter dazu in der Lage ist. Ich habe gerade die neueste Version getestet und kann die Einstellung zum Speichern von Metadaten nirgendwo finden. Darüber hinaus scheint es nicht alle Videodateitypen wie MTS usw. zu konvertieren
jjj

Schade, dass es nicht mit Sonys m2ts-Format kompatibel ist
Diego Vieira

2

Ich verwende macOS Yosemite und HandBrakeBatch - verwenden Sie es zum Konvertieren von Dateien, klicken Sie jedoch im Menü "Einstellungen" auf das Feld "Dateierstellungs- und Änderungsdaten beibehalten".

Dann importiere ich die Videos in Lightroom 5, aber die Erstellungsdaten werden immer noch nicht beibehalten. Am wichtigsten ist jedoch, dass die Dateien im Finder mit dem richtigen Erstellungsdatum angezeigt werden. Daher habe ich alle in der Lightroom-Bibliothek ausgewählt → Metadaten (rechte Dialogspalte) → Erfassungszeit → Zum Erstellungsdatum der Datei ändern → Alle ändern.

Ich hatte 850 alte Familienvideos - ich musste diesen Vorgang in Stapeln von 100 durchführen. Die Handbremse stürzt mit vielen Dateien ab.


Schöne Entdeckung, kann sehen, wie ich diese App oft benutze.
Calum_b

Beachten Sie, dass die App nicht mehr gewartet wird : osomac.com/2013/08/08/handbrake-adds-real-batch-processing
slhck

1

Ich habe ein Bash-Skript erstellt, mit dem die Metadaten touchwie oben vorgeschlagen stapelweise übertragen werden können. Damit dies funktioniert, müssen Sie Ihre ursprünglichen und konvertierten Dateien in separaten Verzeichnissen mit jeweils der gleichen Anzahl von Dateien (die Verzeichnisse dürfen nur die Videodateien enthalten, da andere Dateien / Verzeichnisse stören) und in derselben Reihenfolge haben. Dann werden nur die Metadaten kopiert und Sie sind fertig. Das Skript listet alle Dateipaare auf, sodass Sie am Ende nach Fehlern suchen können, wenn Sie möchten.

Der Code ist vielleicht nicht der sauberste, da er mein erstes richtiges Bash-Skript war, aber er war ziemlich schnell und stabil für mich.

#!/bin/bash
#Sets IFS to \n to allow for filenames with spaces
IFS=$'\n'

#Source directory and converted direcotry
dir1=$1
dir2=$2

#Array with source filepaths
srcf=()
#Array with converted filepaths
cnvf=()

#Adds filepaths from the source directory to srcf array
for file in $(ls -1 $dir1); do
    srcf+=("$dir1/$file")
done
#Adds filepaths from the converted directory to cnvf array
for file in $(ls -1 $dir2); do
    cnvf+=("$dir2/$file")
done

#Checks if source and convert folders have the same number of files
if [ ${#srcf[*]} -eq ${#cnvf[*]} ]
then
    #Counter variable
    fnum=0
    #Loops through the arrays and runs touch command on pairs of files to transfer the metadata
    while [ $fnum -lt ${#srcf[*]} ]; do
        echo $fnum
        echo ${srcf[$fnum]} ${cnvf[$fnum]}
        touch -r ${srcf[$fnum]} ${cnvf[$fnum]}
        ((fnum++))
    done
else
    echo "The provided paths do not have the same number of files. Both paths must have the same number of files in the same order."
fi

Zum Ausführen tun: sudo bash script.sh /sourcedir /converteddir


1

Wenn Sie die Änderungszeit auf Dateiebene meinen, hatte ich das gleiche Problem und konnte es mit exiftool wiederherstellen .

exiftool -tagsFromFile input.mp4 -extractEmbedded -all:all -FileModifyDate -overwrite_original output.mp4

Dies nimmt die Metadaten und FileModifyDatevon input.mp4und kopiert sie nach output.mp4.

Um dies zu automatisieren, da ich eine große Anzahl von Dateien transkodieren musste, habe ich ein Tool namens Shrinkwrap erstellt , das zuerst mit FFmpeg transkodiert (ich habe mich von HandBrake entfernt, weil mehr Metadaten beibehalten werden müssen) und dann den Änderungszeitstempel mit exiftool wiederherstellt.


0

Nach langem Suchen habe ich es größtenteils aufgegeben, alte Videodateien mit dem richtigen Erstellungs- / Änderungsdatum zu verwenden, um das Erstellungs- / Änderungsdatum meiner neuen handbremskomprimierten Videodateien zu überschreiben. Da die meisten meiner Videos das Datum und die Uhrzeit im Dateinamen haben, habe ich experimentiert und zwei Methoden zum Arbeiten bekommen. Das erste und beste ist die Verwendung der Zeitstempelmethode von Advanced Renamer, mit der das Datum der Änderung, Erstellung und des Zugriffs auf die Datei geändert werden kann, nicht nur der Dateiname selbst. https://www.advancedrenamer.com/download .

Ich habe auch ein Powershell-Skript https://www.michaelmiklis.de/set-creation-and-modification-date-from-filename/ gefunden, das von einem Programmierer für andere Dateinamen- / Datumsformate angepasst werden kann. Im aktuellen Zustand funktioniert es nur, wenn der Dateiname genau so strukturiert ist wie in diesem Beispiel.

Glücklicherweise ist meine Anzahl an Videos ohne das im Dateinamen geänderte Datum so gering, dass ich diese manuell ändern kann, was nicht zu lange dauert.

Ich habe versucht, ffmpeg zu verwenden, aber der Befehl map_metadata ändert nur die Daten in der Datei, nicht das Änderungsdatum, das von der Datei selbst erstellt wurde. Diese Art von internen Metadaten Handbrake funktioniert sowieso schon gut.


0

Das Programm MyFFmpeg macht das sehr gut. In den Optionen können Sie die ursprüngliche Erstellung / das Änderungsdatum aus der Quelldatei beibehalten .

Ich habe danach gesucht, weil ich meine Heimvideos auf einem Plex-Server habe und die Dateien nach dem Erstellungsdatum sortiert sind. Dies ist sehr nützlich, wenn Sie Inhalte aus einem bestimmten Jahr anzeigen möchten.

Leider ist dies keine kostenlose Option, kostet derzeit 20 Euro oder etwa 21 US. Sie haben eine Testversion für 10 Anwendungen, bevor Sie eine Lizenz kaufen müssen. Überrascht, dass einige der kostenlosen ffmpeg-GUIs diese Option nicht haben oder hinzufügen.


0

Ich versuche, das Erstellungsdatum beizubehalten, während ich meine unglaublich großen GoPro MP4-Videos in H.264 komprimiere.

Ich habe das Programm HandBrakeBatch gefunden . Es ist genau das, was ich brauche, um über 1000 Dateien auf einmal zu komprimieren und dabei das Erstellungsdatum (Metadaten) beizubehalten.

Habe keine anderen Programme gefunden, die dies können. Versucht mit FFmpeg, HandBrake und Wonderful Video Converter, aber nein.


Beachten Sie, dass HandBrakeBatch nicht mehr gepflegt wird : osomac.com/2013/08/08/handbrake-adds-real-batch-processing
slhck
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.