# ========================================== # Einstellungen # ========================================== $FFmpegExe = "C:\PortableApps\LIVE\ffmpeg.exe" $TargetFolder = "D:\Downloads_ZDF" # ========================================== # Senderliste # ========================================== $Channels = @{ "1" = @{ Name = "DasErste" Url = "https://daserste-live.ard-mcdn.de/daserste/live/hls/de/master.m3u8" } "2" = @{ Name = "ZDF" Url = "http://zdf-hls-15.akamaized.net/hls/live/2016498/de/high/master.m3u8" } "3" = @{ Name = "ZDFneo" Url = "https://zdf-hls-16.akamaized.net/hls/live/2016499/de/high/master.m3u8" } "4" = @{ Name = "ZDFinfo" Url = "https://zdf-hls-17.akamaized.net/hls/live/2016500/de/high/master.m3u8" } "5" = @{ Name = "3sat" Url = "https://zdf-hls-18.akamaized.net/hls/live/2016501/dach/high/master.m3u8" } "6" = @{ Name = "ARTE" Url = "https://artesimulcast.akamaized.net/hls/live/2030993/artelive_de/master.m3u8" } "7" = @{ Name = "tagesschau24" Url = "https://tagesschau.akamaized.net/hls/live/2020117/tagesschau/tagesschau_3/master.m3u8" } "8" = @{ Name = "ONE" Url = "https://mcdn-one.ard.de/ardone/hls/master.m3u8" } "9" = @{ Name = "ARDalpha" Url = "https://mcdn.br.de/br/fs/ard_alpha/hls/de/master.m3u8" } } # ========================================== # Zielordner anlegen # ========================================== if (-not (Test-Path $TargetFolder)) { New-Item -ItemType Directory -Path $TargetFolder | Out-Null } # ========================================== # Sender auswählen # ========================================== Write-Host "" Write-Host "Verfuegbare Sender:" Write-Host "-------------------" foreach ($Key in ($Channels.Keys | Sort-Object)) { Write-Host "$Key = $($Channels[$Key].Name)" } Write-Host "" $Choice = Read-Host "Sender waehlen" if (-not $Channels.ContainsKey($Choice)) { Write-Host "" Write-Host "Fehler: Ungueltige Auswahl!" Pause exit } $SenderName = $Channels[$Choice].Name $Url = $Channels[$Choice].Url # ========================================== # Wie weit zurück? # ========================================== $BackTime = Read-Host "Wie weit zurueck? (hh:mm)" try { $tsBack = [TimeSpan]::Parse($BackTime) } catch { Write-Host "" Write-Host "Fehler: Ungueltiges Format!" Write-Host "Beispiel: 01:30 = 1 Stunde 30 Minuten" Pause exit } # ========================================== # Aufnahmedauer # ========================================== $Duration = Read-Host "Aufnahmedauer? (hh:mm)" try { $tsDuration = [TimeSpan]::Parse($Duration) } catch { Write-Host "" Write-Host "Fehler: Ungueltiges Format!" Write-Host "Beispiel: 00:45 = 45 Minuten" Pause exit } # ========================================== # Berechnungen # ========================================== $BackSeconds = [int]$tsBack.TotalSeconds $DurationSeconds = [int]$tsDuration.TotalSeconds # Maximal 3 Stunden Timeshift if ($BackSeconds -gt 10800) { Write-Host "" Write-Host "Fehler: Maximal 3 Stunden Ruecksprung moeglich!" Pause exit } # HLS-Segmente sind 2 Sekunden lang $SegmentsBack = [math]::Round($BackSeconds / 2) # ========================================== # Ausgabedatei erzeugen # ========================================== $Now = Get-Date $RecordingStart = $Now - $tsBack $RecordingEnd = $RecordingStart + $tsDuration $DatePart = $RecordingStart.ToString("yyyy-MM-dd") $StartPart = $RecordingStart.ToString("HH-mm-ss") $EndPart = $RecordingEnd.ToString("HH-mm-ss") $FileName = "${SenderName}_${DatePart}_${StartPart}_-_${EndPart}.mp4" $OutputFile = Join-Path $TargetFolder $FileName # ========================================== # Informationen anzeigen # ========================================== Write-Host "" Write-Host "=========================================" Write-Host "Download wird gestartet" Write-Host "=========================================" Write-Host "Sender : $SenderName" Write-Host "Zurueckspringen : $BackTime" Write-Host "Aufnahmedauer : $Duration" Write-Host "Segmente : $SegmentsBack" Write-Host "Ausgabedatei : $OutputFile" Write-Host "=========================================" Write-Host "" # ========================================== # FFmpeg starten # ========================================== & $FFmpegExe ` -live_start_index -$SegmentsBack ` -i $Url ` -t $DurationSeconds ` -c copy ` $OutputFile # ========================================== # Ende # ========================================== Write-Host "" Write-Host "Download abgeschlossen." Pause