高度な設定 - dongaba/TVerRec GitHub Wiki

より細かく設定を変更したい場合は以下のような項目も設定変更が可能です。

  • $script:parallelDownloadFileNumは同時に並行でダウンロードする番組の数を設定します。

    • 規定の設定では 5 番組を同時にダウンロードします。
    • ここの数字を増やすことで同時ダウンロード数を増やすことはできますが、PC への負荷が高まり逆にダウンロード効率が下がるのでご注意ください。
  • $script:parallelDownloadNumPerFileはそれぞれの番組をダウンロードする際の並行ダウンロード数を設定します。

    • 規定の設定では 1 番組あたり、10 並列で同時にダウンロードします。
    • つまり、$script:parallelDownloadFileNum×$script:parallelDownloadNumPerFileが実質的な最大同時ダウンロード数になります。
    • ここの数字を増やすことで同時ダウンロード数を増やすことはできますが、PC への負荷が高まり逆にダウンロード効率が下がるのでご注意ください。
  • $script:loopCycleはループ処理の間隔(秒)を指定します。

    • 規定の設定では3600で 1 時間毎にループ処理を実行します。
  • $script:myPlatformUID$script:myPlatformToken$script:myMemberSIDはマイページ処理用UID、トークン、SIDを指定します。

    • マイページに登録したお気に入りやあとでみる、続きから再生などをTVerRecでダウンロードするためのplatfprm_uid、platform_token、member_sidを指定します。
    • これを指定しないとマイページ配下の番組はダウンロードできません。
      • TVerIDにログインした状態でマイページ配下の番組をダウンロードするには$script:myMemberSIDの設定が必要です。
      • TVerIDにログインせず匿名で利用する際は$script:myMemberSIDの設定は不要です。
    • platform_uidとplatform_token、member_sidはブラウザの開発者ツール、またはChrome拡張機能TVerRec Assistantを使って確認できます。
  • $script:enableMultithreadは並列処理を有効化して処理を高速化するかを設定します。

    • $true(初期値)を設定することで、並列処理を有効化し、処理を高速化します。
      • ただし、並列処理を有効化すると履歴ファイルやダウンロード対象外リストの破損リスクが高まる可能性が高くなります。
      • 現在のところ、理並列処理を行うのはダウンロード対象外の番組削除と空ディレクトリの削除処理です。
    • $falseを設定すると、並列処理を無効化します。
  • $script:multithreadNumは並列処理の際に同時に起動するスレッド数を指定します。

    • 規定の設定では10スレッド同時に起動するようになっていますが、PC の性能に応じて適度に設定してください。
    • 最近の PC であれば50くらいの値を設定しても十分に動作すると思いますが、あまり大きな数を指定すると逆に処理時間が長くなる可能性があります。
    • 現在のところ、並列処理を行うのはダウンロードリストの作成処理とダウンロード対象外番組の削除処理、空ディレクトリの削除処理です。
  • $script:disableToastNotificationはトースト通知を無効化することが可能です。

    • $trueを設定することで、トースト通知を無効化することが可能です。
    • $false(初期値)を設定すると、トースト通知を送信します。
  • $script:rateLimitはダウンロード帯域制限を指定します。

    • ネットワーク帯域を使い切らないようにダウンロード速度制限を設定することができます。
    • 設定は 1 ファイルあたりの帯域となっており単位は Mbps です。つまり、10 ファイルダウンロードすれば 10 倍の帯域を使います。
    • あくまでも目安となっており、瞬間的には設定値を超えることがあります。
    • 帯域制限をしないには0を設定します。
    • 規定の設定では0が設定されています。(制限なし)
  • $script:timeoutSecは各種 HTTP のアクセス時のタイムアウト値です。

    • 初期値は60で 60 秒以内に HTTP の応答がなければタイムアウトエラーとして判断されます。
  • $script:guiMaxExecLogLinesはGUI版の最大ログ行数を設定します。

    • GUI版で実行ログの最大行数を制限することができます。
    • 実行ログの行数が増えてくるとメモリ使用量の増大やレスポンスが低下する可能性が高いです。
    • 規定の設定では1000行に設定されています。
    • 0に設定することで無制限とすることができます。
  • $script:historyRetentionPeriodはダウンロード履歴の保持日数を指定します。

    • 初期値は30で 30 日以上が経過したダウンロード履歴は自動的に削除されます。
    • 保持期間を長くすると、同じ番組の再配信があった際に重複ダウンロードしなくて済む可能性が高くなりますが、処理時間が長くなる可能性があります。
  • $script:sortVideoByMediaは放送局(テレビ局)ごとのディレクトリを作って番組をダウンロードするかを設定します。

    • $false(初期値)の場合の移動先は以下のようになります

      ダウンロード先/
        └番組シリーズ名 番組シーズン名/
          └番組シリーズ名 番組シーズン名 放送日 番組タイトル名.mp4
      
    • $trueの場合の移動先は以下のようになります

      ダウンロード先/
        └放送局/
          └番組シリーズ名 番組シーズン名/
            └番組シリーズ名 番組シーズン名 放送日 番組タイトル名.mp4
      
  • $script:addSeriesNameはダウンロードファイル名に番組シリーズ名を付加するかを設定します。

    • $falseの場合のファイル名は番組シーズン名 放送日 Ep エピソード番号 番組タイトル名.mp4のようになります
    • $true(初期値)の場合のファイル名は番組シリーズ名 番組シーズン名 放送日 Ep エピソード番号 番組タイトル名.mp4のようになります
    • ※厳密にはファイル名は他のオプションによって決定されます
  • $script:addSeasonNameはダウンロードファイル名に番組シーズン名を付加するかを設定します。

    • $falseの場合のファイル名は番組シリーズ名 放送日 Ep エピソード番号 番組タイトル名.mp4のようになります
    • $true(初期値)の場合のファイル名は番組シリーズ名 番組シーズン名 放送日 Ep エピソード番号 番組タイトル名.mp4のようになります
    • ※厳密にはファイル名は他のオプションによって決定されます
  • $script:addBrodcastDateはダウンロードファイル名に番組放送日を付加するかを設定します。

    • $falseの場合のファイル名は番組シリーズ名 番組シーズン名 Ep エピソード番号 番組タイトル名.mp4のようになります
    • $true(初期値)の場合のファイル名は番組シリーズ名 番組シーズン名 放送日 Ep エピソード番号 番組タイトル名.mp4のようになります
    • ※厳密にはファイル名は他のオプションによって決定されます
  • $script:addEpisodeNumberはダウンロードファイル名にエピソード番号を付加するかを設定します。

    • 最近バラエティーバングを未中心に同一放送日の番組を分割配信することが増えてきていますが、そのような場合でも再生順序を明確にすることができます。
    • また、話数を漢数字で配信するドラマでもエピソード番号によるソートが可能になります。
    • ただし、番組によってはエピソード番号が固定になっている番組やエピソード番号が取得できない番組もありますのでご注意ください。
    • $false(初期値)の場合のファイル名は番組シリーズ名 番組シーズン名 放送日 番組タイトル名.mp4のようになります
    • $trueの場合のファイル名は番組シリーズ名 番組シーズン名 放送日 Epエピソード番号 番組タイトル名.mp4のようになります
  • $script:removeSpecialNoteは番組名に付く《ドラマ特区》、《新シリーズ放送記念》、《ドラマ Paravi》、《〇〇出演 「〇〇」スタート記念》などの不要なコメント(補足情報?)を削除するかを設定します。

    • $false(初期値)の場合は TVerで配信されているとおりに番組名を設定
    • $trueの場合は「《」と「》」、「【」と「】」で挟まれた部分を削除
    • 「《」と「》」、「【」と「】」で挟まれた部分が10文字以下の場合は削除されません
  • $script:embedSubtitleはダウンロードしたファイルに字幕データを埋め込むかを設定します。

    • 字幕データが提供されていない番組も多くありますのでご注意ください。
  • $script:embedMetatagはダウンロードしたファイルにメタタグを埋め込むかを設定します。

  • youtube-dl に起因する問題(例えばダウンロードできないなど)が起きた際には以下の 2 種類の youtube-dl を使い分けることが可能です。

    • $script:preferredYoutubedlyt-dlp(初期値)を設定するとyt-dlpから取得します。 こちらの方が安定していますが、不具合発生時のバグ修正には時間がかかる傾向があります。
    • $script:preferredYoutubedlytdl-patchedを設定するとytdl-patchedから取得します。 こちらの方が頻繁に更新されており、不具合発生時にもすぐバグ修正される傾向があります。 yt-dlpでダウンロードできない場合にはytdl-patchedを試す価値があります。
  • TVerRec の特徴の 1 つでもある youtube-dl と ffmpeg の自動アップデートですが、ツール配布元の不具合等により自動アップデートがうまく動作しない場合には無効化することが可能です。

    • $script:disableUpdateYoutubedl$trueを設定すると youtube-dl の自動アップデートが無効化されます。
    • $script:disableUpdateFfmpeg$trueを設定すると ffmpeg の自動アップデートが無効化されます。
  • $script:forceSoftwareDecodeFlag$trueを設定すると、ダウンロードファイルの整合性検証時にハードウェアアクセラレーションを使わなくなります。

    • 高速な CPU が搭載されている場合はハードウェアアクセラレーションよりも CPU で処理したほうが処理が早いことがあります。
    • 概ね 10 世代以降の Intel Core CPU であれば、GPU を搭載していてもソフトウェアデコードの方が高速です。
  • ダウンロードファイルの整合性検証の高速化オプションとして、他にも以下の 2 つがあります。

    • $script:simplifiedValidationは検証を簡素化するかどうかを設定します。
      • $false(初期値)を設定すると、ffmpeg を使ってダウンロードファイルの整合性検証を行います。 PC の性能にもよりますが番組の長さの数分の 1 から数倍の時間がかかりますが、検証精度は非常に高いです。 (全フレームがデコードできるか確認している模様)
      • $trueを設定することで、ffmpeg による番組の完全検証ではなく、ffprobe による簡易検証に切り替えます。 番組 1 本あたり数秒で検証が完了しますが、検証精度は低いです。(おそらくメタデータの検査だけの模様)
    • $script:disableValidationは検証を行わなくするかどうかを設定します。
      • $trueを設定することで、ダウンロードファイルの整合性検証を完全に止めることができます。
  • $script:sitemapParseEpisodeOnlyはキーワードファイルにsitemapを設定した際にエピソードのみを処理するかどうかを設定します。

    • $true(初期値)を設定することで、サイトマップを処理する際にエピソードのみを処理します。 現在のところ、エピソードだけの処理でもすべての番組動画が含まれているようなので、$trueに設定していても全番組のダウンロードが可能なようです。
    • $falseを設定すると、サイトマップを処理する際に Episode だけでなく、シリーズも処理します。 シリーズに紐づく番組もすべて取得するため処理時間が長くなりますが、より多くの番組を取得できる可能性があります。 ただし、現在のところエピソードのみを処理して取得できる番組とトータルでダウンロード可能な件数は変わらないようです。
  • $script:windowShowStyleには youtube-dl と ffmpeg のウィンドウをどのように表示するかを設定します。

    • Normal/Maximized/Minimized/Hiddenの 4 つが指定可能です。
    • 初期値はMinimizedでダウンロードウィンドウは最小化表示となりますが、Normal等に設定することでダウンロードの進捗を確認することができます。
    • Minimizedに設定することで最小化状態でウィンドウが作成されるようになり必要なときにだけ進捗確認をすることができます。
    • Hiddenに設定すると非表示となります。
    • Normalに設定すると多数のウィンドウが表示され鬱陶しいのでおすすめしません。
  • $script:ffmpegDecodeOptionに直接 ffmpeg のオプションを記載することでダウンロードファイルの整合性検証時にハードウェアアクセラレーションを有効化できます。

    • 例えば Intel CPU を搭載した一般的な PC であれば、'-hwaccel qsv -c:v h264_qsv'を設定することで、ハードウェアアクセラレータを使用することができます。
    • 例えば Mac 環境であれば、'-hwaccel videotoolbox'を設定することで、ハードウェアアクセラレータを使用することができます。
    • 例えば Raspberry Pi4 であれば'-c:v h264_v4l2m2m -num_output_buffers 32 -num_capture_buffers 32'を設定することで、ハードウェアアクセラレータを使用することができます。
    • この設定は$script:forceSoftwareDecodeFlag$trueに設定されていると無効化されます。
  • $script:ytdlOptionには youtube-dl のダウンロードオプションを指定します。

    • 何も設定しなければ規定の設定として' --format "(bv*+ba/b)" --force-overwrites --console-title --no-mtime --retries 10 --fragment-retries 10 --abort-on-unavailable-fragment --no-keep-fragments --abort-on-error --no-continue --windows-filenames --no-cache-dir --verbose --no-check-certificates --buffer-size 16K --xattr-set-filesize'が利用されます。
    • 何かを設定した場合には、上記のオプションに対する追加のオプションとして youtube-dl に引数で渡されます。
    • 動画の最大解像度を指定する際などに利用可能です。
      • 1080p に制限したい場合は、-f "bv[height<=1080]+ba/best[height<=1080]"のように設定します。
      • 720p に制限したい場合は、-f "bv[height<=720]+ba/best[height<=720]"のように設定します。
      • 480p に制限したい場合は、-f "bv[height<=480]+ba/best[height<=480]"のように設定します。
  • $script:ytdlNonTVerFileNameには TVer以外からの動画ダウンロードの際の動画ファイル名を設定します。

    • 規定の設定は'%(webpage_url_domain)s - %(upload_date)s - %(title)s - [%(id)s].%(ext)s'です。
    • 詳細は youtube-dl のページ等をご参照ください。
  • $script:forceSingleDownloadは個別ダウンロード時の強制ダウンロードの可否を設定します。

    • 個別ダウンロードの際に過去履歴やダウンロード対象外リストとの照合をせずに強制ダウンロードするかを設定します。
    • この設定を有効にすると、不要ファイル削除処理時にダウンロード対象外リストとマッチするディレクトリの削除を行わなくなります。
    • 規定の設定は$falseです。
  • $script:extractDescTextToListはダウンロードリストファイルへの番組説明の出力の可否を設定します。

    • 規定の設定は$falseです。
    • $trueに設定するとダウンロードリスト作成時に番組説明等の補足情報を出力します。
    • ダウンロードリストは読みにくくなりますが、ダウンロード対象の選定に活用頂くことができます。
  • $script:listGenHistoryCheckはダウンロードリストファイル作成時にダウンロード履歴に含まれる番組を除外するかを設定します。

    • 規定の設定は$trueです。
    • 「$true」の場合ははダウンロード履歴に番組履歴がある際はリストファイルに出力しません。
    • 「$false」の場合はダウンロード履歴に番組履歴があってもリストファイルに出力します。
  • $script:updateChannelはTVerRecのアップデータを実行した際に、どのチャネルから最新版をダウンロードするのかを設定します。

    • 規定では release が設定されており、リリース版の最新版をダウンロードします。(プレリリースは除きます)
    • prerelease に設定すると、プレリリース版の最新版をダウンロードします。(リリース版のほうが新しくても常に一番新しいプレリリース板となるのでご注意ください)
    • master に設定すると、masterブランチの最新版を取得します。リリース前の機能を先行取得できます。
    • beta に設定すると、betaブランチの最新版を取得します。より新しい機能をお試しいただけますが、ベータ版のため不具合を含んでいる可能性があります。
    • dev に設定すると、devブランチの最新版を取得します。開発中の最新機能をお試しいただけますが、安定動作しない可能性があるため特殊要件がなければおすすめしません。
  • $script:videoContainerFormatはTVer番組ファイルの動画コンテナ形式を設定します。

    • 規定では mp4 となっており、メタ情報や字幕、サムネイルなどの埋込はmp4形式のみで有効です。
    • 主に音ズレ対策として tsを指定することでts形式を指定することもできますが、ts形式を使うことで音ズレがなくなるかどうかはよくわかりません。
    • ts形式を指定した場合、メタ情報や字幕、サムネイルなどの埋め込みは利用できなくなります。
    • 機能に制限が出るため、基本的には mp4 を指定することが推奨で、特段理由がなければ ts を指定しない方が良いと思います。
  • $script:cleanupDownloadBaseDirは不要ファイル削除時にダウンロードディレクトリもチェック対象にするかを設定します。

    • 規定の設定は$falseです。
    • 「$true」の場合はダウンロードディレクトリにあるファイルも削除対象にします。
    • 「$false」の場合はダウンロードディレクトリにあるファイルも削除対象にしません。
  • $script:cleanupSaveBaseDirは不要ファイル削除時に保存ディレクトリもチェック対象にするかを設定します。

    • 規定の設定は$falseです。
    • 「$true」の場合は保存ディレクトリにあるファイルも削除対象にします。
    • 「$false」の場合は保存ディレクトリにあるファイルも削除対象にしません。
  • $script:ytdlHttpHeaderはyoutube-dlがHTTPアクセスをする際に追加のHTTPヘッダを指定することができます。

    • 規定では 'Accept-Language:ja-JP' が設定されています。
  • $script:ytdlBaseArgsはTVerサイト用youtube-dlの引数を指定します。 − TVerRecはこの設定が入っていることを前提としているので変更は自己責任でお願いします。

    • 規定では' --format "(bv*+ba/b)" --force-overwrites --console-title --no-mtime --retries 10 --fragment-retries 10 --abort-on-unavailable-fragment --no-keep-fragments --abort-on-error --no-continue --windows-filenames --no-cache-dir --verbose --no-check-certificates --buffer-size 16K --xattr-set-filesize'が設定されています。
  • $script:nonTVerYtdlBaseArgsはTverサイト以外youtube-dlの引数を指定します。

    • TVerRecはこの設定が入っていることを前提としているので変更は自己責任でお願いします。
    • 規定では' --format "(bv*+ba/b)" --force-overwrites --console-title --no-mtime --retries 10 --fragment-retries 10 --abort-on-unavailable-fragment --no-keep-fragments --abort-on-error --no-continue --windows-filenames --no-cache-dir --verbose --no-check-certificates --buffer-size 16K --xattr-set-filesize' が設定されています。
  • $script:detailedProgressはキーワード配下の番組一覧取得における進捗情報を表示するかを設定します。

    • 規定の設定は$falseです。
    • 「$true」の場合はキーワード配下の番組一覧取得時に進捗表示をします。
    • 「$false」の場合はキーワード配下の番組一覧取得時に進捗表示をしません。
    • 処理時間が長く動作停止しているのか処理中なのか判断がつかない場合には、進捗表示をすることで進捗状況をより詳細に出力します。
  • $script:scheduleStopはスケジュールベースの稼働停止を使用するかどうかを設定します。

    • 規定の設定は$falseです。
    • 「$true」の場合は $script:stopSchedule の設定に従い稼働停止します。
    • 「$false」の場合は稼働停止しません。
    • 特定の曜日・時間帯にダウンロード等の処理を停止したい場合に曜日ごとの低時間帯を指定します。(1時間ごと)
    • TVerRecは定期的に停止時間かどうかをチェックし、停止時間では処理を一時停止して待機します。停止時間外になると処理を再開します。
    • 仕組み上、処理の停止や再開は厳密には制御できませんので設定されたっ時間は目安としてしてください。
  • $script:stopScheduleは各曜日ごとに処理を停止したい時間帯指定します。

    • 処理を停止したい時間帯をカンマ区切りで24時間指定で指定します。

    • 規定では各曜日ともに全く停止しないように設定されています。

    • 例えば、月曜日の0時〜5:59に停止をしたい場合は、'Mon' = @()の部分を'Mon' = @(0, 1, 2, 3, 4, 5)とします。

      $script:stopSchedule = @{
        'Mon' = @()
        'Tue' = @()
        'Wed' = @()
        'Thu' = @()
        'Fri' = @()
        'Sat' = @()
        'Sun' = @()
      }
      

変更が推奨されない設定

以下の項目は変更を推奨していません。変更される際は自己責任でお願いします。

  • $script:appVersionはアプリケーションのバージョンです。

    • ここを変えても表示が変わるだけで機能が変わるわけではありません。
    • 現時点ではバージョン表記をするためと、TVerRec の自動アップデートのために使われています。
  • $VerbosePreference$DebugPreferenceを設定することで、より詳細な情報が画面に出力されます。

    • 設定可能な値はご自身でお調べください。PowerShell の設定がそのまま使えます。
  • $PSStyle.Formatting.Error,、$PSStyle.Formatting.Warning$PSStyle.Formatting.Verbose$PSStyle.Formatting.Debugを設定することでPowerShellのコンソール出力のフォーマットを変更することができます。

    • TVerRecではエラー等のメッセージの表示色の設定に使用しています。
    • この設定はCLI版でのみ有効です。GUI版には変更ができようされません。
    • 設定可能な値はご自身でお調べください。PowerShell の設定がそのまま使えます。
  • $script:fileNameLengthMaxは OS やファイルシステムが許容するファイル名の最大長をバイト指定で記載します。

    • 一般的な Windows 環境では特に変更する必要はありません。
    • ここで指定した長さを超えるファイル名が生成されそうになると、ファイル名が収まるように自動的にファイル名が短縮されます。
    • なので、あまり深い階層を移動先に指定すると頻繁にファイル名が短縮されたり、エラーとなることがあります。
  • $script:binDir$script:dbDirなどは各種ディレクトリの設定です。

    • ソースファイルから見た際の相対パス指定となるようにしてください。

動的な設定

設定ファイルは PowerShell のスクリプトファイルですので、環境によって設定内容を切り替えて実行することもできます。 例えば、OS の種別によって設定を切り替えるには以下のような記載をすることで実現できます。

switch ($true) {
    $IsWindows { $script:saveBaseDir = 'V:' ; break }
    $isLinux { $script:saveBaseDir = '/mnt/Video' ; break }
    $isMacOs { $script:saveBaseDir = '/Volumes/Video' ; break }
}

その他にも、PC 名によって同時ダウンロード数を変更するようなことも以下の記載で実現できます。

if ( [String][System.Net.Dns]::GetHostName().ToLower() -eq 'mainpc' ) {
    $script:parallelDownloadFileNum = 10
} else {
    $script:parallelDownloadFileNum = 5
}

GPU や OS の種別によって ffmpeg のデコードプションを設定するには以下のような記載で実現できます。

if ($IsWindows) {
    if ((Get-WmiObject Win32_VideoController).Name.ToLower() -like '*intel*' ) {
        $script:ffmpegDecodeOption = '-hwaccel qsv -c:v h264_qsv'
    } elseif ((Get-WmiObject Win32_VideoController).Name.ToLower() -like '*nvidia*' ) {
        $script:ffmpegDecodeOption = '-hwaccel cuda -hwaccel_output_format cuda'
    }
} elseif ($isLinux) {
    if ([System.Net.Dns]::GetHostName() -eq 'pi4') {
        '-c:v h264_v4l2m2m -num_output_buffers 32 -num_capture_buffers 32'
    } else { '' }
} elseif ($isMacOs) {
    '-hwaccel videotoolbox'
} else {
    ''
}