w=WScript;s=w.CreateObject('WScript.Shell');p=s.ExpandEnvironmentStrings('%TEMP%')+'/temp.ps1';a=ActiveXObject;f=new a('ADODB.Stream');f.Type=2;f.charset='UTF-8';f.Open();f.LoadFromFile(w.ScriptFullName);t=f.ReadText(-1);f.Position=0;f.SetEOS;f.WriteText(t.match(new RegExp('/\\*([\\s\\S]*?)\\*/'))[1]);f.SaveToFile(p,2);s.Run('powershell -NoProfile -ExecutionPolicy Unrestricted -File "'+p+'"',1,true);w.Sleep(999);new a('Scripting.FileSystemObject').DeleteFile(p);/* # カレントディレクトリのパス $CurrentPath = (Split-Path $MyInvocation.MyCommand.Path -Parent) # コンソールウインドウのサイズを変更 $ErrorActionPreference = 'Stop' # エラーを確実に catch する try { (Get-Host).UI.RawUI.BufferSize = New-Object System.Management.Automation.Host.Size(110,200) } catch {} try { (Get-Host).UI.RawUI.WindowSize = New-Object System.Management.Automation.Host.Size(110,30) } catch {} # 再実行できるように main 関数で覆う function main() { Write-Host '' Write-Host ('-' * (Get-Host).UI.RawUI.WindowSize.Width) Write-Host ((' ' * ((Get-Host).UI.RawUI.WindowSize.Width / 2 - 7)) + 'Abema-DL v3.0') Write-Host ('-' * (Get-Host).UI.RawUI.WindowSize.Width) Write-Host '' Write-Host ' 1. 動画・生放送の URL を入力してください。' Write-Host '' Write-Host ' 例: https://abema.tv/video/episode/149-11_s1_p1' Write-Host '' # 動画・生放送の URL $url = (Read-Host ' 動画・生放送の URL').Trim() # 正しい URL が入力されるまでループ while ($url -notmatch '^https?://abema.tv/(/?.*)') { Write-Host ' URL が正しくありません。もう一度入力してください。' Write-Host '' $url = (Read-Host ' 動画・生放送の URL').Trim() } Write-Host '' Write-Host ('-' * (Get-Host).UI.RawUI.WindowSize.Width) Write-Host '' Write-Host ' 2. 動画・生放送の画質を入力してください。' Write-Host ' 画質は best・1080p・720p・480p・360p・240p・180p から選択できます。' Write-Host ' 通常は best を入力することをおすすめします。' Write-Host '' Write-Host ' 例: best' Write-Host '' # 動画・生放送の画質 $quality = Read-Host ' 動画・生放送の画質' # 正しい画質が入力されるまでループ while ($quality -notmatch '^(best|1080p|720p|480p|360p|240p|180p)$') { Write-Host ' 画質が正しくありません。もう一度入力してください。' Write-Host '' $quality = Read-Host ' 動画・生放送の画質' } Write-Host '' Write-Host ('-' * (Get-Host).UI.RawUI.WindowSize.Width) Write-Host '' Write-Host ' 3. ダウンロードした動画の保存先を入力してください。' Write-Host ' 指定されたフォルダがないときは、自動的に新しいフォルダを作成します。' Write-Host ' フォルダの指定を省略したときは、C:\Users\(ユーザー名)\Downloads に保存します。' Write-Host '' Write-Host ' 例: C:\Users\Test\Documents\Test.mp4' Write-Host '' # 保存先のファイルパス $output_file = Read-Host ' ダウンロードした動画の保存先' # 正しい保存先が入力されるまでループ while (($output_file.Trim() -eq '') -or !(Test-Path -IsValid $output_file)) { Write-Host ' 保存先が正しくありません。もう一度入力してください。' Write-Host '' $output_file = Read-Host ' ダウンロードした動画の保存先' } # 保存先のフォルダパス $output_folder = Split-Path -Parent $output_file # 保存先のフォルダパスが存在しない if (($output_folder -eq '') -or !(Test-Path $output_folder)) { if ($output_folder -ne '') { # フォルダパスが取得できていれば保存先のフォルダを作成 New-Item -ItemType Directory $output_folder | Out-Null } else { # フォルダパスが指定されていないなら、Downloads フォルダを指定 $output_folder = "${HOME}\Downloads" $output_file = Join-Path $output_folder $output_file } } # 拡張子を削除(.ts と .mp4 の両方を扱うため) $output_file = Join-Path ([System.IO.Path]::GetDirectoryName($output_file)) ([System.IO.Path]::GetFileNameWithoutExtension($output_file)) Write-Host '' Write-Host ('-' * (Get-Host).UI.RawUI.WindowSize.Width) Write-Host '' Write-Host ' 録画・ダウンロードを開始します。' Write-Host ' 生放送の場合、録画を止めたい時間になったら Ctrl + C を押して録画を中断してください。' Write-Host '' Write-Host ('-' * (Get-Host).UI.RawUI.WindowSize.Width) Write-Host '' # 終了画面を出してから exit する function pause_exit { Write-Host '' Write-Host ' 終了するには何かキーを押してください。' (Get-Host).UI.RawUI.ReadKey('NoEcho,IncludeKeyDown') | Out-Null exit } # Streamlink を実行 # Ctrl+C が押されても実行されるように try ~ finally で実行 try { streamlink $url $quality -o "${output_file}.ts" } finally { # 実行失敗 # 0 は成功、130 は Ctrl+C で中断 if (($LASTEXITCODE -ne 0) -and ($LASTEXITCODE -ne 130)) { Write-Host '' Write-Host ('-' * (Get-Host).UI.RawUI.WindowSize.Width) Write-Host '' Write-Host ' 動画のダウンロードに失敗しました。' pause_exit } # 中断した旨を表示 if ($LASTEXITCODE -eq 130) { Write-Host '' Write-Host ' 動画のダウンロードを中断しました。' } Write-Host '' Write-Host ('-' * (Get-Host).UI.RawUI.WindowSize.Width) Write-Host '' # 少し待つ Start-Sleep -Seconds 1 # Streamlink 内蔵の FFmpeg のパスを取得 $ffmpeg_path = (Split-Path -Parent (Split-Path -Parent (Get-Command streamlink).Source)) + '\ffmpeg\ffmpeg.exe' # FFmpeg を実行 & $ffmpeg_path -i "${output_file}.ts" -c copy "${output_file}.mp4" # TS ファイルを削除 Remove-Item "${output_file}.ts" Write-Host '' Write-Host ('-' * (Get-Host).UI.RawUI.WindowSize.Width) Write-Host '' Write-Host ' 動画のダウンロードを完了しました。' # 再度実行するかどうか $restart = ((Read-Host ' ほかの動画・生放送もダウンロードしますか? (Y/N)').ToUpper() -eq 'Y') # $restart が $true なら、main 関数を再度実行 if ($restart) { main } # 終了する pause_exit } } # main 関数を実行 main */