Webで公開されている動画をローカルに保存する「yt-dlp.exe」という外部コマンドがあります。類似のコマンドは色々ありますが、Webサイトの対応状況がとても優秀です。
このコマンドをタスクスケジューラーを使い1日1回指定時間に実行し、複数の動画を連続ダウンロードするバッチをPowerShellスクリプトで作成してみました。
スクリプト
<#
.SYNOPSIS
一括で動画ファイルのダウンロードすrスクリプト
.EXAMPLE
PS> d:\ps1\Batch-yt-dlp.ps1
#>
$VideoDir = "e:\videos"
$ComanndPath = "c:\Users\lily\scoop\apps\yt-dlp\current\yt-dlp.exe"
$ArgsPath = "d:\args\yt-dlp.txt"
$LogPath = "d:\log\yt-dlp.log"
$ErrPath = "d:\log\yt-dlp.err"
$tempDir = Get-Location
Set-Location $VideoDir
Get-Content $ArgsPath | ForEach-Object {
$url = $_
$result = (Start-Process -FilePath $ComanndPath -ArgumentList @($url) -NoNewWindow -PassThru -Wait -RedirectStandardError $ErrPath -RedirectStandardOutput $LogPath)
if ($result.ExitCode -ne 0) {
Exit 1
}
}
New-Item -Path $ArgsPath -Force
Set-Location $tempDir
今回外部コマンドの実行は「Start-Process」コマンドレットを使ってみました。
標準出力と標準エラーをログとしてテキストファイルに保存できる点はバッチ処理に向いている思います。ダウンロードするURLは引数のテキストファイルにURLを改行で並べると一括処理するようにしています。スクリプト終了後、引数のテキストファイルは空になります。
Start-ProcessにPassThruオプションをつけるとオブジェクトが返されます。そのオブジェクトのプロパティでExitCodeを調べることでStart-Processで実行した外部コマンドが正常終了したか確認することが出来ます。
現在ファイルサーバーとして稼働しているCeleron N4000が搭載されたPCで実行しています。引数のURLをセットするテキストファイル、ログ、ダウンロードした動画ファイルは共有フォルダに配置し、別PCからダウンロードの依頼及び視聴が出来るようになっています。
関連リンク
スクリプトを実行しているPC
PowerShellスクリプトのタスクスケジュールの登録方法
PowerShell外部コマンドを実行するサンプル
PowerShellスクリプトで外部コマンドを実行する方法としては「.」でコマンドを実行する方法と「Start-Processコマンドレット」を使う方法があります。細かな制御が出来るのはStart-Processコマンドレットなのですが、こ...
PowerShell外部コマンドを実行するサンプル3「フォルダ内のファイルを一括処理」
フォルダ内にあるPNGファイルに対しOptiPNGで最適化を施します。※1ls -LiteralPath "C:\Users\karet\Pictures" -Filter "*.png" | % { . "C:\Users\karet\t...
コメント