Advertisement
EurenikZ

Batch Video Cutter & Encoder

Jun 8th, 2025 (edited)
1,134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.28 KB | None | 0 0
  1. :: Dieses Skript verarbeitet alle .mp4-Dateien im aktuellen Verzeichnis, entfernt die angegebenen Sekunden vom Anfang und Ende und komprimiert sie optional per FFmpeg mit einem wählbaren CRF-Wert. Nur Videos mit ausreichender Länge (Videolänge + 3 > Schnittbereich) werden bearbeitet. Der ursprüngliche Zeitstempel der Datei bleibt erhalten, und die Ausgabedateien erhalten angepasste Namen (_cut.mp4 oder _crfXX.mp4).
  2. :: "ffmpeg-release-essentials.zip" hier herunterladen, entpacken und aus dem Ordner "bin" die ffmpeg.exe und ffprobe.exe in das Verzeichnis kopieren: https://www.gyan.dev/ffmpeg/builds/
  3. :: Version 1.1 - 09.06.2025
  4.  
  5. @echo off
  6. setlocal enabledelayedexpansion
  7.  
  8. :: Benutzerabfrage: Start-Sekunden schneiden
  9. set /p CUT_START=Wie viele Sekunden vom ANFANG sollen entfernt werden?
  10. if "%CUT_START%"=="" set CUT_START=0
  11.  
  12. :: Benutzerabfrage: End-Sekunden schneiden
  13. set /p CUT_END=Wie viele Sekunden vom ENDE sollen entfernt werden?
  14. if "%CUT_END%"=="" set CUT_END=0
  15.  
  16. :: Benutzerabfrage: CRF-Wert
  17. echo CRF-Wert (18=hoch, 23=normal, 28=niedrig) - Leer lassen = nur schneiden (kein Re-Encoding)
  18. set /p CRF_WERT=Welcher CRF-Wert soll verwendet werden?
  19.  
  20. :: Benutzerabfrage: Audio entfernen
  21. set /p REMOVE_AUDIO=Ton entfernen? (y/n):
  22. if /i "%REMOVE_AUDIO%"=="y" (
  23.     set "AUDIO_PARAM=-an"
  24.     set "AUDIO_SUFFIX=_mute"
  25. ) else (
  26.     set "AUDIO_PARAM=-c:a aac -b:a 160k"
  27.     set "AUDIO_SUFFIX="
  28. )
  29.  
  30. :: Zahlenprüfung
  31. for /f "delims=0123456789" %%A in ("%CUT_START%") do (
  32.     echo Ungueltige Eingabe bei Startzeit & pause & exit /b
  33. )
  34. for /f "delims=0123456789" %%A in ("%CUT_END%") do (
  35.     echo Ungueltige Eingabe bei Endzeit & pause & exit /b
  36. )
  37. if not "%CRF_WERT%"=="" (
  38.     for /f "delims=0123456789" %%A in ("%CRF_WERT%") do (
  39.         echo Ungueltige Eingabe bei CRF-Wert & pause & exit /b
  40.     )
  41. )
  42.  
  43. :: Schleife über MP4s
  44. for %%F in (*.mp4) do (
  45.     echo Bearbeite: %%F
  46.  
  47.     for /f "usebackq delims=" %%T in (`powershell -NoLogo -NoProfile -Command "(Get-Item '%%F').LastWriteTimeUtc.ToString('yyyy-MM-ddTHH:mm:ss')"`) do (
  48.         set "TIMESTAMP=%%T"
  49.     )
  50.  
  51.     for /f "usebackq delims=" %%D in (`ffprobe -v error -select_streams v:0 -show_entries format^=duration -of default^=nokey^=1:noprint_wrappers^=1 "%%F"`) do (
  52.         set "DURATION=%%D"
  53.     )
  54.  
  55.     for /f "tokens=1 delims=." %%T in ("!DURATION!") do set /a INTDURATION=%%T
  56.  
  57.     set /a CUTS_TOTAL=!CUT_START!+!CUT_END!
  58.     set /a VIDEO_PLUS_3=!INTDURATION!+3
  59.  
  60.     if !VIDEO_PLUS_3! GTR !CUTS_TOTAL! (
  61.         set /a REMAINING=!INTDURATION!-!CUTS_TOTAL!
  62.         if !REMAINING! GEQ 1 (
  63.             if "%CRF_WERT%"=="" (
  64.                 set "OUTFILE=%%~nF_cut!AUDIO_SUFFIX!.mp4"
  65.                 ffmpeg -y -i "%%F" -ss !CUT_START! -t !REMAINING! -c copy !AUDIO_PARAM! "!OUTFILE!"
  66.             ) else (
  67.                 set "OUTFILE=%%~nF_crf!CRF_WERT!!AUDIO_SUFFIX!.mp4"
  68.                 ffmpeg -y -ss !CUT_START! -i "%%F" -t !REMAINING! -c:v libx265 -crf !CRF_WERT! -preset slow -movflags +faststart !AUDIO_PARAM! "!OUTFILE!"
  69.             )
  70.             powershell -NoLogo -NoProfile -Command "(Get-Item '!OUTFILE!').LastWriteTimeUtc = [datetime]::ParseExact('!TIMESTAMP!', 'yyyy-MM-ddTHH:mm:ss', $null)"
  71.             echo ? Fertig: !OUTFILE! - !REMAINING!s uebrig
  72.         ) else (
  73.             echo ? uebersprungen: %%F - nur !REMAINING!s wuerden uebrig bleiben
  74.         )
  75.     ) else (
  76.         echo ? uebersprungen: %%F - !VIDEO_PLUS_3! nicht > !CUTS_TOTAL!
  77.     )
  78. )
  79.  
  80. echo.
  81. echo Alle passenden Videos wurden verarbeitet.
  82. pause
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement