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

wie kann man alle Dateiendungen sämtlicher Dateien auf einer Platte in einem Rutsch umbenennen von *.avi zu *.mpg?

Journey77

Newbie
Hallo

mein Fernseher kann leider von Festplatte keine *avi Dateien lesen, weshalb ich sämtliche Filme und Episoden von TV-Serien umbennen muss von *avi auf *mpg.

hab es mit rename 's/\.avi$/.mpg/' *.avi aber leider ohne Erfolg. Der Befehl wird ausgeführt, aber es ändert sich nichts an den Dateiendungen.

Schön wäre ein Befehl, wenn man nicht durch sämtliche Ordner durchgehen müsste, sondern in einem Rutsch die Files der ganzen Platte umbennen könnte.

Könnt ihr helfen? Herzlichen Dank im Vorraus!
 

marce

Guru
reines Umbenennen wird da nicht reichen, Du wirst die Files schon konvertieren müssen.

So oder so - erster Ansatz wäre vermutlich
Code:
man find
 
OP
J

Journey77

Newbie
reines Umbenennen wird da nicht reichen, Du wirst die Files schon konvertieren müssen.

So oder so - erster Ansatz wäre vermutlich
Code:
man find
hallo marce,
erst mal danke für Dein Posting. Nein, es reicht die Dateien umzubenennen, der TV spielt sie dann ohne weiteres ab. Bei Avi sagt er immer das Format unterstütze er nicht.
 
OP
J

Journey77

Newbie
ergänzend: Macht für mich ja auch keinen Sinn. Entweder kann eine Software/Firmware avi abspielen oder nicht.
Aber das muss an der Firmware liegen, dass die Software des TV eben keine Dateien abspielt die mit avi enden.
Und wenn ich von einer bei OnlineTVRecorder heruntergeladenen avi-Datei die Eigenschaften anzeigen lasse, wird dan in jedem Fall immer ausgegeben 'Container: Audio Video Interleave (AVI)', gleich was für eine Endung ich ihr gebe.
 

susejunky

Moderator
Teammitglied
Hallo @Journey77 ,

ob das Änder der Dateiendung von .avi auf .mpg Dein Problem löst, ist fraglich.

Und wenn ich von einer bei OnlineTVRecorder heruntergeladenen avi-Datei die Eigenschaften anzeigen lasse, wird dan in jedem Fall immer ausgegeben 'Container: Audio Video Interleave (AVI)', gleich was für eine Endung ich ihr gebe.

Typische Inhalte von Mediendateien sind z.B. Video, Audio, Untertitel, usw. deren Inhalte mit Codecs codiert und anschließend zusammen in einer Container-Datei abgespeichert werden. Die Dateiendung (z.B. .avi) zeigt dabei nur das Containerformat der Datei an.

Damit ein Gerät (z.B. TV) eine Mediendatei abspielen kann, muss es sowohl mit dem Containerformat (z.B. avi, mp4, mkv, webm, ...) als auch mit den darin verwendeten Codecs (z.B. für Video V90, h264, h265, mp4, usw.; für Audio opus, flac, mp3, aac, usw.) umgehen können.

Als aller Erstes gilt es daher festzustellen welche Containerformate Dein TV lesen und welche Codecs es abspielen kann. Dabei ist zu beachten, dass manche Codecs (z.B. h264) mehrere Varianten haben und dass nicht jedes Gerät alle Varianten eines Codecs unterstützt (z.B. mein TV unterstützt h264 lediglich bis h.264/AVC Level 4.2).

Dann gilt es herauszufinden (z.B. mit ffmpeg), welches Containerformat und welche Codes die abzuspielenden Dateien verwenden (die Dateiendung ist dabei nicht zwingend ein zuverlässiger Indikator für das Containerformat).

Mit Hilfe von ffmpeg kannst Du dann Video- und Audio-Daten umcodieren und/oder in verschiedenen Containerformaten speichern. Dabei ist zu beachten, dass nicht alle Containerformate für alle Codecs geeignet sind.

NACHTRAG
Wenn Deinem TV tatsächlich nur das Containerformat Probleme bereitet, dann kannst Du z.B. mit Hilfe einer SHELL-Prozedur und
Code:
ffmpeg -i DATEI.avi DATEI.mpg
alle Deine Dateien in .mpg-Dateien umwandeln.
NACHTRAG ENDE

Viele Grüße

susejunky
 
Zuletzt bearbeitet:

abgdf

Guru
Probier' das erstmal mit einer Datei aus: Also:
- Abspielen mit Endung ".avi" geht nicht.
- Umbenennen nach ".mpg".
- Abspielen mit Endung ".mpg" geht.

Wenn das funktioniert, probier' dieses Perl-Skript. Es findet alle ".avi" unterhalb des aktuellen Verzeichnisses, also jeweils unterhalb des Verzeichnisses, in dem das Perl-Skript ist:
Code:
#!/usr/bin/perl

use warnings;
use strict;

use File::Find;
use Cwd;

sub wanted {
    my $source = $File::Find::name;
    my $dest;
    my $e;
    if ($source =~ /\.avi$/) {
        $dest = $source;
        $dest =~ s/\.avi$/\.mpg/;
        $e = "mv $source $dest";
        print "$e\n";
    }
}

find(\&wanted, getcwd());
Geht das? Das heißt: Werden die Befehle auf der Konsole ausgegeben?
Das Umbenennen ist noch nicht scharfgestellt.
 

josef-wien

Ultimate Guru
Wenn das Gerät AVI-Container versteht und sich nur an der Dateiendung stört, ist eine Umwandlung nicht notwendig.

Nicht ganz sauber, da es Fehlermeldungen gibt, wenn ein Verzeichnis keine Datei *.avi enthält, aber für den Zweck ausreichend:
Code:
find -type d | while read name ; do ls -1 "$name" ; for i in "$name"/*.avi; do mv -v "$i" "${i%avi}mpg" | tee -a log.txt ; done ; done
 
Zuletzt bearbeitet:

wolfi_z

Hacker
Wenn wirklich ein reines Umbenennen hilft, dann installier Dir krename
Code:
zypper install krename
Alles markieren, dann 'find and replace' .avi -> .mpg
Ich hab es noch nicht ausprobiert mit Unterverzeichnissen usw., ich aendere hautpsaechlich immer die Dateinamen aus der Kamera auf Kleinbuchstaben.
Das geht ganz einfach 'convert to lowercase'

LG ... Wolfi :cool:
 

abgdf

Guru
Ja, ja, krename, komplexer "find"-Befehl, "mmv" - gibt's alles.
Ich bevorzuge trotzdem ein kurzes Perl-Skript mit "File::Find", weil man darin die volle Kontrolle hat, und auch Dinge machen kann, die "krename" nicht kann.
 
Oben