staging.inyokaproject.org

tree für Video Dateien..?

Status: Ungelöst | Ubuntu-Version: Xubuntu 18.04 (Bionic Beaver)
Antworten |

sirbender

Anmeldungsdatum:
4. Februar 2011

Beiträge: 354

Hallo,

ich nutze tree um Listings von ganzen Backup-Festplatten zu erstellen.

tree --dirsfirst -h -t /ordner

1
2
3
├── [360M]  Italien-2007-05-22.mp4
├── [449M]  Orchesterprobe-Weihnachten-2012.mp4
├── [675M]  Geburtstag-Oma-2018.mp4

Ich habe auch eine Festplatte wo ich meine Smartphone-Vidoes backupe. Nun hätte ich gerne eine Ausgabe identisch mit tree, wo dann aber zusaetzlich zur Dateigrösse in MB auch noch die Videolänge und Videoauflösung angegeben werden.

1
2
3
├── [360M, 33:05, 1920x1080]  Italien-2007-05-22.mp4
├── [449M, 01:12:04, 1920x1080]  Orchesterprobe-Weihnachten-2012.mp4
├── [675M, 22:43, 3840x2160]  Geburtstag-Oma-2018.mp4

Ich kann das theoretisch mit ffmpeg für eine Einzeldatei ausgeben, wobei das kein Einzeler ist. Auch geht es nicht recursiv für ganze Festplatten wie tree das kann.

Gibt es ein Tool mit Tree-Funktionalität, wo recursiv für eine ganze Festplatte ein Listing in einem Rutsch machen kann, wo Grösse, Länge und Auflösung in einem Einzeiler ausgegeben werden?

fork991

Anmeldungsdatum:
26. Mai 2010

Beiträge: 58

Nein. So ein Tree gibt es wahrscheinlich nicht. Aber wenn Du Dir ein Script schreibst, was Auflösung und Dauer des Videos herausfinden kann und dies in der Tree-Ausgabe ersetzt, dann kannst Du Dir quasi das gewünschte tree selber basteln.

Ungefähr so(ungetestet):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/bash

while read zeile ;do 
     if [[ $zeile =~ \[ ]] ;then 
        # nur Zeilen bearbeiten, die ein [ enthalten
        set $zeile 
        # der Dateiname ist der letzte Parameter in der tree-Ausgabe
        dateiname="${@: -1}"
        # Alles zwischen den eckigen Klammern wird ersetzt
        sed -re "s/\[([^]]+)\]/[\1, $(ermittle_aufloesung_dauer $dateiname)] /" <<<"$zeile"
     else
        # Zeilen ohne [ Zeichen direkt ausgeben
        echo "$zeile"
     fi
done < <( tree ...)

Der Schalter -f für tree wird dabei noch hilfreich sein.

fork991

Anmeldungsdatum:
26. Mai 2010

Beiträge: 58

Ich habe den Vorschlag jetzt nochmal etwas erweitert und getestet:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash

video_aufloesung_dauer() {
   echo "n/a"
}

while read zeile ;do 
     if [[ $zeile =~ \[ ]] ;then 
        # nur Zeilen bearbeiten, die ein [ enthalten
        set $zeile 
        # der Dateiname ist der letzte Parameter in der tree-Ausgabe
        dateiname="${@: -1}"
        # Alles zwischen den eckigen Klammern wird ersetzt
	# Datei mit vollem Pfadnamen wird ersetzt durch einfachen Dateinamen
        sed 	-re "s/\[([^]]+)\]/[\1, $(video_aufloesung_dauer $dateiname)]/" 	\
		-re 's#([[:space:]])[^[:space:]]*/([^/]+)$#\1\2#' <<<"$zeile"
     else
        # Zeilen ohne [ Zeichen direkt ausgeben
        echo "$zeile"
     fi
done < <( tree --dirsfirst -h -t -f "$@")

Du musst nur noch die Funktion video_aufloesung_dauer so schreiben, dass Du die gewünschte Ausgabe erhältst(z. B. mittels ffmpeg, mediainfo oder mplayer). Im Moment wird halt noch n/a ausgegeben.

So sieht das aktuell aus:

$ mytree /home/mike/tst

/home/mike/tst
├── [4.0K, n/a]  finanzen
├── [4.0K, n/a]  kinder
├── [4.0K, n/a]  arbeit
│   └── [   0, n/a]  test1.txt
├── [4.0K, n/a]  privat
│   └── [   0, n/a]  test23q.txt
├── [4.0K, n/a]  rente
│   └── [   0, n/a]  bla.txt
├── [ 265, n/a]  x
└── [ 689, n/a]  mytree

Schmutzfink

Anmeldungsdatum:
29. Juni 2008

Beiträge: 91

Du musst nur noch die Funktion video_aufloesung_dauer so schreiben, dass Du die gewünschte Ausgabe erhältst

Ein weiterer Verdächtiger wäre da noch ffprobe. Für die Dauer habe ich im Netz folgendes Beispiel gefunden und verwende es seit dem:

ffprobe -v error -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 <Dateiname>

Da kommt dann wirklich nur der Wert raus.

Aber für die Auflösung bzw. Geometrie habe ich in den Man-Pages noch nichts gefunden.

p.s. Mit Exiftool geht das auch. Da hatte ich mal auf der Webseite eine Anleitung gesehen, wie man da NUR die gewünschte Angabe bekommt. habe mich damit aber nicht weiter beschäftigt.

fork991

Anmeldungsdatum:
26. Mai 2010

Beiträge: 58

Die Zeile 4 in obigem Script verursacht einen Fehler: 'echo "n/a"' (Der / stört in dem Kontext). Besser so schreiben 'echo "n\/a"'.

sirbender

(Themenstarter)

Anmeldungsdatum:
4. Februar 2011

Beiträge: 354

Vielen Dank an alle. Ich werde eure Ratschlaege umsetzten.

Antworten |