Wie kann ich mit einem CMD- oder PowerShell-Skript mehrere Streaming-Audio-URLs erfassen/aufzeichnen/herunterladen?

Wie kann ich mit einem CMD- oder PowerShell-Skript mehrere Streaming-Audio-URLs erfassen/aufzeichnen/herunterladen?

Windows 10 64-Bit.

Wie kann ich mit einem CMD- oder PowerShell-Skript mehrere Streaming-Audio-URLs erfassen/aufzeichnen/herunterladen?

Ich nehme jede Nacht eine Stunde lang 15 MP3-Audiostreams von 15 Servern mit einem Befehlsbatch auf. Ich habe wget, ffmpeg, vlc und curl ausprobiert. Mein Skript liefert unzuverlässige Ergebnisse. Nur an einem von sieben Tagen werden alle 15 Streams eine Stunde lang aufgezeichnet. Curl ist am zuverlässigsten. Ich öffne für jeden Stream eine Instanz von curl.

start "" /min %windir%\curl.exe.lnk http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio1_mf_q -o "%temp%\bbc1.mp3" 

Ich habe heute Abend Powershell ausprobiert und es hat nicht funktioniert. Langsam schloss sich die Hälfte der 15 Powershell-Instanzen selbst und die andere Hälfte wurde eine Stunde lang nicht erfasst.

start "" /min "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.lnk" -Command "(new-object net.webclient).DownloadFile('http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio1_mf_q', '%temp%\bbc1.mp3')"

Ich dachte, das Erfassen von 15 Streams in einer Instanz von Powershell wäre vielleicht besser, aber der zweite Stream wird nie gestartet, weil der erste Stream nie endet.

$Urls = @()
$Urls += "http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio1_mf_q"  
$Urls += "http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio3_mf_q"

$OutPath = "$env:temp\"

ForEach ( $item in $Urls) {
$file = $OutPath +  ($item).split('/')[-1] + ".mp3"
(New-Object System.Net.WebClient).DownloadFile($item, $file)
}

Vier Stunden Bing und Google haben keine Antwort gebracht.

Wie kann ich Streaming-Audio über die Befehlszeile erfassen/aufzeichnen/herunterladen?

Ich bin nicht auf Powershell oder Curl angewiesen. Die einzigen Anforderungen sind, dass es unter Windows 10 64-Bit läuft, alle 15 Streams zuverlässig erfasst und ohne Benutzerinteraktion ausgeführt werden kann.

Antwort1

Windows 10 64-Bit. Erfordert keine Administratorrechte.

So erfassen / zeichnen / laden Sie mehrere Streaming-Audio-URLs mit einem cmd- oder PowerShell-Skript unter Verwendung von Streamripper v1.64.6 herunter.schlafen, PowerShell 5.1 (System.Net.WebClient DownloadFileAsync), curl v.7.55.1 und ffmpeg v.3.4. Audio-Streams werden auf viele Arten bereitgestellt, es ist keine gute Idee, sich beim Aufzeichnen auf eine Methode zu verlassen.

Ich habe viel Erfolg mit cmd,Streamripperv.1.64.6 und ffmpeg v.3.4.

Mit „Stop-Process“ werden ffmpeg und curl beendet, um den Download in eine Datei zu schreiben.

Sie können die Streams während des Downloads mit dem Windows Media Player anhören. Die Länge der Metadaten wird nicht immer korrekt angezeigt.

Mit ffmpeg können Sie viele Nachbearbeitungen durchführen, z. B. Metadaten schreiben und trimmen. Ändern Sie den Pfad zu ffmpeg und curl. Streamripper, System.Net.WebClient und curl überschreiben standardmäßig. Ich habe ffmpeg auf Überschreiben eingestellt.

Der Download dieser Skripte dauert 30 Sekunden.

Verwenden von cmd, Streamripper und ffmpeg: Wenn Streamripper die Verbindung verliert, benennt er die Originaldatei um und startet die Aufnahme erneut. Dieser Batch verknüpft die Dateien. Streamripper erfasst mindestens die Streams von iheart, tunein, streamguys, streamtheworld, radiojar, abacast und limelight. Schreiben Sie Ihre Befehle wie immer so, dass start "" streamripper.exe.lnkPausen vermieden werden.

Stream-URLs ändern sich. Ich habe eine Seite geschrieben, die beim Finden einer Stream-URL helfen kann.So finden Sie die URL eines iHeart-Streams.

# How to simultaneously, concurrently, in one instance of cmd capture / record / download multiple audio streams
# Windows 10 64-bit. cmd, sleep, streamripper v.1.64.6 and ffmpeg v.3.4. 
# https://superuser.com/posts/1510596/how-to-simultaneously-concurrently-in-one-instance-of-powershell-capture-multi 
# Streamripper overwrites by default. I set ffmpeg to overwrite.
START "" /min "streamripper.exe.lnk" https://ample.revma.ihrhls.com/zc1269 -A -a ALICE3 -d "%cd%" -l 30 -u "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11" --quiet
sleep 5
START "" /min "streamripper.exe.lnk" http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio1_mf_q -A -a BBC13 -d "%cd%" -l 30 -u "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11" --quiet
sleep 1
title DELAY WHILE  STREAMRIPPER COMPLETES IT'S TASKS. 
echo. 
echo    DELAY WHILE STREAMRIPPER COMPLETES IT'S TASKS. 
echo. 
:delaystreamripper
echo    %time%
SET errorlevel=
TASKLIST|FIND /I "streamripper.exe"> nul
IF not ERRORLEVEL 1 (
ping 8.8.8.8> nul
rem change next line. I use 180.
sleep 10 
GOTO :delaystreamripper
)
:concatenate 
dir *).*> NUL 2>&1
IF NOT ERRORLEVEL 1 (
SETLOCAL ENABLEDELAYEDEXPANSION
echo. 
echo    DEL *.CUE
del /q *.cue
echo. 
echo    dir /b *^).*
dir /b *^).* 
echo. 
sleep 1 
for /f %%g in ('dir "*).*" ^| find "File(s)"') do SET zcnt1=%%g
rem in different2 (1).aac    g="different2"    h=(1)    and    i=aac    w/o the quotes
for /f "tokens=1,2,3 delims=. " %%g in ('dir /b "*).*"') do (
copy /b /y "%%g (*).%%i" + "%%g.%%i" "%%g.%%i.tmp" 
del /q %%g*.%%i 
) 
for /f %%g in ('dir "*.tmp" ^| find "File(s)"') do SET zcnt2=%%g
for /f "tokens=1,2,3 delims=. " %%g in ('dir /b "*.tmp"') do (
ren %%g.%%h.%%i %%g.%%h 
)
echo. &echo    Concatenate !zcnt1! files with !zcnt2! files: 
SETLOCAL DISABLEDELAYEDEXPANSION    
)
:ffmpeg
sleep 1 
TITLE FFMPEG 
ECHO. 
ECHO    FFMPEG
start "" /min "%windir%\ffmpeg.exe.lnk" -y -i "%cd%\bbc13.mp3" -metadata title="BBC RADIO 1" -metadata artist="HITS. NEW MUSIC." -metadata album="bbc.co.uk/sounds" -metadata album_artist="HITS. NEW MUSIC." -ss 00:01:15 -c copy "%cd%\bbc1.mp3" 
sleep 1 
start "" /min "%windir%\ffmpeg.exe.lnk" -y -i "%cd%\alice3.aac" -acodec libmp3lame -metadata title="ALICE 95.5FM" -metadata artist="alice95.5FM.iheart.com" -metadata album_artist="alice95.5FM.iheart.com" "%cd%\alice.mp3"
rem

Verwenden von Powershell, curl und ffmpeg:

# How to simultaneously, concurrently, in one instance of powershell capture / record / download multiple audio streams? 
# Windows 10 64-bit. Powershell 5.1, curl v.7.55.1 and ffmpeg v.3.4
# https://superuser.com/posts/1510596/how-to-simultaneously-concurrently-in-one-instance-of-powershell-capture-multi 
# System.Net.WebClient and curl overwrite by default. I set ffmpeg to overwrite.
$host.ui.rawui.WindowTitle = $CurrentUser.Name +  "     " +  $(get-date) + "      " +$MyInvocation.MyCommand.Path
#echo. 
write-host "
Capture for 30 seconds. 
$(get-date)
"
write-host "   "$MyInvocation.MyCommand.Path 
$wc = New-Object System.Net.WebClient 
$url = "http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio1_mf_q" 
$output = "$env:userprofile\desktop\bbc1.mp3" 
$wc.DownloadFileAsync($url, $output) 
$wc = New-Object System.Net.WebClient 
$url = "http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio3_mf_q" 
$output = "$env:userprofile\desktop\bbc3.mp3" 
$wc.DownloadFileAsync($url, $output)
# overwrite 
& "$env:windir\ffmpeg.exe.lnk" -y -i "http://bbcwssc.ic.llnwd.net/stream/bbcwssc_mp1_ws-einws" -c copy "$env:userprofile\desktop\bbc4.mp3"  
& "$env:windir\curl.exe.lnk" http://bbcmedia.ic.llnwd.net/stream/bbcmedia_6music_mf_p -o "$env:userprofile\desktop\bbc62.mp3" 
# set capture time for 30 seconds
start-sleep 30 
# set capture time for 2 minutes
# start-sleep (60*2)
# set capture time for 3 hours
# start-sleep (3600*3)
stop-process -force -name curl 
stop-process -force -name ffmpeg 
# set tags and trim.
Write-Host "
Trim first 15 seconds of bbc62.mp3 is next. Listen to it then press any key to continue. Trimmed file is saved as bbc6.mp3"
cmd /c pause | out-null
& "$env:windir\ffmpeg.exe" -y -i "$env:userprofile\desktop\bbc62.mp3" -metadata title="BBC RADIO 1" -metadata artist="HITS. NEW MUSIC." -metadata album="bbc.co.uk/sounds" -metadata album_artist="HITS. NEW MUSIC." -ss 00:00:15 -c copy "$env:userprofile\desktop\bbc6.mp3" 
remove-item "$env:userprofile\desktop\bbc62.mp3"
exit
#

Google-Suche - Verwenden Sie curl, um Audio-Streams herunterzuladen

Google-Suche - Verwenden Sie ffmpeg, um Audio-Streams herunterzuladen

Google-Suche - Verwenden Sie ffmpeg zum Schreiben von Metadaten

Alternativen zu System.Net.WebClient: Kann Powershell Befehle bei Stackoverflow parallel ausführen?

So erfassen Sie Streaming-Audio. So speichern Sie Streaming-Audio. So geben Sie Streaming-Audio aus. So zeichnen Sie Streaming-Audio auf.

Antwort2

Windows 10 64-Bit, PowerShell 5-Skript zum Rippen/Erfassen/Aufzeichnen/Speichern/Herunterladen von Streaming-Audio auf Flash-Laufwerk als MP3 mit Streamripper, Wget, Curl, Ffmpeg. Das Betriebssystem löscht verdächtige Dateien, sperrt den Desktop, wenn X Sekunden lang keine Maus- oder Tastaturaktivität erfolgt, untersagt die Verwendung von Skripten, der Benutzer ist auf Standard-/Benutzerrechte beschränkt und meldet Sie nach einer Stunde ab. Die ersten 3 Minuten werden gekürzt.

Beendet zwangsweise und ohne Rückfrage alle Instanzen von ffmpeg, wget, curl und streamripper.

Standardmäßig werden vier Streams alle 10 Sekunden erfasst. Siehe $zseconds.

Versuchen Sie ffmpeg, wget oder curl, wenn Streamripper bei Ihrem Stream nicht erfolgreich ist.

<# BEGIN COMMENTS

**This script is written to run at a Window 10 64-bit PC that no one is sitting at. 
Automated keyboard and mouse events to keep PC awake / unlocked. 
See  KEEP PC AWAKE / UNLOCKED**

Windows 10 64-bit, PowerShell 5 script to Rip / Capture / Record / Save / Download 
streaming audio to flash drive as .mp3 with streamripper, wget, curl, ffmpeg, OS 
deletes suspicious files, locks the desktop if there is no mouse or keyboard activity 
for X seconds, prohibits the use of scripts, user is limited to standard / user rights 
and logs you off in one hour. Cut first 3 minutes.

**Forcefully kills every instance of ffmpeg, wget, curl, and streamripper w/o asking.**

**The default is 10 second capture of four streams. See $zseconds**

Try ffmpeg, wget or curl if streamripper does not succeed with your stream.

~2GB of free space on flash drive. Streams are saved to $env:userprofile\
downloads\$ztimestamp and written to flash drive that has 
flashDrive:\DoNotDeleteFlash4291phIr_Wn.txt to directory flashDrive:\downloads\radio 
by ffmpeg. The time to write to flash drive depends on the quality of the system and 
flash drive.

Dependencies:

flashDrive:\DoNotDeleteFlash4291phIr_Wn.txt. Used to find flash drive.
flashDrive:\downloads with 4.txt, 4.txt(FlashDriveLetter).lnk, curl, wget, ffmpeg,
xxmklink, and streamripper. Create shortcuts on the command line with xxmklink.exe 
http://www.xxcopy.com/download/xxmklink.zip.
Copy streamripper files to flashDrive:\downloads\streamripper

If scripts prohibited:
Create shortcut with name: 

4.txt(FlashDriveLetter) i.e. 4.txt(K)     Script creates shortcuts for 23 drive letter.

Target: 

powershell.exe $z=Get-Date -f 'ddhhmmss'; copy 4.txt 4.txt.$z.txt; gc 4.txt|powershell

Run shortcut.

Kill with CMD:

taskkill /f /im ffmpeg.exe& taskkill /f /im wget.exe& taskkill /f /im curl.exe& taskkill /f /im streamripper.exe

Kill with PowerShell:

taskkill /f /im ffmpeg.exe; taskkill /f /im wget.exe; taskkill /f /im curl.exe; taskkill /f /im streamripper.exe

END COMMENTS #>






$zseconds=3060 ; # Rip / Capture / Record / Save / Download     51 minutes all streams.
$zseconds=240 ; # 4 minutes all streams.
$zseconds=10 ; $zdebug=0 ; # 10 seconds 4 streams.

# BEGIN Store script block in variable
$zblock= {
# If not online exit
ping -n 1 8.8.8.8|out-null; 
# if not errorlevel 1 
# if false 
IF (-not $?){Write-Output "
ddhhmmss is $ztimestamp1  Unable to get online.  Terminating script."|out-file $zdrive\downloads\documents\4txtDailyLog.txt -append;
Write-Output "
ddhhmmss is $ztimestamp1  Unable to get online.  Terminating script and exiting in 5 seconds.
";
Start-Sleep 5 ;
exit;
}

# BEGIN Rip / Capture / Record / Save / Download streaming audio

if($zdebug -eq '0'){
# if in debug mode do the following
Write-output "
The time is $((get-date $ztimestamp0 -f 'hh:mm:sstt') -replace ' ','')`n
Recording for $($zseconds/60) minutes     Recording stop $((get-date $ztimestamp0.AddSeconds($zseconds) -f 'hh:mm:sstt') -replace ' ','')      Processing stop ~$((get-date $ztimestamp0.AddSeconds($zseconds+(gc $zdrive\downloads\documents\4txtFFmpegLastTimeTook.txt)) -f hh:mm:sstt) -replace ' ','';)`n 
This is $zdrive\downloads\4.txt`n
Loading ffmpeg, wget, curl and streamripper.`n
The current directory is $pwd";
& $zdrive\downloads\ffmpeg.exe.lnk -y -i "http://listen.xray.fm/stream" -metadata title='KXRY 107.1FM PORTLAND,OR' -metadata artist='xray.fm' -metadata album='PORTLAND, OR' -metadata album_artist='xray.fm' -c copy "$zdrive\downloads\radio\xray2.mp3" ;
start-sleep 1 ;
& $zdrive\downloads\wget.exe.lnk http://listen.xray.fm/stream -O "$env:userprofile\downloads\$ztimestamp1\XRAY3.mp3" ;
start-sleep 1 ;
& $zdrive\downloads\curl.exe.lnk http://stream.live.vc.bbcmedia.co.uk/bbc_6music -o "$env:userprofile\downloads\$ztimestamp1\BBC63.mp3" ;
start-sleep 1 ;
& $zdrive\downloads\streamripper\streamripper.exe.lnk http://ample.revma.ihrhls.com/zc1269 -A -a ALICE3 -d $env:userprofile\downloads\$ztimestamp1\ -l $zseconds -u "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0" ;

} else {


# YOUR STREAMS HERE 


# Capture and process with ffmpeg
$zcut='00:03:00' ;
& $zdrive\downloads\ffmpeg.exe.lnk -y -i "http://listen.xray.fm/stream" -af volume='2.367188' -metadata title='KXRY 107.1FM PORTLAND,OR' -metadata artist='xray.fm' -metadata album='PORTLAND, OR' -metadata album_artist='xray.fm' -ss $zcut "$zdrive\downloads\radio\xray2.mp3" ;
start-sleep 1 ;
& $zdrive\downloads\wget.exe.lnk http://listen.xray.fm/stream -O "$env:userprofile\downloads\$ztimestamp1\XRAY3.mp3" ;
start-sleep 1 ;
& $zdrive\downloads\streamripper\streamripper.exe.lnk http://ample.revma.ihrhls.com/zc1269 -A -a ALICE3 -d $env:userprofile\downloads\$ztimestamp1\ -l $zseconds -u "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0" ;
start-sleep 1 ;
& $zdrive\downloads\curl.exe.lnk http://stream.live.vc.bbcmedia.co.uk/bbc_6music -o "$env:userprofile\downloads\$ztimestamp1\BBC63.mp3" ;
start-sleep 1 ;
}
#    END Rip / Capture / Record / Save / Download streaming audio

# BEGIN Wait for sleep $zseconds and streamripper to finish
start-sleep $zseconds ;
$ProcessList = @("streamripper") ; Do {$ProcessesFound = Get-Process | ? {$ProcessList -contains $_.Name} | Select-Object -ExpandProperty Name ; IF ($ProcessesFound) {Start-Sleep 1}}Until (!$ProcessesFound)
stop-process -name wget -ErrorAction SilentlyContinue ;
stop-process -name curl -ErrorAction SilentlyContinue ;
stop-process -name ffmpeg -ErrorAction SilentlyContinue ;
start-sleep 1 ;
#   END  Wait for sleep $zseconds and streamripper to finish

# BEGIN CONCATENATE. If multiple files of one stream with ( in file name, concatenate them. 
$Files = @(gci "$env:userprofile\downloads\$ztimestamp1\*`(*") ;
IF (!($Files.length -eq 0)) {
Write-Output "Files concatenated..." ;
Write-Output "Files concatenated."|out-file $zdrive\downloads\documents\4txtDailyLog.txt -append ;
gci "$env:userprofile\downloads\$ztimestamp1\*`(*" | foreach-object {
$z="$_" -replace ' \(.\)','' ;
cmd /c copy /b $z + $_ "$z.tmp" ;
remove-item $z ;
rename-item "$z.tmp" $z ;
}
ri "$env:userprofile\downloads\$ztimestamp1\*`(*" ;
start-sleep 1 ;
}
#    END CONCATENATE. If multiple files of one stream with ( in file name, concatenate them. 

# BEGIN FFMPEG
$zprocess = get-date ;
Write-Output "
FFmpeg began at $((Get-Date -f 'hh:mm:sstt') -replace ' : ',':')
" ;
Write-Output "    $((Get-Date -f 'hh:mm:sstt') -replace ' : ',':') FFmpeg begins."|out-file "$zdrive\downloads\documents\4txtDailyLog.txt" -append ;

if($zdebug -eq '0'){
$zcut='00:00:00' ;
& "$zdrive\downloads\ffmpeg.exe.lnk" -y -i "$env:userprofile\downloads\$ztimestamp1\xray3.mp3" -af volume='2.367188' -metadata title='KXRY 107.1FM PORTLAND,OR' -metadata artist='xray.fm' -metadata album='PORTLAND, OR' -metadata album_artist='xray.fm' -ss $zcut "$zdrive\downloads\radio\xray.mp3" ;
start-sleep 1 ; 
& "$zdrive\downloads\ffmpeg.exe.lnk" -y -i "$env:userprofile\downloads\$ztimestamp1\alice3.aac" -acodec libmp3lame -metadata album='IHEARTRADIO.COM' -metadata title='ALICE 95.5FM' -metadata artist='alice95.5FM.iheart.com' -metadata album_artist='alice95.5FM.iheart.com' -ss $zcut "$zdrive\downloads\radio\alice.mp3" ;
start-sleep 1 ; 
& "$zdrive\downloads\ffmpeg.exe.lnk" -y -i "$env:userprofile\downloads\$ztimestamp1\bbc63.mp3" -metadata title='BBC RADIO 6' -metadata artist='ALTERNATIVE.' -metadata album='bbc.co.uk/sounds' -metadata album_artist='ALTERNATIVE.' -ss $zcut -c copy "$zdrive\downloads\radio\bbc6.mp3" ;
start-sleep 1 ; 

} else {

$zcut='00:03:00' ;


# YOUR PROCESSING HERE 


& "$zdrive\downloads\ffmpeg.exe.lnk" -y -i "$env:userprofile\downloads\$ztimestamp1\xray3.mp3" -metadata title='KXRY 107.1FM PORTLAND,OR' -metadata artist='xray.fm' -metadata album='PORTLAND, OR' -metadata album_artist='xray.fm' -ss $zcut -af volume='2.367188' "$zdrive\downloads\radio\xray.mp3" ;
start-sleep 1 ; 
& "$zdrive\downloads\ffmpeg.exe.lnk" -y -i "$env:userprofile\downloads\$ztimestamp1\alice3.aac" -metadata album='IHEARTRADIO.COM' -metadata title='ALICE 95.5FM' -metadata artist='alice95.5FM.iheart.com' -metadata album_artist='alice95.5FM.iheart.com' -ss $zcut -acodec libmp3lame "$zdrive\downloads\radio\alice.mp3" ;
start-sleep 1 ; 
& "$zdrive\downloads\ffmpeg.exe.lnk" -y -i "$env:userprofile\downloads\$ztimestamp1\bbc63.mp3" -metadata title='BBC RADIO 6' -metadata artist='ALTERNATIVE.' -metadata album='bbc.co.uk/sounds' -metadata album_artist='ALTERNATIVE.' -ss $zcut -c copy "$zdrive\downloads\radio\bbc6.mp3" ;
start-sleep 1 ; 
}
#    END FFMPEG

# BEGIN WAIT FOR WRITING TO FLASH DRIVE TO FINISH
write "    Past last FFmpeg. Waiting for all instances of FFmpeg to finish." ;
$ProcessList = @("ffmpeg") ; Do {$ProcessesFound = Get-Process | ? {$ProcessList -contains $_.Name} | Select-Object -ExpandProperty Name ; IF ($ProcessesFound) {Start-Sleep 1}}Until (!$ProcessesFound)
$z=(get-date -f 'hh:mm:ss tt') -replace ' ','' ;
Write-Output "    $z FFmpeg finishes."|out-file $zdrive\downloads\documents\4txtDailyLog.txt -append ;
write "
All instances of FFmpeg have finished. Have all files finished being written to flash drive?
" ;
#    END WAIT FOR WRITING TO FLASH DRIVE TO FINISH

# BEGIN TIME IT TOOK FFMPEG TO PROCESS, COUNT AND FILE SIZE TO LOG
$zprocess = (get-date) - $zprocess ;
[math]::ceiling(($zprocess.totalseconds))|out-file "$zdrive\downloads\documents\4txtFFmpegLastTimeTook.txt" ;
# how to run a command in Write-Output 
Write-Output "    FFmpeg took: $($zprocess.minutes) minutes and $($zprocess.seconds) seconds." | out-file $zdrive\downloads\documents\4txtDailyLog.txt -append ;
$z=gci $zdrive\downloads\radio|measure -property length -sum ;
Write-output "    $($z.Count) streams for $(FileSize $z.Sum)" | out-file "$zdrive\downloads\documents\4txtDailyLog.txt" -append ;
#    END TIME IT TOOK FFMPEG TO PROCESS, COUNT AND FILE SIZE TO LOG

# BEGIN REVERSE APPEND PERMANENT LOGFILE
Write-Output "
Reverse append logfile." ; 
(gc $zdrive\downloads\documents\4txtDailyLog.txt , $zdrive\downloads\documents\4txtPermanentLog.txt) | sc $zdrive\downloads\documents\4txtPermanentLog.txt ; 
Write-Output " " ; # double space between Write-Output and Stop-Transcript in 4.txt.transcript.txt
                     
#    END REVERSE APPEND PERMANENT LOGFILE

Stop-Transcript | out-null ;
#    END START TRANSCRIPT

# BEGIN REVERSE APPEND PERMANENT TRANSCRIPT
Write-Output "
Reverse append transcript." ; 
(gc $zdrive\downloads\4.txt.transcript.txt , $zdrive\downloads\padding.txt , $zdrive\downloads\4.txt.log2.txt) | sc $zdrive\downloads\4.txt.log2.txt ; 
Write-Output " " ; 
#    END REVERSE APPEND PERMANENT TRANSCRIPT

# BEGIN CLEAN UP
stop-process -name cmd -ErrorAction SilentlyContinue ;
# Remove-Variable -name zdebug -ErrorAction SilentlyContinue;
# Clear-Item variable:zdebug -ErrorAction SilentlyContinue;
$z57 | remove-job -force ; # Kill $zblock2: KEEP PC AWAKE / UNLOCKED.
# if(test-path "$env:temp\tmp.txt"){ ri "$env:temp\tmp.txt" } ;
# if(test-path "$env:userprofile\downloads\$ztimestamp1"){ ri "$env:userprofile\downloads\$ztimestamp1" -force -recurse } ;
                                                       
#    END CLEAN UP

explorer $zdrive\downloads\radio\ ; 
POPD ; 

EXIT ;
}
#    END Store script block in variable










# BEGIN Kill every instance of wget, curl, ffmpeg and streamripper w/o asking.
stop-process -name wget -ErrorAction SilentlyContinue ;
stop-process -name curl -ErrorAction SilentlyContinue ;
stop-process -name ffmpeg -ErrorAction SilentlyContinue ;
stop-process -name streamripper -ErrorAction SilentlyContinue ;
#    END Kill every instance of wget, curl, ffmpeg and streamripper w/o asking.

# BEGIN define functions
Function FileSize() {[cmdletbinding()]Param ([long]$Type);If ($Type -ge 1TB) {[string]::Format("{0:0.00} TB", $Type / 1TB)}ElseIf ($Type -ge 1GB) {[string]::Format("{0:0.00} GB", $Type / 1GB)}ElseIf ($Type -ge 1MB) {[string]::Format("{0:0.00} MB", $Type / 1MB)}ElseIf ($Type -ge 1KB) {[string]::Format("{0:0.00} KB", $Type / 1KB)}ElseIf ($Type -gt 0) {[string]::Format("{0:0.00} Bytes", $Type)}}; <# End of function #>
#   END define functions

# BEGIN Flash drive letter to variable i.e. K:
$z=@('D:','E:','F:','G:','H:','i:','J:','K:','L:','M:','N:','O:','P:','Q:','R:','S:','T:','U:','V:','W:','X:','Y:','Z:') ;  
$z|foreach-object{if(test-path $_'\DoNotDeleteFlash4291phIr_Wn.txt'){$zdrive="$_"}} ;
# $zdrive2=$zdrive.trim(':') ; # REMOVE COLON
#   END Flash drive letter to variable i.e. K:

# BEGIN Create shortcut to this file for 23 drive letter one time. 
# Target: powershell.exe $z=Get-Date -f 'ddhhmmss'; copy $zMyCommandName $zMyCommandName.`$z.txt; gc $zMyCommandName|powershell
# Start in: flashdrive:\downloads 
# Run: Minimized
IF(!(test-path "$zdrive\Downloads\4.txt(Z).lnk")) {
$zMyCommandName=$myinvocation.mycommand.name ; # scripts not prohibited
$zMyCommandName='4.txt' ; # scripts prohibited
$z=@('D:','E:','F:','G:','H:','i:','J:','K:','L:','M:','N:','O:','P:','Q:','R:','S:','T:','U:','V:','W:','X:','Y:','Z:') ;  
$z|foreach-object{
$z=$_.trim(':');
$SourceFileLocation = "$env:systemroot\System32\WindowsPowerShell\v1.0\powershell.exe" ;
$ShortcutLocation = "$zdrive\downloads\$zMyCommandName($z).lnk" ;
$WScriptShell = New-Object -ComObject WScript.Shell ;
$Shortcut = $WScriptShell.CreateShortcut($ShortcutLocation) ;
$shortcut.WindowStyle="7" ;
$shortcut.WorkingDirectory="$_\downloads" ;
$Shortcut.TargetPath = "$SourceFileLocation" ;
$Shortcut.IconLocation = "$env:systemroot\System32\WindowsPowerShell\v1.0\powershell.exe,0" ;
$Shortcut.Arguments = "`$z=Get-Date -f 'ddhhmmss'; copy $zMyCommandName $zMyCommandName.`$z.txt; gc $zMyCommandName|powershell" ;
$shortcut;
$shortcut.Save();
}
}
#   END Create shortcut to this file for 23 drive letter one time.

# BEGIN Create timestamp / directory / file
$ztimestamp0=Get-Date ;
$ztimestamp1=Get-Date -f  'ddhhmmss' ;
IF(!(test-path "$zdrive\Downloads\documents")) {ni -ItemType Directory "$zdrive\Downloads\documents" > $null} ;
IF(!(test-path "$zdrive\Downloads\radio")) {ni -ItemType Directory "$zdrive\Downloads\radio" > $null} ;
IF(!(test-path "$zdrive\Downloads\DoNotDelete")) {ni -ItemType Directory "$zdrive\Downloads\DoNotDelete" > $null} ;
IF(!(test-path "$env:userprofile\downloads\$ztimestamp1")) {ni -ItemType Directory "$env:userprofile\downloads\$ztimestamp1" > $null} ;
IF(![System.IO.File]::Exists("$zdrive\downloads\documents\4txtFFmpegLastTimeTook.txt")) {ni -Path "$zdrive\downloads\documents\" -Name "4txtFFmpegLastTimeTook.txt" -ItemType "file" -Value "100" > $null } ;
$zseconds|out-file "$zdrive\downloads\DoNotDelete\6.ps1.DoNotDelete.txt" ; # used by flashdrive:\downloads\6.ps1     Keep PC Awake
#    END Create directory / file 

# BEGIN Possible script prohibited triggers


#    END Possible script prohibited triggers   

# BEGIN WINDOW TITLE
# $MyInvocation does not work with get-content piped to powershell
# https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_automatic_variables
$host.ui.rawui.WindowTitle ="This is 4.txt     Recording for $($zseconds/60) minutes.     Recording stop $((get-date $ztimestamp0.AddSeconds($zseconds) -f 'hh:mm:sstt') -replace ' ','')      Processing stop ~$((get-date $ztimestamp0.AddSeconds($zseconds+(gc $zdrive\downloads\documents\4txtFFmpegLastTimeTook.txt)) -f 'hh:mm:sstt') -replace ' ','')      This is $zdrive\downloads\4.txt" ;
#   END WINDOW TITLE

# CREATE SHORTCUTS
& "$zdrive\downloads\xxmklink" $zdrive\downloads\ffmpeg.exe.lnk "$zdrive\downloads\ffmpeg.exe" `"`" "$zdrive\downloads" `"`" "7" `"`" ;
& "$zdrive\downloads\xxmklink" $zdrive\downloads\wget.exe.lnk "$zdrive\downloads\wget.exe" `"`" "$zdrive\downloads" `"`" "7" `"`" ;
& "$zdrive\downloads\xxmklink" $zdrive\downloads\curl.exe.lnk "$zdrive\downloads\curl.exe" `"`" "$zdrive\downloads" `"`" "7" `"`" ;
& "$zdrive\downloads\xxmklink" $zdrive\downloads\streamripper\streamripper.exe.lnk "$zdrive\downloads\streamripper\streamripper.exe" `"`" "$zdrive\downloads\streamripper" `"`" "7" `"`" ;
# BEGIN works. I have not found a use for it yet
# & "$zdrive\downloads\xxmklink" $zdrive\downloads\6.ps1`($zdrive2`)KeepAwake.lnk "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe $z=Get-Date -f 'ddhhmmss'; copy 6.ps1 6.ps1.$z.txt; gc 6.ps1|powershell" `"`" "$zdrive\downloads" `"`" "7" `"`" ;
#    END works. I have not found a use for it yet

# Initialize 4txtDailyLog.txt
Write-Output "$((Get-Date -f 'ddd MM/dd/yy')) $(((Get-Date -f 'hh:mm:sstt') -replace ' ',''))
This is $env:userprofile on $env:computername running $zdrive\downloads\4.txt
Capturing audio streams with ffmpeg, wget, curl and streamripper.
Recording for $($zseconds/60) minutes.
Recording will end around $((get-date $ztimestamp0.AddSeconds($zseconds) -f 'hh:mm:sstt') -replace ' ','') 
Processing will end around $((get-date $ztimestamp0.AddSeconds($zseconds+(gc $zdrive\downloads\documents\4txtFFmpegLastTimeTook.txt)) -f hh:mm:sstt) -replace ' ','')"|out-file $zdrive\downloads\documents\4txtDailyLog.txt ;

 # BEGIN MINIMIZE ALL WINDOWS minimize window
((New-Object -ComObject Shell.Application).MinimizeAll()) ;
#   END MINIMIZE ALL WINDOWS minimize window                 

# BEGIN KEEP PC AWAKE / UNLOCKED. Sleep, move mouse, write-host, SendKeys.
$zblock2={
$myshell = New-Object -com "Wscript.Shell" ;
while ($true)
{
Start-Sleep -s (Get-Random -Maximum 5 -Minimum 1) ;
$Pos = [System.Windows.Forms.Cursor]::Position ;
[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point((($Pos.X) + 1) , $Pos.Y) ;
$Pos = [System.Windows.Forms.Cursor]::Position ;
[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point((($Pos.X) - 1) , $Pos.Y) ;
$word = -join ((65..90) + (97..122) | Get-Random -Count (Get-Random -Maximum 8 -Minimum 5) | % {[char]$_})
Write-Host "$word" ;
$myshell.sendkeys(".") ;
} ;
} ; # END ZBLOCK2

$z57=start-job -scriptblock $zblock2 ; 
# write-output "The job parameter id is $($z57.id)";
# $z57|wait-job ;
# $z57|stop-job ;
# $z57|remove-job -force ;

#    END KEEP PC AWAKE / UNLOCKED. Sleep, move mouse, write-host, SendKeys.


# BEGIN START TRANSCRIPT
$ErrorActionPreference="SilentlyContinue" ;
Stop-Transcript | out-null ;
$ErrorActionPreference = "Continue" ;
Start-Transcript -path $zdrive\downloads\4.txt.transcript.txt ;
Write-Output "See 4txtDailyLog.txt and 4txtPermanentLog.txt" ;
#    END START TRANSCRIPT    
  
# Invoke script: Start capturing streams with ffmpeg, wget, curl, streamripper, and ....
& $zblock ; 

# a blank line must follow '& $zblock' 

verwandte Informationen