cmd 또는 PowerShell 스크립트를 사용하여 여러 스트리밍 오디오 URL을 캡처/녹음/다운로드하는 방법은 무엇입니까?

cmd 또는 PowerShell 스크립트를 사용하여 여러 스트리밍 오디오 URL을 캡처/녹음/다운로드하는 방법은 무엇입니까?

윈도우 10 64비트.

cmd 또는 PowerShell 스크립트를 사용하여 여러 스트리밍 오디오 URL을 캡처/녹음/다운로드하는 방법은 무엇입니까?

cmd 배치를 사용하여 매일 밤 한 시간 동안 15개의 서버에서 15개의 .mp3 오디오 스트림을 캡처합니다. 나는 wget, ffmpeg, vlc 및 컬을 겪었습니다. 내 스크립트는 신뢰할 수 없는 결과를 생성합니다. 7일 중 단 하루만 한 시간 동안 15개 스트림을 모두 캡처합니다. 컬이 가장 안정적입니다. 각 스트림마다 하나의 컬 인스턴스를 엽니다.

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

오늘 밤에 Powershell을 시도했지만 실패했습니다. 15개의 Powershell 인스턴스 중 절반이 천천히 저절로 닫혔고 나머지 절반은 한 시간 동안 캡처되지 않았습니다.

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')"

Powershell의 한 인스턴스에서 15개의 스트림을 캡처하는 것이 더 나을 것이라고 생각했지만 첫 번째 스트림이 끝나지 않기 때문에 두 번째 스트림이 시작되지 않습니다.

$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)
}

4시간 동안 Bing과 Google을 사용해도 답변이 나오지 않았습니다.

명령줄에서 스트리밍 오디오를 캡처/녹음/다운로드하는 방법은 무엇입니까?

나는 powershell이나 컬에 갇혀 있지 않습니다. 유일한 요구 사항은 Windows 10 64비트에서 실행되고, 15개 스트림을 모두 안정적으로 캡처하며, 사용자 상호 작용 없이 실행될 수 있다는 것입니다.

답변1

윈도우 10 64비트. 관리자 권한이 필요하지 않습니다.

streamripper v1.64.6을 사용하여 cmd 또는 PowerShell 스크립트로 여러 스트리밍 오디오 URL을 캡처/녹음/다운로드하는 방법,, 파워셸 5.1(System.Net.WebClient 다운로드FileAsync), 컬 v.7.55.1 및 ffmpeg v.3.4. 오디오 스트림은 여러 가지 방법으로 제공되므로 한 가지 방법으로 캡처하는 것은 좋은 생각이 아닙니다.

저는 cmd로 많은 성공을 거두었습니다.스트림리퍼v.1.64.6 및 ffmpeg v.3.4.

중지 프로세스는 ffmpeg를 종료하고 컬을 사용하여 다운로드를 파일에 기록하는 데 사용됩니다.

Windows Media Player를 사용하여 다운로드하는 동안 스트림을 들을 수 있습니다. 메타데이터 길이가 항상 올바르게 표시되는 것은 아닙니다.

ffmpeg는 메타데이터 쓰기 및 다듬기와 같은 많은 사후 처리를 수행하는 데 사용할 수 있습니다. ffmpeg 및 컬로 경로를 변경하십시오. streamripper, System.Net.WebClient 및 컬은 기본적으로 덮어씁니다. 덮어쓰도록 ffmpeg를 설정했습니다.

이 스크립트는 30초 동안 다운로드됩니다.

cmd, streamripper 및 ffmpeg 사용: streamripper의 연결이 끊어지면 원본 파일의 이름을 바꾸고 캡처를 다시 시작합니다. 이 배치는 파일을 연결합니다. Streamripper는 최소한 iheart, tunein, streamguys, streamtheworld, radiojar, abacast 및 각광 스트림을 캡처합니다. 항상 그렇듯이 일시 중지를 방지하기 위해 명령을 작성하십시오 start "" streamripper.exe.lnk.

스트림 URL이 변경됩니다. 스트림 URL을 찾는 데 도움이 되는 페이지를 작성했습니다.iheart 스트림 URL을 찾는 방법.

# 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

Powershell, 컬 및 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 검색 - 컬을 사용하여 오디오 스트림 다운로드

Google 검색 - ffmpeg를 사용하여 오디오 스트림 다운로드

Google 검색 - ffmpeg를 사용하여 메타데이터 작성

System.Net.WebClient의 대안: Powershell이 ​​stackoverflow에서 병렬로 명령을 실행할 수 있습니까?

스트리밍 오디오를 캡처하는 방법 스트리밍 오디오를 저장하는 방법 스트리밍 오디오를 출력하는 방법 스트리밍 오디오를 녹음하는 방법

답변2

Windows 10 64비트, Streamripper, wget, 컬, ffmpeg를 사용하여 스트리밍 오디오를 .mp3로 플래시 드라이브에 추출/캡처/녹화/저장/다운로드하는 PowerShell 5 스크립트, OS는 의심스러운 파일을 삭제하고 마우스가 없는 경우 데스크탑을 잠급니다. X초 동안 키보드 활동, 스크립트 사용 금지, 사용자는 표준/사용자 권한으로 제한되며 1시간 후에 로그오프됩니다. 처음 3분을 잘라보세요.

묻지 않고 ffmpeg, wget, cur 및 streamripper의 모든 인스턴스를 강제로 종료합니다.

기본값은 4개의 스트림을 10초 동안 캡처하는 것입니다. $z초를 참조하세요.

Streamripper가 스트림에 성공하지 못하는 경우 ffmpeg, wget 또는 컬을 사용해 보세요.

<# 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' 

관련 정보