#!/bin/bash # Script Name: erde-stream-recorder.sh # Beschreibung: Zeichnet den Euer.TV Stream lokal auf und speichert diesen als *.mp4-File ab. # Aufruf: ./bash erde-stream-recorder.sh # Autor: Patrick Asmus # Web: https://www.media-techport.de # Git-Reposit.: https://git.media-techport.de/scriptos/private-script-collection.git # Version: 1.2.3 # Datum: 10.10.2023 # Modifikation: Texte angepasst ##################################################### # Signal-Handler für das INT-Signal (Interrupt) function handle_interrupt() { echo "Aufzeichnung abgebrochen." echo "Möchten Sie die zuletzt erstellte Datei löschen? (Y/n)" read -n 1 -r response if [[ "$response" =~ ^[Yy]$ ]]; then rm -f "$output_file" echo "Datei gelöscht: $output_file" fi exit 0 } # Überprüfung, ob ffmpeg installiert ist if ! command -v ffmpeg &> /dev/null; then echo "ffmpeg ist nicht installiert. Das Skript wird ffmpeg installieren." sudo apt update sudo apt install -y ffmpeg if [ $? -ne 0 ]; then echo "Fehler beim Installieren von ffmpeg. Beenden." exit 1 fi fi # Downloadpfad download_path="/home/downloads/erde-streams" mkdir -p $download_path # Stream-Informationen Variablen stream1_name="Euer.TV-Stream_Main" stream1_url="rtmp://rtmp21.euer.tv/live/1080p" stream2_name="Euer.TV-Stream_Donnerwolke" stream2_url="rtmp://hls21.euer.tv/source/donnerwolke" stream3_name="Euer.TV-Stream_SchiWaGoA" stream3_url="rtmp://hls21.euer.tv/source/schiwagoa" # Funktion zur Aufzeichnung eines Streams function record_stream() { stream_name="$1" stream_url="$2" while true; do timestamp=$(date +'%Y%m%d%H%M%S') output_file="$download_path/$stream_name-$timestamp.mp4" echo "Starte Aufzeichnung von $stream_name..." while true; do ffmpeg -i "$stream_url" -c copy "$output_file" ret_code=$? if [ $ret_code -eq 0 ]; then echo "Die Aufzeichnung von $stream_name wurde abgeschlossen und als $output_file gespeichert." break else echo "Fehler bei der Aufzeichnung von $stream_name (Fehlercode: $ret_code)." echo "Warte 3 Sekunden, um erneut zu versuchen..." sleep 3 fi done echo "Drücken Sie 'Q', um die Aufzeichnung zu beenden, oder 'Enter', um fortzufahren..." read -n 1 -s -r key if [ "$key" = "Q" ] || [ "$key" = "q" ]; then echo "Aufzeichnung beendet." exit 0 fi done } # Stream-Abbruch beim INT-Signal (Interrupt) behandeln trap handle_interrupt INT # Menü für Stream-Auswahl while true; do echo "Bitte wählen Sie einen Stream aus:" echo "1. $stream1_name" echo "2. $stream2_name" echo "3. $stream3_name" echo "4. Eigenen Stream eingeben" echo "5. Beenden" read -p "Ihre Auswahl: " choice case "$choice" in 1) record_stream "$stream1_name" "$stream1_url" ;; 2) record_stream "$stream2_name" "$stream2_url" ;; 3) record_stream "$stream3_name" "$stream3_url" ;; 4) read -p "Geben Sie die URL des Streams ein: " custom_url read -p "Geben Sie einen Namen für den Stream ein: " custom_name record_stream "$custom_name" "$custom_url" ;; 5) echo "Aufzeichnung beendet." exit 0 ;; *) echo "Ungültige Auswahl. Bitte erneut versuchen." ;; esac done