Videos Konvertieren

AndiHeitzer

Benutzer
Sehr erfahren
Mitglied seit
30. Jun 2015
Beiträge
3.341
Punkte für Reaktionen
633
Punkte
174
Danke nochmal für die Verbesserungen, wobei ich den Hintergrund für das Löschen nicht erkenne.
Kannst Du da bitte noch ein paar Worte dazu sagen?
Den "Papierkorb" nutze ich nicht.
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.569
Punkte für Reaktionen
1.397
Punkte
234
Was passiert, wenn der ffmpeg-Befehl nicht vollständig ausgeführt werden kann (z.B. Problem mit den Umlauten, Rechteproblem mit einer Datei, ect.)? Ungeachtet dessen würde als nächstes die weiteren Zeilen des Skriptes abgearbeitet, sprich, die Quelldatei unwiderruflich gelöscht. Dann hast du keinen neuen und keinen alten Film mehr ==> nicht gut.
Deshalb meine Empfehlung: Entweder prüfen, ob die Zieldatei erstellt wurde und erst dann löschen, oder wenigstens den Quellfilm in eine Art Papierkorb verschieben, um zur Not noch darauf Zugriff zu haben.
 

AndiHeitzer

Benutzer
Sehr erfahren
Mitglied seit
30. Jun 2015
Beiträge
3.341
Punkte für Reaktionen
633
Punkte
174
Natürlich hast Du recht! :)

Dann wollen wir mal die Erbsen zählen ;-)

Dann müsste auch geprüft werden, ob die Zieldatei auch in Ordnung ist. Was nutzt eine Zieldatei, die nicht "funktioniert"?

Von daher ... Backup, Backup und nochmal Backup :)

Meine DS wird jede Nacht voll gesichert => Sehr gut

Ich habe vor dieser Scriptaktion das Verzeichnis /volume1/MULTIMEDIA natürlich gesichert (Hyperbackup mit Versionierung) und das betreffende Backup gesperrt, damit das nicht automatisch gelöscht wird. So kann ich mir weiterhelfen für den Fall der Fälle.
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.569
Punkte für Reaktionen
1.397
Punkte
234
Hallo bions,

prinzipiell sollte es ja funktionieren. Ich hatte hier (#14) bereits einmal nach deinen verwendeten Codecs gefragt. Auch was für eine DS du hast, wäre interessant zu wissen.
Bis jetzt ist mir aber keine GUI auf dem DSM für ffmpeg bekannt, es gibt aber php-ffmpeg Projekte.
Du könntest auch eine alternative ffmpeg-Installation probieren. In meinem synOTR-Paket findest du Binarys für Intel und ARMv7 DSen.
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.569
Punkte für Reaktionen
1.397
Punkte
234
Du sprichst hier von Containern - die können (fast) alles enthalten. Codecs wären z.B. mpeg2 (DVD), mpeg4 (DivX), h264 …
Mit der DS716+II sollte man gut arbeiten können. Allerdings ist es mir noch nicht gelungen, die Hardwarecodierung (QuickSyncVideo - QSV) anzusprechen. Dafür müsste man ffmpeg mit dem passenden Treiber kompilieren. Die Videostation nutzt dafür nicht ffmpeg sondern den G-Streamer.

Hier gibt den Ansatz einer Web-Gui für ffmpeg (allerdings mit Upload vom Client): https://github.com/swooningfish/ffmpeg-web-gui
 

DaSteirer

Benutzer
Mitglied seit
06. Sep 2014
Beiträge
16
Punkte für Reaktionen
0
Punkte
1
Warum so kompliziert Konvertiert am Rechner und kopier´s auf die NAS und fertig.
 

Stu77e

Benutzer
Mitglied seit
22. Mrz 2021
Beiträge
4
Punkte für Reaktionen
1
Punkte
3
Zum rekursiven Abarbeiten:

Rich (BBCode):
for i in $(find "/volume1/MULTIMEDIA/Filme/" -maxdepth 1 -name "*.avi" -type f)
    do
        title=`basename "$i"`
        pfad=`dirname "$i"`

        /bin/ffmpeg -i "$i" -c mpeg4 -c:a copy "${pfad}/${title}.mp4"
    done

- mit -maxdepth gibst du die Ordnertiefe an
- die fertigen Filme werden parallel zu den Quellfilmen abgelegt

Danke für das Script. Das ist aber nicht rekursiv.

Wenn es rekursiv wäre, würde es z.B, so aussehen:

Das Skript wird mit einem Ordner als Parameter aufgerufen.
Im Skript loopt er einmal über alle Elemente des Ordners.
Ist das Element ein Video-File, wird es konvertiert
Ist das Element ein Ordner, ruft sich das Script mit diesem als Parameter selber auf.

Rekursives Programmieren macht den Code i.d.R. übersichtlicher/schlanker und ermöglicht eine dynamische Tiefe.

Nur so als Idee :)
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
14.058
Punkte für Reaktionen
3.872
Punkte
488

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.569
Punkte für Reaktionen
1.397
Punkte
234
Rekursives Programmieren macht den Code i.d.R. übersichtlicher/schlanker und ermöglicht eine dynamische Tiefe.
Wie @Benares schon schrieb, muss -maxdepth 1 noch weggelassen, bzw. angepasst werden.

Aber ganz ehrlich: mich würde deine Umsetzung mal interessieren.
Ich wüsste nicht, wie man es schlanker und gleichzeitig übersichtlicher darstellen könnte.
 

Stu77e

Benutzer
Mitglied seit
22. Mrz 2021
Beiträge
4
Punkte für Reaktionen
1
Punkte
3
Ich denke mein Kommentar war überflüssig und passt nicht hierher.

Also.. Das Skript macht was es soll und ist auch gut so wie es ist. :)

Es ist halt nicht rekursiv programmiert. "-maxdepth 1" wegzulassen ändert daran auch nichts. :p

Wie gesagt: "Rekursives Programmieren macht den Code i.d.R. übersichtlicher/schlanker und ermöglicht eine dynamische Tiefe.". In diesem Fall finde ich die vorhandene Lösung mit dem find (welches bereits ein rekursives Ergebnis liefert) aber eher besser.
 

AndiHeitzer

Benutzer
Sehr erfahren
Mitglied seit
30. Jun 2015
Beiträge
3.341
Punkte für Reaktionen
633
Punkte
174

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.569
Punkte für Reaktionen
1.397
Punkte
234
Doch, das schreibt er ja im letzten Satz.

Mich hätte dennoch mal ein Beispiel interessiert - man lernt ja immer gern dazu ??
 

AndiHeitzer

Benutzer
Sehr erfahren
Mitglied seit
30. Jun 2015
Beiträge
3.341
Punkte für Reaktionen
633
Punkte
174
Jamei, Männer und fertig lesen :rolleyes: ?
 
  • Haha
Reaktionen: geimist

mamema

Benutzer
Mitglied seit
23. Okt 2009
Beiträge
667
Punkte für Reaktionen
132
Punkte
63
nicht das ich Euch beim hobby coden stören will, aber warum nimmt ihr nicht Handbrake im Docker Container?
 

Stu77e

Benutzer
Mitglied seit
22. Mrz 2021
Beiträge
4
Punkte für Reaktionen
1
Punkte
3
Doch, das schreibt er ja im letzten Satz.

Mich hätte dennoch mal ein Beispiel interessiert - man lernt ja immer gern dazu ??

Das wäre ein Beispiel für Rekursiv.

Das Skript macht so nichts außer Ausgaben, es dient also nur der Veranschaulichung. Ich konnte es bei mir leider nicht richtig testen da alle meine Files Leerzeichen haben :-(

Bash:
#!/bin/sh

folderaction() {

path=$1
for folder in $(find $path -type d)
    do
        if [ ${folder:0:1} = "." ]; then
            break
            # ignore . and ..
        fi
        folderaction $folder
        # call function recursively
    done

for file in $(find $path -type f)
    do
        echo "Doing something with ffmpeg on $file"
        # start ffmpeg here
    done
}

folderaction $1
 
  • Like
Reaktionen: geimist

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
14.058
Punkte für Reaktionen
3.872
Punkte
488
Warum nachbauen was "find" schon automatisch macht?
Ich würde eher noch einen Check einbauen, ob die zug. .mp4-Datei bereits existiert bzw. auch neuer ist als die .avi-Datei, um unnötige Neukonvertierungen zu vermeiden. Neue Herausforderung für dich :ROFLMAO:
 

Stu77e

Benutzer
Mitglied seit
22. Mrz 2021
Beiträge
4
Punkte für Reaktionen
1
Punkte
3
Es ging nur um die Frage "Was bedeutet rekursiv eigentlich im Kontext von Programmen und Skripten?".

In diesem Fall wäre das tatsächlich absoluter Unsinn :giggle:
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat