prompter: Ich benutze Windows 10. Wie kann ich ein Batch-Script erstellen, was mit ImageMagick alle Bilder in einem Ordner zu JpegXL und einer Qualitaet von 93 encoded? Danach moechte ich einen VMAF score von allen Bildern erstellen und diese scores in eine Text-Datei namens "vmaf-scores.txt" speichern. Alle Bilder die einen Score unter 90% haben sollen noch einmal mit einer Qualitaet von 97 encoded werden und dessen VMAF scores sollen in einer Text-Datei namens "vmaf-scores-new.txt" gespeichert werden. Wenn bei einem Bild die Qualitaet immer noch unter 90% liegt, soll der Computer runtergefahren werden.

assistant: Sie können ein Batch-Skript mit dem folgenden Code erstellen:

@echo off

REM Set the path to ImageMagick and the VMAF tool
set IM_PATH=C:\ImageMagick
set VMAF_PATH=C:\vmaf

REM Set the input folder and output folder for images
set INPUT_FOLDER=C:\input
set OUTPUT_FOLDER=C:\output

REM Loop through all the images in the input folder
for /r %INPUT_FOLDER% %%f in (*.jpg) do (
  REM Encode the image to JpegXL with a quality of 93
  %IM_PATH%\convert.exe "%%f" -quality 93 "%OUTPUT_FOLDER%\%%~nf.jpegxl"

  REM Calculate the VMAF score for the image
  %VMAF_PATH%\vmafossexec.exe yuv420p 1920 1080 %OUTPUT_FOLDER%\%%~nf.jpegxl %OUTPUT_FOLDER%\%%~nf.jpegxl > "%OUTPUT_FOLDER%\vmaf-scores.txt"

  REM Read the VMAF score from the text file
  for /f "tokens=2 delims=:" %%g in ('findstr /c:"VMAF score" "%OUTPUT_FOLDER%\vmaf-scores.txt"') do set score=%%g

  REM Check if the VMAF score is below 90
  if %score% LSS 90 (
    REM Encode the image to JpegXL with a quality of 97
    %IM_PATH%\convert.exe "%%f" -quality 97 "%OUTPUT_FOLDER%\%%~nf.jpegxl"

    REM Calculate the VMAF score for the image again
    %VMAF_PATH%\vmafossexec.exe yuv420p 1920 1080 %OUTPUT_FOLDER%\%%~nf.jpegxl %OUTPUT_FOLDER%\%%~nf.jpegxl > "%OUTPUT_FOLDER%\vmaf-scores-new.txt"

    REM Read the VMAF score from the text file again
    for /f "tokens=2 delims=:" %%g in ('findstr /c:"VMAF score" "%OUTPUT_FOLDER%\vmaf-scores-new.txt"') do set new_score=%%g

    REM Check if the VMAF score is still below 90
    if %new_score% LSS 90 (
      REM Shut down the computer
      shutdown /s /t 0
    )
  )
)

Bitte beachten Sie, dass Sie die Pfade zu ImageMagick und VMAF entsprechend Ihrer Installation anpassen müssen. Außerdem müssen Sie die Größe des Bildes und die gewünschte Ausgabequalität angeben.

assistant: Um ein Batch-Skript mit ImageMagick zu erstellen, das alle Bilder in einem Ordner in JpegXL mit einer Qualität von 93 encodiert und einen VMAF-Score von allen Bildern erstellt, können Sie Folgendes verwenden:

@echo off
for %%a in (*.jpg) do (
    magick convert "%%~a" -sampling-factor 4:2:0 -quality 93 "%%~na-93.jxl"
    vmafossexec yuv420p 1920 1080 "%%~na-93.jxl" --log "vmaf-scores.txt"
    IF %ERRORLEVEL% LEQ 90 (
        magick convert "%%~a" -sampling-factor 4:2:0 -quality 97 "%%~na-97.jxl"
        vmafossexec yuv420p 1920 1080 "%%~na-97.jxl" --log "vmaf-scores-new.txt"
        IF %ERRORLEVEL% LEQ 90 (
            shutdown -s
        )
    )
)

Das Skript wird alle Bilder in JpegXL mit einer Qualität von 93 encodieren und die VMAF-Scores in einer Text-Datei namens "vmaf-scores.txt" speichern. Alle Bilder, die einen Score unter 90% haben, werden noch einmal mit einer Qualität von 97 encodiert und dessen VMAF-Scores in einer Text-Datei namens "vmaf-scores-new.txt" gespeichert. Wenn bei einem Bild die Qualität immer noch unter 90% liegt, wird der Computer heruntergefahren.

assistant: @echo off

rem Überprüfen, ob ImageMagick installiert ist
if not exist "C:\Program Files\ImageMagick-7.0.10-Q16\convert.exe" (
  echo ImageMagick wurde nicht gefunden.
  echo Das Skript wird beendet.
  pause
  exit
)

rem Überprüfen, ob ffmpeg installiert ist
if not exist "C:\ffmpeg\bin\ffmpeg.exe" (
  echo ffmpeg wurde nicht gefunden.
  echo Das Skript wird beendet.
  pause
  exit
)

rem Überprüfen, ob vmaf installiert ist
if not exist "C:\vmaf\run_vmaf.bat" (
  echo vmaf wurde nicht gefunden.
  echo Das Skript wird beendet.
  pause
  exit
)

rem Alle Bilder im aktuellen Ordner zu JpegXL mit einer Qualität von 93 kodieren
for /f %%i in ('dir /b *.jpg') do (
  "C:\Program Files\ImageMagick-7.0.10-Q16\convert.exe" "%%i" -quality 93 "%%i.jpegxl"
)

rem VMAF-Scores für alle kodierten Bilder berechnen und in vmaf-scores.txt speichern
for /f %%i in ('dir /b *.jpegxl') do (
  "C:\vmaf\run_vmaf.bat" "%%i" >> vmaf-scores.txt
)

rem Überprüfen, ob alle Bilder einen VMAF-Score von mindestens 90% haben
for /f "tokens=1,2" %%i in (vmaf-scores.txt) do (
  if %%j LSS 90 (
    rem Bilder mit einem Score unter 90% noch einmal mit einer Qualität von 97 kodieren
    "C:\Program Files\ImageMagick-7.0.10-Q16\convert.exe" "%%i" -quality 97 "%%i.jpegxl"
    "C:\vmaf\run_vmaf.bat" "%%i.jpegxl" >> vmaf-scores-new.txt
  )
)

rem Überprüfen, ob alle Bilder immer noch einen VMAF-Score unter 90% haben
for /f "tokens=2" %%i in (vmaf-scores-new.txt) do (
  if %%i LSS 90 (
    echo Ein Bild hat immer noch einen VMAF-Score unter 90%.
    echo Der Computer wird runtergefahren.
    shutdown /s
  )
)

echo Alle Bilder haben einen VMAF-Score von mindestens 90%.
echo Das Skript wurde erfolgreich beendet.