• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Filme nach Größe sortieren

gm2601

Advanced Hacker
Hallo Shell-gurus,

kann man aus einer Sammlung von Filmen der Formate "mpg, avi, mp4, mkv" eine Liste generieren, in der die Titel und deren Spieldauer nach Größe abfallend sortiert sind? Die Filme sind obendrein in mehreren Verzeichnissen.
Mit "mediainfo" finde ich beide Angaben, wenn auch "Duration" mehrfach vorkommt. Für eine Filmart in einem Verzeichnis habe ich einen Zweizeiler pro Film geschafft, aber für alle und obendrein sortiert, scheitere ich mit meinem minimalen Syntaxkenntnissen kläglich.

Wer kann (shell)zaubern?
 

abgdf

Guru
Funktioniert das? (Filme und Skript im selben Verzeichnis.)

Perl:
#!/usr/bin/perl

use warnings;
use strict;

sub getFilesnames {
    my @sufs = qw(mpg avi mp4 mkv);
    my @files;
    my ($i, $u);
    for $i (@sufs) {
        my @a = <*$i>;
        for $u (@a) {
            push(@files, $u);
        }
    }
    return @files;
}

sub printTimes {
    my $hours = shift;
    my $minutes = shift;
    my $seconds = shift;
    print "Hours: $hours\n";
    print "Minutes: $minutes\n";
    print "Seconds: $seconds\n\n";
}

sub getSortedIndices {
    my @a = @_;
    my @b = (0 .. $#a);
    my $i;
    my $u;
    my $temp;
    my $temp2;
    for $i (0 .. $#a) {
        for $u (0 .. $#a) {
            if ($a[$u] < $a[$i]) {
                $temp = $a[$i];
                $a[$i] = $a[$u];
                $a[$u] = $temp;
                $temp2 = $b[$i];
                $b[$i] = $b[$u];
                $b[$u] = $temp2;
            }
        }
    }
    return @b;
}


sub getSeconds {
    my $tstr = shift;
    $tstr =~ s/ //g;
    my $hours;
    my $minutes;
    my $seconds;
    my $allseconds;
    my @a = split(/h/, $tstr);
    if ($#a > 0) {
        $hours = shift(@a);
        $tstr = join("h", @a);
    } else {
        $hours = 0;
    }
    @a = split(/min/, $tstr);
    if ($#a >= 0 && $a[0] !~ m/s$/) {
        $minutes = shift(@a);
        $tstr = join("min", @a);
    } else {
        $minutes = 0;
    }
    @a = split(/s/, $tstr);
    if ($#a >= 0) {
        $seconds = shift(@a);
    } else {
        $seconds = 0;
    }
    # printTimes($hours, $minutes, $seconds);
    $allseconds = 3600 * $hours + 60 +$minutes + $seconds;
    return $allseconds;
}

sub getDurations {
    my @files = @_;
    my @seconds;
    my @timestrings;
    my @mediainfo;
    my $minfo;
    my $i;
    my @a;
    my $secs;
    my $tstr;
    for $i (@files) {
        @mediainfo = `mediainfo \"$i\" | grep Duration`;
        $minfo = shift(@mediainfo);
        chomp($minfo);
        @a = split(/: /, $minfo);
        $tstr = pop(@a);
        push(@timestrings, $tstr);
        $secs = getSeconds($tstr);
        push(@seconds, $secs);
    }
    my $r1 = \@timestrings;
    my $r2 = \@seconds;
    return ($r1, $r2);
}

my @files = getFilesnames();
my @durations = getDurations(@files);
my @timestrings = @{$durations[0]};
my @seconds = @{$durations[1]};
my @newIndices = getSortedIndices(@seconds);
my $i;

print "\nFilms, sorted by length: Film, seconds\n\n";
for $i (0 .. $#files) {
    print "\"$files[$newIndices[$i]]\"\t\t\t$timestrings[$newIndices[$i]]\n";
}
print "\n";
Ach so, mehrere Verzeichnisse. Na ja, müßte man halt noch mit dem Modul "File::Find" arbeiten.

Wahrscheinlich glaubst Du, das geht einfach mit sowas wie "find filme | mediainfo | grep Duration | sort reverse", aber so einfach ist das nicht.
 
OP
gm2601

gm2601

Advanced Hacker
Mon Dieu, :eek:ps:

sieht für mich furchtbar kryptisch aus und, ich kann es nicht einmal testen, denn ich scheitere, als User wie als root, am "chmod" mit all meinen Versuchen die Datei ausführbar zu machen. :eek:ps:

Vermute, es liegt an dem mir unbekannten Pluszeichen, das ich nicht wegbekomme:
Code:
ll /run/media/
insgesamt 0
drwxr-x---+  3 root root 60 19. Okt 09:34 guenter
Der anschließende Mountpoint heißt SILBER (schlicht Farbe und Label der 1TB-USB-Diks)
 

josef-wien

Ultimate Guru
guenter = ein Verzeichnis
Eigentümer = root = darf Verzeichnisinhalt lesen, Dateien anlegen/löschen, das Verzeichnis betreten
Gruppe = root = darf Verzeichnisinhalt lesen, das Verzeichnis betreten
Rest der Welt = darf gar nichts
+ = zusätzlich sind ACL-Berechtigungen definiert:
Code:
getfacl guenter


P. S. Fummelst Du am Verzeichnis herum?
 
OP
gm2601

gm2601

Advanced Hacker
abgdf schrieb:
Funktioniert das? (Filme und Skript im selben Verzeichnis.)

Großartig seit mir Josef das mit "perl Sort_film" erklärt hat. (nanu, wo ist das jetzt geblieben?)
An meine zweite Platte, voll und mit Verzeichnissen, habe ich mich noch nicht hingewagt.

Winzigkeit, nicht interessant für mich, aber vielleicht für den Perfektionisten: Die Tabs nach den Titeln sind nicht gleich verteilt.
Bitte nicht als Mecker betrachten!



josef-wien schrieb:
"guenter" ist ein Verzeichnis.
[..]
+ = Zusätzlich sind ACL-Berechtigungen definiert:
Soweit hatte ich mir das bisher auch gedacht, aber "chmod" ließ mich Im Regen stehen.

Code:
getfacl guenter

Hier der output:
Code:
guenter@Emil-3:/run/media> getfacl guenter/
# file: guenter/
# owner: root
# group: root
user::rwx
user:guenter:r-x
group::---
mask::r-x
other::r-x

guenter@Emil-3:/run/media> getfacl guenter/SILBER/Sort_film 
# file: guenter/SILBER/Sort_film
# owner: guenter
# group: users
user::rw-
group::r--
other::r--
auch wenn ich immer noch nicht verstehe, warum ich der Perl-Datei auf der USB-Disk "execute" nicht geben konnte, in $HOME ging das problemlos.

Nachtrag zu Deiner Frage nach "fummeln am Verzeichnis"
Ja, was tut man nicht in seiner Verzweiflung, wenn etwas nicht geht und man hat keine Idee warum.
 

abgdf

Guru
gm2601 schrieb:
Großartig seit mir Josef das mit "perl Sort_film" erklärt hat. (nanu, wo ist das jetzt geblieben?)
An meine zweite Platte, voll und mit Verzeichnissen, habe ich mich noch nicht hingewagt.

Winzigkeit, nicht interessant für mich, aber vielleicht für den Perfektionisten: Die Tabs nach den Titeln sind nicht gleich verteilt.
Dankeschön! Dann schreibe ich Dir noch eine neue Version, die auch die Unterverzeichnisse durchsucht. Etwas Geduld, bitte.
Ich hatte jeweils 3 Tabs gesetzt, weil das auf meiner Konsole am besten aussah. Bei der nächsten Version nehme ich wohl einfach einen.
josef-wien schrieb:
auch wenn ich immer noch nicht verstehe, warum ich der Perl-Datei auf der USB-Disk "execute" nicht geben konnte, in $HOME ging das problemlos.
Kann sein, daß die USB-Disk eine Windows-Formatierung hat, die kein chmod kennt.

Obwohl mich freut, daß Du mir vertraust (kannste auch :)), würde ich ansonsten grundsätzlich doch empfehlen, unbekannten Perl-Code aus dem Internet nicht einfach auf Deinen Platten auszuführen, solange Du gar keine Vorstellung hast, was er da tut. Is' klar, ne?
 

abgdf

Guru
Ok, das sollte auch die Unterverzeichnisse mit durchsuchen, ausgehend von dem Verzeichnis, in dem sich das Skript befindet.
Perl:
#!/usr/bin/perl

use warnings;
use strict;

# sort_films.pl
#
# Sorts films by duration.
# Depends on output of 'mediainfo'.
#
# (C) 2019, abgdf@gmx.net. Licence: GNU GPL version 2.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

use File::Find;
use Cwd;

my $directory = getcwd();

my @FILES = ();
my $NROFFILES = 0;
my @SUFS = qw(mpg avi mp4 mkv);

sub getFilenames {
    my $filename = $File::Find::name;
    my $i;
    for $i (@SUFS) {
        if ($filename =~ m/\.$i/) {
            push(@FILES, $filename);
            $NROFFILES++;
            if ($NROFFILES % 10 == 0) {
                print "10 more filenames added to list.\n";
            }
        }
    }
}

sub printTimes {
    my $hours = shift;
    my $minutes = shift;
    my $seconds = shift;
    print "Hours: $hours\n";
    print "Minutes: $minutes\n";
    print "Seconds: $seconds\n\n";
}

sub getSortedIndices {
    my @a = @_;
    my @b = (0 .. $#a);
    my $i;
    my $u;
    my $temp;
    my $temp2;
    print "\nSorting ";
    print $#a + 1;
    print " entries.\n\n";
    for $i (0 .. $#a) {
        for $u (0 .. $#a) {
            if ($a[$u] < $a[$i]) {
                $temp = $a[$i];
                $a[$i] = $a[$u];
                $a[$u] = $temp;
                $temp2 = $b[$i];
                $b[$i] = $b[$u];
                $b[$u] = $temp2;
            }
        }
    }
    return @b;
}


sub getSeconds {
    my $tstr = shift;
    $tstr =~ s/ //g;
    my $hours;
    my $minutes;
    my $seconds;
    my $allseconds;
    my @a = split(/h/, $tstr);
    if ($#a > 0) {
        $hours = shift(@a);
        $tstr = join("h", @a);
    } else {
        $hours = 0;
    }
    @a = split(/min/, $tstr);
    if ($#a >= 0 && $a[0] !~ m/s$/) {
        $minutes = shift(@a);
        $tstr = join("min", @a);
    } else {
        $minutes = 0;
    }
    @a = split(/s/, $tstr);
    if ($#a >= 0) {
        $seconds = shift(@a);
    } else {
        $seconds = 0;
    }
    # printTimes($hours, $minutes, $seconds);
    $allseconds = 3600 * $hours + 60 +$minutes + $seconds;
    return $allseconds;
}

sub getDurations {
    my @seconds;
    my @timestrings;
    my @mediainfo;
    my $minfo;
    my $i;
    my @a;
    my $secs;
    my $tstr;
    my $count = 0;
    print "\nRunning 'mediainfo' on $NROFFILES files. Please wait.\n";
    for $i (@FILES) {
        @mediainfo = `mediainfo \"$i\" | grep Duration`;
        $count++;
        $minfo = shift(@mediainfo);
        chomp($minfo);
        @a = split(/: /, $minfo);
        $tstr = pop(@a);
        push(@timestrings, $tstr);
        $secs = getSeconds($tstr);
        push(@seconds, $secs);
        if ($count % 10 == 0) {
            print "$count files checked.\n";
        }
    }
    my $r1 = \@timestrings;
    my $r2 = \@seconds;
    return ($r1, $r2);
}
print "\nRunning 'sort_films.pl'.";
print "Searching for files.\n";
find(\&getFilenames, $directory);
my @durations = getDurations();
my @timestrings = @{$durations[0]};
my @seconds = @{$durations[1]};
my @newIndices = getSortedIndices(@seconds);
my $i;

print "\nResult:\n";
print "\nFilms, sorted by length: Film, seconds, readable time\n\n";
for $i (0 .. $NROFFILES - 1) {
    print "\"$FILES[$newIndices[$i]]\"\t$seconds[$newIndices[$i]]\t$timestrings[$newIndices[$i]]\n";
}
print "\n";
HTH :)
 
OP
gm2601

gm2601

Advanced Hacker
abgdf schrieb:
Obwohl mich freut, daß Du mir vertraust (kannste auch :)), würde ich ansonsten grundsätzlich doch empfehlen, unbekannten Perl-Code aus dem Internet nicht einfach auf Deinen Platten auszuführen, solange Du gar keine Vorstellung hast, was er da tut. Is' klar, ne?
Ja, das ist im Prinzip schon klar, nur wenn ich jemand frage und selbst zu wenig Ahnung habe, dann MUSS ich ihm vertrauen.
Klar ist aber auch, dass ich ein Duplikat der Disk habe. ;)

Die Geschichte mit den Tabs im ersten Script dürfte normal sein, denn woher willst Du wissen, wie lange die Titel sind? Sorry, da habe ich zuerst geschrieben und erst dann gedacht.

abgdf schrieb:
Ok, das sollte auch die Unterverzeichnisse mit durchsuchen, ausgehend von dem Verzeichnis, in dem sich das Skript befindet.
*************** Vergiss die Zeilen, .... ***************
Gestartet wie Sript 1 von .../guenter/INTENSO_2 kommt folgendes als stete Wiederholung:
Code:
Use of uninitialized value $minfo in scalar chomp at Sort_film_2 line 131.
Use of uninitialized value $minfo in split at Sort_film_2 line 132.
Use of uninitialized value $tstr in substitution (s///) at Sort_film_2 line 86.
Use of uninitialized value $tstr in split at Sort_film_2 line 91.
Use of uninitialized value $tstr in split at Sort_film_2 line 98.
Use of uninitialized value $tstr in split at Sort_film_2 line 105.
Der Zähler läuft jedoch hoch, bei "370 files checked" habe ich mit "Strg c" abgebrochen.
Beim zweiten Versuch bekomme ich:
Code:
...:/run/media/guenter/INTENSO_2> perl Sort_film_2
Can't open perl script "Sort_film_2": Datei oder Verzeichnis nicht gefunden
und auch auf "ls" kommt nichts mehr, was mich kurz schockierte, aber von Dolphin aus gestartet laufen die Filme noch und die einzige neue Datei ist "Sort_film_2".
Eine neu gestartete shell, sowie ein Wechsel nach $HOME und listete wieder alles auf, als wäre nie etwas gewesen. :irre:
*********************...... denn mit der anderen shell lief es wie gewünscht **************************** :irre:

Selbst im tiefsten Verzeichnis hat das Script "/run/media/guenter/INTENSO_2/Dokus/Geschichte/Steinerner_Zeuge.mpg" ausgegraben und insgesamt die korrekte Anzahl "Sorting 672 entries" beackert.
Zum Schluss kam, quasi als Entdeckung noch
Code:
Use of uninitialized value $timestrings[648] in concatenation (.) or string at Sort_film_2 line 157.
"/run/media/guenter/INTENSO_2/Dokus/Wirtschaft/Krupp-3_3.mpg.idx2"      60
die Datei, von der ich nichts wusste und die ich nicht mehr brauche.

Speichert das Script Titel und Laufzeit irgendwo zwischen, in "/tmp" habe ich nichts gefunden?


Respekt vor der flexiblen Programmierung! Ich ziehe meinen Hut, und sage
:thumbs: DANKE! :thumbs:
 

abgdf

Guru
gm2601 schrieb:
Code:
Use of uninitialized value $timestrings[648] in concatenation (.) or string at Sort_film_2 line 157.
"/run/media/guenter/INTENSO_2/Dokus/Wirtschaft/Krupp-3_3.mpg.idx2"      60
Oh, das war ein Bug: Das Skript sucht nach ".mpg", aber es sollte nur am Ende danach suchen (also "Krupp-3_3.mpg"), nicht in der Mitte ("Krupp-3_3.mpg.idx2"). Ist ausgebessert.
gm2601 schrieb:
Selbst im tiefsten Verzeichnis hat das Script "/run/media/guenter/INTENSO_2/Dokus/Geschichte/Steinerner_Zeuge.mpg" ausgegraben und insgesamt die korrekte Anzahl "Sorting 672 entries" beackert.
Ja, das ist cool. Ich hatte deshalb auch mal ein Skript veröffentlicht, daß das mit mp3s macht und die dann geshuffelt abspielt. Können wir mal gesondert drüber schreiben, wenn Dich das interessiert.
gm2601 schrieb:
Speichert das Script Titel und Laufzeit irgendwo zwischen, in "/tmp" habe ich nichts gefunden?
Hmm, die Laufzeit wird ja in Sekunden und als lesbarer String mit ausgegeben, oder? Deshalb doch die Tabulatoren.
Wegen des Titels müßtest Du mal die Ausgabe von mediainfo für eine Film-Datei mit Titel posten. Ich kann das bei mir gerade nicht nachvollziehen, anscheinend haben meine Filmdateien keine Titel.
Du müßtest halt genau spezifizieren, wie Du die Ausgabe haben möchtest. Wenn ich weiß, was Du möchtest, kann ich das dann auch bauen. ;)

Ansonsten war mein Algorithmus, um die Sekunden zu bekommen, etwas komisch. Weil "mediainfo" mal "1h 25 min", mal "3s 45 ms" liefert. Hab' mir das jetzt anders überlegt und mache das jetzt so, daß ich den String selbst verändere, zu "1h25min0s0ms" einerseits, "0h0min3s45ms" andererseits. Neue Version:

Perl:
#!/usr/bin/perl

use warnings;
use strict;

# sort_films.pl
#
# Sorts films by duration.
# Depends on output of 'mediainfo'.
#
# (C) 2019, abgdf@gmx.net. Licence: GNU GPL version 2.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

use File::Find;
use Cwd;

my $directory = getcwd();

my @FILES = ();
my $NROFFILES = 0;
my @SUFS = qw(mpg avi mp4 mkv);

sub getFilenames {
    my $filename = $File::Find::name;
    my $i;
    for $i (@SUFS) {
        if ($filename =~ m/\.$i$/) {
            push(@FILES, $filename);
            $NROFFILES++;
            if ($NROFFILES % 10 == 0) {
                print "10 more filenames added to list.\n";
            }
        }
    }
}

sub printTimes {
    my $hours = shift;
    my $minutes = shift;
    my $seconds = shift;
    print "Hours: $hours\n";
    print "Minutes: $minutes\n";
    print "Seconds: $seconds\n\n";
}

sub getSortedIndices {
    my @a = @_;
    my @b = (0 .. $#a);
    my $i;
    my $u;
    my $temp;
    my $temp2;
    print "\nSorting ";
    print $#a + 1;
    print " entries.\n\n";
    for $i (0 .. $#a) {
        for $u (0 .. $#a) {
            if ($a[$u] < $a[$i]) {
                $temp = $a[$i];
                $a[$i] = $a[$u];
                $a[$u] = $temp;
                $temp2 = $b[$i];
                $b[$i] = $b[$u];
                $b[$u] = $temp2;
            }
        }
    }
    return @b;
}


sub getSeconds {
    my $filename = shift;
    my $tstr = shift;
    $tstr =~ s/ //g;
    my $prefix = "";
    if ($tstr !~ /h/) {
        $prefix = "0h";
    }
    if ($tstr !~ /min/) {
        $prefix .= "0min";
    }
    my $suffix = "";
    if ($tstr =~ /min$/) {
        $suffix = "0s0ms";
    }
    if ($tstr =~ /\ds$/) {
        $suffix = "0ms";
    }
    $tstr = "$prefix$tstr$suffix";
    $tstr =~ s/ms$//;
    $tstr =~ s/s/ /;
    $tstr =~ s/min/ /;
    $tstr =~ s/h/ /;
    my @time_ = split(/ /, $tstr);
    if ($#time_ != 3) {
        print "Warning: Incorrect timestring for file \"$filename\".\n";
    }
    my $seconds;
    $seconds = 3600 * $time_[0] + 60 * $time_[1] + $time_[2];
    return $seconds;
}

sub getDurations {
    my @seconds;
    my @timestrings;
    my @mediainfo;
    my $minfo;
    my $i;
    my @a;
    my $secs;
    my $tstr;
    my $count = 0;
    print "\nRunning 'mediainfo' on $NROFFILES files. Please wait.\n";
    for $i (@FILES) {
        @mediainfo = `mediainfo \"$i\" | grep Duration`;
        $count++;
        $minfo = shift(@mediainfo);
        chomp($minfo);
        @a = split(/: /, $minfo);
        $tstr = pop(@a);
        push(@timestrings, $tstr);
        $secs = getSeconds($i, $tstr);
        push(@seconds, $secs);
        if ($count % 10 == 0) {
            print "$count files checked.\n";
        }
    }
    my $r1 = \@timestrings;
    my $r2 = \@seconds;
    return ($r1, $r2);
}
print "\nRunning 'sort_films.pl'.";
print "Searching for files.\n";
find(\&getFilenames, $directory);
my @durations = getDurations();
my @timestrings = @{$durations[0]};
my @seconds = @{$durations[1]};
my @newIndices = getSortedIndices(@seconds);
my $i;

print "\nResult:\n";
print "\nFilms, sorted by length: Film, seconds, readable time\n\n";
for $i (0 .. $NROFFILES - 1) {
    print "\"$FILES[$newIndices[$i]]\"\t$seconds[$newIndices[$i]]\t$timestrings[$newIndices[$i]]\n";
}
print "\n";
 
OP
gm2601

gm2601

Advanced Hacker
abgdf schrieb:
Oh, das war ein Bug: Das Skript sucht nach ".mpg", aber es sollte nur am Ende danach suchen (also "Krupp-3_3.mpg"), nicht in der Mitte ("Krupp-3_3.mpg.idx2"). Ist ausgebessert.
Ein Bug der Deinen Anspruch störte, nicht meinen. ;)

abgdf schrieb:
Ja, das ist cool. Ich hatte deshalb auch mal ein Skript veröffentlicht, daß das mit mp3s macht und die dann geshuffelt abspielt. Können wir mal gesondert drüber schreiben, wenn Dich das interessiert.
Mit meiner mp3-Oldiesammlung habe ich mich auch schon mal herumgeschlagen, nun haben die files Nummern, der Rest ist in den Metadaten. Ich sehe für mich keinen Bedarf an einer Größensortierung.
Danke für das Angebot!

Hmm, die Laufzeit wird ja in Sekunden und als lesbarer String mit ausgegeben, oder? Deshalb doch die Tabulatoren.
Die tabs sind kein Problem, ich habe den output in ein File geleitet, alles was für mich nicht relevant ist entfernt und oocalc hat mir die Tabs in Reih und Glied gebracht. Für mich bereits perfekt! :thumbs:

Wegen des Titels müßtest Du mal die Ausgabe von mediainfo für eine Film-Datei mit Titel posten. Ich kann das bei mir gerade nicht nachvollziehen, anscheinend haben meine Filmdateien keine Titel.
Die Filmnamen sind identisch mit den Dateinamen und tauchen in "mediainfo" unter "Complete name" auf:
Code:
mediainfo Krupp-3_3.mpg
General
Complete name                            : Krupp-3_3.mpg
Format                                   : MPEG-PS
File size                                : 1.65 GiB
Duration                                 : 1 h 27 min
......brauchst Du den Rest noch? .............

Ansonsten war mein Algorithmus, um die Sekunden zu bekommen, etwas komisch. Weil "mediainfo" mal "1h 25 min", mal "3s 45 ms" liefert. Hab' mir das jetzt anders überlegt und mache das jetzt so, daß ich den String selbst verändere, zu "1h25min0s0ms" einerseits, "0h0min3s45ms" andererseits. Neue Version:
...ist für mich perfekt und Millisekunden tauchen bei mir nicht auf. Neuer Output, drei Beispiele:
Code:
"/run/media/guenter/INTENSO_2/Vom_Winde_verweht.mpg"    12660   3 h 31 min
"/run/media/guenter/INTENSO_2/Dokus/Wirtschaft/Krupp-3_3.mpg"   5220    1 h 27 min
"/run/media/guenter/INTENSO_2/Musik/5_Jealous_Guy.mpg"  247     4 min 7 s
Jealous_Guy als kürzester "Film" gehört eigentlich via Audacity als reine Mp3-Datei in die Oldiesammlung.
 

abgdf

Guru
Ok, gut. Wenn die Filmnamen den Dateinamen entsprechen (was bei mir auch so ist), dann müßte die letzte Version des Skripts ja reichen (weil der Filmname auch keine neue Information wäre).

Stimmt, ein mp3, das den Dateinamen ".mpg" hat, wird nicht als mp3 erkannt, sondern als Film behandelt. Man könnte dem Skript noch beibringen, das zu unterscheiden, indem man jede Datei erstmal mit dem "file"-Befehl (Shell) untersucht, oder mit dem Perl-Modul "File::Type". Das wäre möglich, ist aber nicht nötig, denke ich. Es würde das Skript sonst halt deutlich langsamer machen.

Zu "Jealous Guy" gibt's ja auch schöne Filmaufnahmen: :)
https://youtu.be/XV5z_btMbuQ?t=1219

Also, insgesamt müßte jetzt doch alles klar sein, oder?
 
OP
gm2601

gm2601

Advanced Hacker
abgdf schrieb:
[...]". Das wäre möglich, ist aber nicht nötig, denke ich. Es würde das Skript sonst halt deutlich langsamer machen.
Du hast recht, das ist wirklich nicht nötig, die Datei gehört eigentlich gar nicht in mein Filmarchiv und meine betagte CPU ist/war mit über 600 Filmen auch so schon eine Weile beschäftigt.

Zu "Jealous Guy" gibt's ja auch schöne Filmaufnahmen: :)
https://youtu.be/XV5z_btMbuQ?t=1219
Danke, kannte ich, denn es gibt wenig, das ich von den vier "Pilzköpfen" nicht kenne.

Also, insgesamt müßte jetzt doch alles klar sein, oder?
:thumbs: Ich fühle mich bestens bedient, danke nochmal.
 
OP
gm2601

gm2601

Advanced Hacker
Nachtrag:

Hallo abgdf,

die Liste hat sich über Erwarten bewährt. :thumbs:
Seit ich die Liste aufs Handy übertragen habe, können wir gespeicherte Filme und Dokus prima auf unsere normale Zeit zu Bett zu gehen einstellen, wenn das normale Programm, wie so oft, unseren Geschmack nicht trifft.
 
Oben