Zeitstempel in der bash anpassen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
HumiNi
Beiträge: 310
Registriert: 02.10.2014 21:46:18

Zeitstempel in der bash anpassen

Beitrag von HumiNi » 25.01.2023 18:37:30

Beim Organisieren meiner Fotos und Videos (Download von Google Photos) möchte ich die Zeitstempel der Videodateien entsprechend des Aufnahmedatums setzen.
Die Dateien haben Namen mit folgendem Muster;

Code: Alles auswählen

VID_20211011_141135913.mp4
Meine bisherige (diletantische) Lösung sieht so aus:

Code: Alles auswählen

touch -t $(echo "$VIDEO" | sed 's/[A-Z,a-z,.,_]*//g' | cut -c -12) "$VIDEO"
Mir brennt sie in den Augen und ich bin mir sicher, dass das eleganter gehen müsste. Allerdings bin ich fast 10 Jahre aus dem Thema (bash) raus und bekomme es nicht hin. :oops:
Wäre nett, wenn jemand eine Vorschlag für eine nettere Lösung hat (z.B. ohne cut und/oder mit besserer expression).
Danke
Gedächtnis wie ein Rechen: Nur Mist bleibt hängen.

tobo
Beiträge: 1964
Registriert: 10.12.2008 10:51:41

Re: Zeitstempel in der bash anpassen

Beitrag von tobo » 25.01.2023 19:07:24

Also - es funktioniert, aber es gefällt dir nicht. Bis auf die , in der Zeichenklasse und den * ist das doch soweit ok. Wie stabil ist denn das Benennungsschema (VID_Datum_Uhrzeit.mp4)? Steht da immer VID, sind das immer 3 Buchstaben vor einem _, können da auch Ziffern stehen?

HumiNi
Beiträge: 310
Registriert: 02.10.2014 21:46:18

Re: Zeitstempel in der bash anpassen

Beitrag von HumiNi » 25.01.2023 20:05:52

Tja, das ist die Frage. Wie robust ist der Dateiname (in Zukunft)? Momentan entsprechen die heruntergeladenen Videos alle dem Muster:

Code: Alles auswählen

VID_[0-9]_[0-9].mp4
ob das auch von meinem Smartphone abhängt oder ob Google die Videodateien in Zukunft anders speichert, kann ich nicht sagen.
Lieber wäre mir der Zugriff auf Metadaten (wie bei Photos)

Code: Alles auswählen

touch -d "`exif -m -t DateTimeOriginal "$FOTO" | sed 's/:/-/1' | sed 's/:/-/1'`" "$FOTO"
(auch hier sehe ich deutlichen Verschönerungsbedarf) aber das ist bei Videodateien wohl Illusion.
Gedächtnis wie ein Rechen: Nur Mist bleibt hängen.

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: Zeitstempel in der bash anpassen

Beitrag von MSfree » 25.01.2023 20:40:04

entsorgt2014 hat geschrieben: ↑ zum Beitrag ↑
25.01.2023 20:05:52
Lieber wäre mir der Zugriff auf Metadaten (wie bei Photos)
EXIF-Daten sind keine Pflichtangaben innerhalb von Bilddateien. EXIF zum Umbenennen oder zum Setzen des Zeitstempels zu verwenden, ist also nicht verlässlich.

Davon abgesehen kann man aber auch in mp4-Dareien EXIF-Daten finden und auch dort hineinschreiben. EXIF ist nicht auf JPG-Dateien beschränkt, sondern wird auch von Videoformaten und diversen Bildformaten unterstützt.

tobo
Beiträge: 1964
Registriert: 10.12.2008 10:51:41

Re: Zeitstempel in der bash anpassen

Beitrag von tobo » 25.01.2023 21:11:07

entsorgt2014 hat geschrieben: ↑ zum Beitrag ↑
25.01.2023 20:05:52
Tja, das ist die Frage. Wie robust ist der Dateiname (in Zukunft)? Momentan entsprechen die heruntergeladenen Videos alle dem Muster:

Code: Alles auswählen

VID_[0-9]_[0-9].mp4
Als musterbezogene Alternative:

Code: Alles auswählen

touch -t $(echo "$VIDEO" | tr -d VID_ | head -c12) "$VIDEO"
Schreibt man das Datum in eine Variable, dann kann man über ${datetime:0:12} zugreifen.

HumiNi
Beiträge: 310
Registriert: 02.10.2014 21:46:18

Re: Zeitstempel in der bash anpassen

Beitrag von HumiNi » 26.01.2023 11:50:01

Danke für die Hinweise, die mich zu folgender Änderung geführt haben:

Code: Alles auswählen

for VIDEO in VID_*.mp4
do
  TIMESTAMP="$(echo "$VIDEO" | tr -c -d "[:digit:]")"
  touch -t ${TIMESTAMP:0:12} "$VIDEO"
done
Gefällt mir deutlich besser...
Gedächtnis wie ein Rechen: Nur Mist bleibt hängen.

Xantorix
Beiträge: 177
Registriert: 27.01.2018 13:33:06

Re: Zeitstempel in der bash anpassen

Beitrag von Xantorix » 28.01.2023 17:59:51

Hallo,

für Fotos (jpg) hatte ich da mal was mit exif2.

Nach der Installation von exif2 hab ich das mit dem kleinen bash gelöst.

Code: Alles auswählen

#!/bin/bash
find . -iname '*.jpg' -exec exiv2 mv '-r %Y-%m-%d_%Hh%Mm%Ss' {} +
Damit habe ich alle Bilder einheitlich mit Datum und Uhrzeit im Dateinamen.

Inwieweit man das auf Videos erweitern kann weiß ich nicht.

Gruß Xante

Antworten