Hallo zusammen,
vielleicht kann mir ja jemand weiter helfen. Vorweg, der Script ist nicht von mir und vom urspünglichen Autor gibt es keine Hilfe. Ich selbst habe leider aller höchstens minimal Wissen was die Syntax angeht.
Hier der Ursprüngliche code des Autors:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #! /bin/bash srcExt=$1 #Quell Dateityp z.B. mp4 destExt=$2 #Ziel Dateityp z.B. mkv srcDir=$3 #Quellverzeichniss destDir=$4 #Zielverzeichniss opts=$5 #Optionen für ffmpeg for filename in "$srcDir"/*.$srcExt; do basePath=${filename%.*} baseName=${basePath##*/} ffmpeg -i "$filename" $opts "$destDir"/"$baseName"."$destExt" done echo "Conversion from ${srcExt} to ${destExt} complete!" |
Mit diesem Komando (Beispiel) sollte der script eigentlich funktionieren:
1 | ffmpeg-batch.sh flac mp3 /path/to/files /path/to/dest '-ab 320k' |
Tut er aber nicht. Anstatt im angegeben Pfad nach den Dateien zu suchen, sucht es sie in dem Verzeichniss in dem es ausgeführt wird. Was daran liegen könnte das meine Verzeichniss- und Dateinamen mit Leerzeichen getrennt sind.
Ich habe auch ein wenig an dem Script "gebastelt" und es etwas an meine Bedürfnisse angepasst:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/bin/bash srcExt=$1 destExt=$2 srcDir=$3 destDir=$4 for filename in "$srcDir"/*.$srcExt; do basePath=${filename%.*} baseName=${basePath##*/} ffmpeg -hwaccel vaapi -hwaccel_output_format vaapi -hwaccel_device /dev/dri/renderD128 -i "$filename" -c:v hevc_vaapi -crf 28 -x265-params pass=2 -c:a aac -b:a 128k "$destDir"/"$baseName"."$destExt" done echo "Conversion from ${srcExt} to ${destExt} complete!" |
Fubktioniert natürlich auch nicht 😉 Kann es sein das die Werte hinter basePath und baseName vertauscht sind? Ich habs mal getauscht. Auch so funktioniert es nicht.
Ich weiss das es Scripte gibt die sehr gut funktionieren. So wie dieser hier:
1 2 3 4 5 | for i in *.*; do name=`echo "${i%.*}"`; echo "$name" ffmpeg -i "$i" "${name}.mkv" done |
Die ffmpeg Optionen müsste man natürlich anpassen 😉
Der Grund warum ich gerne den ersten Skript benutzen würde ist der, das man diesen Systemweit benutzen kann. Den letzten müsste man jedes mal neu anpassen und muss in dem Verzeichniss liegen in den man ihn ausführen will.
Vielleicht hat ja jemand eine Idee ... ich komme jedenfalls nicht weiter ohne mich erst Tage lang durch alle möglichen Tuts lesen zu müssen. Wäre nett wenn mir da jemand etwas helfen würde 😉
Gruß