From e7d708fc295c249a401b9c84fc01ecf7d903506e Mon Sep 17 00:00:00 2001 From: Ratatoskr Date: Tue, 13 Feb 2024 16:47:21 +0100 Subject: [PATCH] Initial commit: Added split2components.sh script --- split2components.sh | 77 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 split2components.sh diff --git a/split2components.sh b/split2components.sh new file mode 100644 index 0000000..b11691a --- /dev/null +++ b/split2components.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +# Überprüfe, ob ffmpeg und pv installiert sind +if ! command -v ffmpeg &> /dev/null || ! command -v pv &> /dev/null +then + echo "ffmpeg oder pv ist nicht installiert. Bitte installiere sie zuerst." + exit +fi + +# Überprüfe, ob ein Zielpfad angegeben wurde +if [ "$#" -eq 0 ] +then + echo "Bitte gib den Zielpfad an, in dem die Dateien verarbeitet werden sollen." + exit +fi + +target_path="$1" + +# Überprüfe, ob der Zielpfad vorhanden ist +if [ ! -d "$target_path" ] +then + echo "Der angegebene Zielpfad existiert nicht." + exit +fi + +# Erstelle die benötigten Verzeichnisse +mkdir -p "$target_path/mkv" "$target_path/flac" "$target_path/srt" + +# Erstelle ein temporäres Verzeichnis für Untertiteldateien +temp_dir="temp_subs" +mkdir -p "$temp_dir" || { echo "Fehler beim Erstellen von $temp_dir"; exit 1; } + +# Schleife durch alle unterstützten Video-Dateiformate im angegebenen Verzeichnis +find "$target_path" -type f \( -iname \*.mp4 -o -iname \*.mkv -o -iname \*.avi -o -iname \*.flv -o -iname \*.mov \) -print0 | while IFS= read -r -d '' video_file + +do + # Prüfe, ob es eine passende Videodatei gibt + if [ -e "$video_file" ] + then + # Extrahiere den Dateinamen ohne Erweiterung + filename_no_ext=$(basename -- "$video_file" | cut -f 1 -d '.') + new_video_file="$target_path/mkv/$filename_no_ext.mkv" + srt_subtitle_file="$target_path/srt/$filename_no_ext.srt" + + # Konvertiere Video in MKV-Format + ffmpeg -fflags +genpts -i "$video_file" -c:v copy -pix_fmt yuv420p -an -sn -fflags +genpts -avoid_negative_ts make_zero "$new_video_file" -y < /dev/null + + + # Extrahiere Untertitel ins SRT-Format (falls vorhanden) + subtitle_file="$temp_dir/$filename_no_ext.srt" + ffmpeg -i "$video_file" -map 0:s:0 "$subtitle_file" + + # Konvertiere Untertitel ins SRT-Format, wenn vorhanden + if [ -e "$subtitle_file" ] + then + mv "$subtitle_file" "$srt_subtitle_file" + fi + + # Schleife durch alle Audio-Streams und konvertiere sie in separate FLAC-Dateien + audio_stream_index=0 + while true + do + flac_audio_file="$target_path/flac/${filename_no_ext}_audio$audio_stream_index.flac" + if ! ffmpeg -i "$video_file" -map 0:a:"$audio_stream_index" -c:a flac -y "$flac_audio_file" < /dev/null + then + break + fi + echo "Audio-Stream $audio_stream_index konvertiert." + ((audio_stream_index++)) + done + + echo "Verarbeitung von $filename_no_ext abgeschlossen." + fi +done + +# Lösche temporäres Verzeichnis +rm -r "$temp_dir"