AVIDemux Script/Batch auf Unterverzeichnisse anwenden und weiteres...

Metalveteran

Lt. Junior Grade
Registriert
Okt. 2020
Beiträge
345
Hallo.

Ich habe folgende Batch-Datei:

Code:
set avidemux="C:\Program Files\Avidemux 2.8 VC++ 64bits\avidemux_cli.exe"


for %%f in (*.mkv *.mp4) do (
    %avidemux% --load "%%f" --run 720p.py --save "repack\%%~nf.mkv" --quit

    move %%f complete
)

Wie passe ich das Script an, dass...

a.) auch Dateien in Unterordnern verarbeitet werden und in "repack" dann auch der passende Unterordner angelegt wird? Also die Verzeichnisstruktur übernommen wird? Z.B. hab ich den Ordner "Asia Movies", da drin ist ein Ordner "Jackie Chan". Das soll dann in den Ordner "Repack" so übernommen werden. (So dass ich die Batch einfach auf einen übergeordneten Ordner anwenden kann und nicht groß rumkopieren muss)

b.) ich je nach Filmlänge unterschiedliche Scripts nutze? Alles unter 25min "script1", bis 80min "script2" usw?!


Ist das überhaupt möglich? :confused_alt: :confused_alt: :confused_alt: :confused_alt:
 
Ich habe das mal als Bashscript angefangen. mit ffmpeg angefangen
Bash:
#!/bin/bash

mkdir -p converted

if [ "$#" -ne 2 ]; then
    echo "Usage: $0 <h264|h265> <720|1080|2160>"
    echo "The first argument specifies the codec to be used. It can be either 'h264' or 'h265'."
    echo "The second argument specifies the target resolution. It can be '720' (HD), '1080' (FullHD), or '2160' (4K)."
    exit 1
fi

codec=$1
res=$2
res_name=""

if [ "$codec" != "h264" ] && [ "$codec" != "h265" ]
then
    echo "Invalid codec. Please specify either 'h264' or 'h265'."
    exit 1
fi

if [ "$res" == "720" ]; then
    res_name="HD"
elif [ "$res" == "1080" ]; then
    res_name="FullHD"
elif [ "$res" == "2160" ]; then
    res_name="4K"
else
    echo "Invalid resolution. Please specify either '720', '1080', or '2160'."
    exit 1
fi

for i in *
do
    case "${i##*.}" in
        mp4|mkv|avi|flv|mov|wmv)
            target_file="converted/${i%.*}_${codec}_aac_${res_name}.mp4"

            if [ -e "$target_file" ]; then
                original_duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$i")
                target_duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$target_file")

                if (( $(echo "$original_duration == $target_duration" | bc -l) )); then
                    echo "File $target_file already converted, skipping."
                    continue
                fi
            fi

            if [ "$codec" == "h264" ]
            then
        ffmpeg -y -i "$i" -vf "scale=-2:$res" -c:v libx264 -crf 23 -c:a aac -b:a 192k -ac 2 -movflags +faststart "$target_file"

            else
                ffmpeg -y -i "$i" -vf "scale=-2:$res" -c:v libx265 -crf 28 -c:a aac -b:a 192k -ac 2 -movflags +faststart "$target_file"
            fi
            ;;
    esac
done

verifiziert auch, ob umgewandelte Dateien komplett sind, irgendwo habe ich auch eine fassung, die durch Unterordner geht. Wenn dir die Richtung passt, suche ich mal am Wochenende
 
@madmax2010 Nutze leider Windows :) Bin jetzt kein BAT/sh-Crack, um sowas feucht-fröhlich umtexten zu können :) Da müsste ich wohl mit powershell hantieren, um wenigstens etwas die Fähigkeiten von bash zu bekommen..... und damit kenn ich mich noch weniger aus :(
 
Zurück
Oben