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?
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?
Antworten:
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 Konvertierungout.mp4
- die Datei nach der Handbremsenkonvertierungfixed.mp4
- die Datei mit "korrigierten" MetadatenDer 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
Um es aufzuschlüsseln, geht dies wie folgt vor:
in.mp4
und out.mp4
), denen die IDs 0 bzw. 1 zugewiesen sind.-map 1
) zu, sodass wir die bereits konvertierten Bitstreams verwenden-map_metadata 0
)-c copy
), um alle Bitströme zu kopieren, anstatt das Video neu zu codieren.Danach könnten Sie natürlich umbenennen fixed.mp4
in out.mp4
.
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
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:
Weitere Informationen finden Sie in der x264-Codierungsanleitung im FFmpeg-Wiki.
Unknown encoder 'libfaac'
Fehler
-c:a aac -strict experimental
stattdessen.
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 touch
Unix-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.
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.
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.
Ich habe ein Bash-Skript erstellt, mit dem die Metadaten touch
wie 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
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 FileModifyDate
von input.mp4
und 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.
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.
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.
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.