俺の外付けHDD

外付けHDDではなくはてなのサーバーラックの中でした

TVTest0.9.0+xtne6f版EpgTimer+ffmpeg自動エンコードからのGoogleフォトに無限保存

はじめに

精神衛生上PLEX公式またはGithubソースコードが公開されているものだけを使ってTS抜きして視聴・録画・永久保存する環境を構築する。
外付けカードリーダを使用する場合,EpgDataCap_Bon.exeを使うためにはGitgubにはソースコードが見当たらないB25Decoder.dllが必要になってしまう。 ということでこの機会にTVRockのようにTVTest.exeで録画できるxtne6f氏の最新版EDCBを使ってみた。Twitter連携機能はTwitter API+ruby+dosで,自動エンコはffmpeg+dosで行っている。 前記事も一応残しておくつもりだが更新はこっちがメイン。
※この記事はPX-W3PEをベースにしています。別の機種のチューナーの場合ハードやドライバ辺りの導入方法が違いますが,他は参考になるかもしれません。

見出し

したいこと 参照してほしい記事・項
落ちてるバイナリを使って取り敢えずts抜き環境を構築できればいい方 http://nyanshiba.hatenablog.com/entry/2017/01/16/201120
安全なソースやバイナリを使って安定した新しい環境を構築したい方,外付けカードリーダを使う方,自動エンコしてGoogleフォトに無限保存したい方 現在ご覧の記事
視聴だけの方 共通,TVTest
録画してPCで観ればいい方 共通,TVTest,EDCB
録画開始時ツイートしたい方 共通,TVTest,EDCB,xtne6f版でTwitter連携する
録画番組を観た後も全部残しておきたい・スマホでも観たい方,俺 全部

注意事項

※全て自己責任で行って下さい。責任は負いかねます。
※readmeは必ず読みましょう,この記事はあくまでも補助です。
※PCの電源を入れたままアンテナの抜き差しをするとチューナーが壊れるのでやめましょう。
※リンクが機能していない場合は,ggって下さい。

更新情報

徐々に更新内容が適当になっていくのは気のせいです

2017年

4月
更新内容
共通 フォルダ構成を修正
TVTest tvtestビルド時にbaseclassesを足す行程が不要
TVTestの設定
B25.tvcasのビルド行程でスクランブル解除出来ないのを修正
EDCB EpgDataCap_Bonのチャンネルスキャン時の行程が古かった
edcbとtvtestの関連付けを行う
リモートデスクトップ
自動ツイートバッチ twitter api gemをインスコする行程を忘れてた
Twitter連携でSSL証明書が無くツイートできないのを修正
自動エンコバッチ 先行探索固定品質を使う
5月
更新内容
共通 他機種のBDAドライバのリンクを追加
用意するものにBカスを追加
フォルダ構成の書き方を変更
64bit版を試してみたので個々の項目の不備等を修正
readmeへのリンク集の項を追加した
TVTest TVTestVideoDecoderの設定を変更
EDCB EdcbPlugIn周りの設定を整理
指定サービスのみ録画するように設定
自動ツイートバッチ 曜日を追加
斧に自動ツイートスクリプトと自動エンコバッチをうp
自動エンコバッチ 改良
文章の整理
3つのバッチを2つに集約
自動エンコバッチで特定の条件下で音ズレする問題について記述
サービスIDを指定してエンコすることで特定条件下での音ズレを回避
デュアルモノを処理する方法を詳しく
番組情報を参照し条件分岐することで2つのバッチを1つに集約
斧にうpした自動エンコバッチを更新
2GB以下ではなく未満の場合Google Photos Backup用フォルダに移動させるように変更
フォルダやffmpegオプションの登録を環境変数で集約
自動エンコバッチでデジタル放送に合わせてYV12を使うように,24fps化するように変更,解説を分かりやすく?修正
ffmpegのDLリンクが不正確だったので修正
エンコ時に字幕を埋め込む方法を記述
6月
更新内容
共通 ハードの設定の項目を追加
用意するものを修正
アンテナの調整について追記
電源の設定に停電時の自動復旧について追記
コンパイラをVS2017に変更するとともに各種手順を修正
アンテナ給電時に専用のACアダプタが必要なことを書いていなかったので追記
TVTest 字幕プラグインと再生プラグインの説明を修正
TVTestのトラブルシューティングの項を追加
ロゴデータの取得方法について追記
baseclasses必要でした
自動ツイートバッチ #nhkみたいにハッシュタグを自動で付けられるようになった
自動エンコバッチ ffmpegのppフィルタでかなり綺麗に
ffmpegの使い方について少し補足
自動エンコでbwdifよりyadifの方が若干綺麗だったので戻した
自動エンコでrefs等でかなり綺麗になりほぼ完成かな?
QSVの動作条件を追記
EDCBの機能を使ってtsやmp4を削除する方法を追記
ループカウントによる無限ループ対策
うp容量オーバー時とエラー時にツイートで報告するオマケ機能を追加
無駄な条件分岐を削除し合理化
24fps化を廃止
解像度を1440x810→1280x720に変更
7月
更新内容
自動エンコバッチ 古いファイルの自動削除機能を付けてタスクスケジューラを不要にした
古いファイルの自動削除機能が動いてなかったので修正
global_qualityを29に変更
溜まったtsの自動処理に役立ちそうなサンプルを置いといた
Shift_JIS以外の文字コードの場合動作出来ないことを追記
役立ちそうなバッチサンプルを追加
Googleフォトが長過ぎるファイル名に対応していないっぽいのでRecName_Macro.dllで適切に処理
Backup and Sync登場でスマホ版と同じく2GB制限が廃止されたので10GBまでうpできるように対応
実装しないが,番組情報からオプションの選択(24fps化とか品質変更とか)を行うサンプルを公開
8月
更新内容
共通
TVTest
EDCB
自動ツイートバッチ
自動エンコバッチ リサイズにフィルタを使うように変更し品質を向上
ファイルサイズの判別時の余計な処理を削減
夜間時間(東京電力)にエンコを実行して電気代を節約するサンプルを追加
コマンドプロンプトのタイトルバーにエンコ中のファイル名を表示する機能の追加
ffmpegでtsを綺麗に切り出すサンプルを追加

用語解説

用語 解説
TVTest デジタル放送視聴・録画用ソフトだが名目上はデジタル放送汎用視聴プログラム実装研究資料である。最新版は0.9.0。
EpgTimer デジタル放送録画タイマーソフト。有志の派生版が複数あるが,今回はxtne6f氏版を使用する。因みにEpgDataCap_Bonは録画モジュールであるが,今回はTVTestで代用する。
MPEG-2 TS MPEG-2トランスポートストリームの略。MPEG-2コンテナを送受信するための形式。字幕等様々な形式のメディアをまとめて扱える。
TS抜き コピープロテクト(CCI)をかける過程を無視して↑をそのまま保存すること。著作権保護されていないためキャプったり編集できる。ts抜きはコピープロテクトを解除してるわけではないので合法だが,市販のレコーダー等で解除して保存する行為(アクセスコントロールを解除してリッピングすること)は違法となる。ただの屁理屈である,お互いに。
EPG Electronic Programming Guideの略。デジタル放送で流れてくる番組情報など。
Scramble 契約者だけが観られるように電波を乱す暗号。B-CASカードで解除できる。正しく復号されてないとブロックノイズが出たり飛んだり真っ暗になったりする。
Drop tsパケットが抜け落ちること。ブロックノイズが出たり飛んだり真っ暗になったりする。
B-CASカード デジタル放送の暗号を解く処理を担う。柔らかいのとか黒いのとかはやめておいたほうが身の為である。

市販のレコーダーとの違い

最近ネット受信料について賑わってますね。高みのk

チューナー TS抜きできるPC用 TS抜きできないPC用 TS抜きできない市販の
PCでTV視聴録画 -
16:9以外のモニタ x
著作権保護非対応モニタ x x
USBDAC 使える 使えない -
OSの設定で100%以外の拡大率 x -
合法的にダビング10などの縛りを回避 ○(スクショや編集や複製が出来る,ただし私的利用のみ) x x
毎週録画 キーワードや局で絞る自動予約登録機能(極稀に番組名が変更されると失敗する) 連ドラ機能(たまに失敗する) x
番組検索をキーボードで x
数日前の番組表 ○遡れる x x
Twitterで録画通知 x x
持ち出し再生 クラウドストレージから無限にストリーミング(アメリカではGoogleが自ら類似のサービスをやってるっぽい…流石自由の国) ○容量は端末に依存 ○容量は端末に依存

何が違うの?

TVTest 0.9.0 0.7.23
ソースコードGitHub 公開されている 公開されていない
挙動 軽い ちょっとモッサリ
キャプ画像を番組名などでフォルダ分け できる できない
モリーキャプチャプラグイン 入ってる 入っていない
xtne6f-work-plus-s 人柱版10.66 TVRock
ソースコードGitHub ある ない ない
挙動 軽い ちょっとモッサリ |忘れたorz
録画ファイル名 半角にできる 要外部処理 要外部処理
番組検索時のアルファベットやスペース 大文字のみ可,スペースは不可(?)
デザイン面 ボタンの大きさ等が使いやすい 番組表がデフォルトでは見づらい 個人的には使いづらかった
同一TransportStreamを1チューナで連続して録画 できる できる できない
TVTest.exeを使ってEPG取得や録画 できる できない できる

共通

用意するもの

Windows OS
・PCIExpressスロットの空き
・ある程度の容量があるストレージ(生tsは結構容量が大きいので)
・チューナーボード
B-CASカード(付属していないので以前使っていたものを流用するか,https://www.b-cas.co.jp/B-CASカードの発行手続きを行って下さい)
同軸ケーブル(マスプロがオススメ)
・分波器(混合波の場合)
・外付けカードリーダ(内蔵カードリーダで録画すると復号漏れで映像が途切れるので安定した録画のためには買っておくと良い)
・LNB電源供給用ACアダプタ,分配器(BS/CSアンテナを使っていて,他の機器で給電していない場合)
・やる気
・電気
【QSV自動エンコする場合】
・メモリは8GBくらい,DDR4や高クロックなものがオススメ(QSVの処理速度に影響)
・ストレージはSSDが良い
Intel Core i又はxeon(AMDはQSVが使えない)(少々重い処理があるため低スペックだと詰まっちゃう?),Haswel以降(h.264のLA-ICQを使うため)
・グラボを付けている場合Windows8以降のOS(それ以前だと内蔵GPUを併用できないから)
・特にQSVを使うとマザボチップセットがかなり熱くなるのでしっかり冷やして下さい。ファンやヒートシンクを増設したりグリスを塗り替えるなどしてしっかり冷やして下さい。大事なことなので二回言いました。
【参考までも私の環境 】
・OS:Windows10Home64bit(Creators Update適用)
・CPU:Intel Core i5-6500
・メモリ:DDR4 8GB
SSD 256GB
・チューナー:PX-W3PE REV1.3
・外付けカードリーダ:ACR39-NTTCom

PLEX 地上デジタル・BS・CS対応TVチューナー PX-W3PE4

PLEX 地上デジタル・BS・CS対応TVチューナー PX-W3PE4




プレクス LNB電源供給用ACアダプタ

プレクス LNB電源供給用ACアダプタ

※Q3PE4がいずれ出るっぽいので,今は待ったほうが良いかも?

ハードの取り付け

※PCの主電源が落ちた状態で作業を行ってください
①チューナー又は外付けのカードリーダにB-CASカードを挿し込む。
②PCIExレーン(外付けタイプは拡張ポートでなくメインのUSBポート)にチューナーボードを挿し込む。W3PE4等は電源コネクタも付ける。
③外付けカードリーダを使用する場合はB-CASカードの金属部がカードリーダの金属部にしっかり接触するように(裏返しかな?)挿して,カードリーダを取り付ける。出来れば拡張ポートでなくメインのUSBポートに接続すること。
④一戸建ての場合はプレクスのLNB電源供給用ACアダプタを取り付ける。

電源の設定

①(停電対策)BIOSでAC電源喪失から電源復帰した後自動で起動するように設定。
②(停電復帰時の自動ログイン)Win+R→netplwizと入力→ユーザーがこのコンピューターを使うには,ユーザー名とパスワードの入力が必要のチェックを外す。
③(自動ログイン時のセキュリティ確保のためスタートアップで自動ロックさせる)“C:\Users\ユーザ名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"右クリ→新規作成→ショートカット→rundll32 user32.dll,LockWorkStationを入力。
②コントロールパネル又は設定→電源オプションで自動スリープをなしに設定。
③→電源の追加設定→プラン設定の変更→詳細な電源設定の変更→スリープ→スリープ解除タイマーの許可を有効(これをしないとスリープ復帰で録画できない。S3スリープが出来る状態にしておくこと。)

Readme

これらを必ず読んでからはじめること。

ソフト readme
BonDriver_BDA https://github.com/radi-sh/BonDriver_BDA/blob/master/doc/Readme-BonDriver_BDA.txt
BDASpecial-PlexPX https://github.com/radi-sh/BDASpecial-PlexPX/blob/master/doc/Readme-PlexPX.txt
TVTest https://github.com/DBCTRADO/TVTest/blob/master/doc/TVTest.txt
TVTestVideoDecoder https://github.com/DBCTRADO/TVTestVideoDecoder/blob/master/doc/TVTestVideoDecoder.txt
TvtPlay https://github.com/xtne6f/TvtPlay/blob/work/TvtPlay_Readme.txt
TVCaptionMod2 https://github.com/xtne6f/TVCaptionMod2/blob/develop/TVCaptionMod2_Readme.txt
EDCB https://github.com/xtne6f/EDCB/tree/work-plus-s/Document
ffmpeg https://ffmpeg.org/ffmpeg.html

フォルダ構成

最初に書いておく。全ての項においてこれを参考にバイナリを配置して下さい。設定後に現れるファイルもある。
TVTestとEDCB並びに各ドライバ,プラグインは必ず32bitか64bitどちらかに揃えて下さい(ffmpegとCaption2Assは外部ツールなので混在していてもおk)。
拡張子にx64が含まれる場合はその部分を消してリネームして使用してください。

TVTest  
┣Plugins  
┃┃(TVTest-develop\sdk\Samples\Win32\Release)  
┃┣*.tvtp  
┃┃(TVCaptionMod)  
┃┣TVCaptionMod2.tvtp  
┃┃(TvtPlay)  
┃┣TvtPlay.tvtp  
┃┃(EDCB-work-plus-s-bin)  
┃┣EdcbPlugIn.tvtp  
┃┣EdcbPlugIn.ini
┃┃(CasProcessor)(外付けカードリーダを使う方のみ)  
┃┗CasProcessor.tvtp  
┣Themes  
┃┃(TVTest-develop\data\Themes)  
┃┗*.httheme  
┃(TVTest-develop\src\Win32\Release)  
┣TVTest.exe  
┣TVTest_Image.dll  
┃(TVTestVideoDecoder)  
┣TVTestVideoDecoder.ax  
┃(BonDriver_BDA)  
┣BonDriver_PlexPX_S.dll  
┣BonDriver_PlexPX_S.ini  
┣BonDriver_PlexPX_T.dll  
┣BonDriver_PlexPX_T.ini  
┃(BDASpecial-PlexPX)  
┣PlexPX.dll  
┃(TvtPlay)  
┣BonDriver_Pipe.dll  
┣TvtAudioStretchFilter.ax  
┃(EDCB-work-plus-s-bin)   
┣Write_Multi.dll    
┣Write_OneService.dll  
┃(TvCas)(外付けカードリーダを使う方のみ)  
┗B25.tvcas  
EDCB  
┣BonDriver  
┃┃(BonDriver_BDA)  
┃┣BonDriver_PlexPX_S.dll  
┃┣BonDriver_PlexPX_S.ini  
┃┣BonDriver_PlexPX_T.dll  
┃┣BonDriver_PlexPX_T.ini  
┃┃(BDASpecial-PlexPX)  
┃┗PlexPX.dll  
┣RecName(EDCB-work-plus-s\x86\Release\RecName)  
┃┗RecName_Macro.dll  
┣Setting  
┃┃(TVTestのch2ファイルからEDCB-work-plus-s-binのch2chset.vbsで作成)
┃┣BonDriver_PlexPX_S(PlexPX-S).ChSet4.txt  
┃┣BonDriver_PlexPX_T(PlexPX-T).ChSet4.txt  
┃┣ChSet5.txt  
┃┃(設定後等に自動生成)
┃┣EpgAutoAdd.txt(これが自動予約登録リスト)  
┃┣RecInfo.txt  
┃┣RecInfo2.txt  
┃┣Reserve.txt  
┃┗EpgData  
┣Write(EDCB-work-plus-s\x86\Release\Write)  
┃┣Write_Default.dll  
┃┗Write_OneService.dll  
┃(EDCB-work-plus-s\x86\Release)  
┣EdcbPlugIn.tvtp  
┣EpgDataCap_Bon.exe  
┣EpgTimer.exe  
┣EpgTimerSrv.exe  
┣EpgTimerTask.exe  
┣EpgDataCap3.dll  
┣SendTSTCP.dll   
┃(自動ツイート)  
┣PostRecStart.bat  
┣tweet.rb  
┣cacert.pem
┣tweet.txt(初回ツイート後自動生成)  
┃(自動エンコ)  
┗PostRecEnd.bat(名前によって動作が違うので注意)

ffmpeg(ffmpeg-hoge-hoge-shared\bin)(自動エンコ)
┣*.exe
┗*.dll

必要なランタイムを入れる

言語パッケージ リンク
Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x86) https://www.microsoft.com/ja-jp/download/details.aspx?id=8328
Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x64) https://www.microsoft.com/ja-jp/download/details.aspx?id=13523
Visual C++ 2015 再頒布可能パッケージ Update 3 https://www.microsoft.com/ja-jp/download/details.aspx?id=53587
Visual Studio 2017 の Microsoft Visual C++ 再頒布可能パッケージ(VS2017でビルドしたものを別の環境で使う場合) https://www.visualstudio.com/ja/downloads/ の下の方で展開すると出て来る
Microsoft .NET Framework 4 (スタンドアロンインストーラー) https://www.microsoft.com/ja-jp/download/details.aspx?id=17718

OSのユーザー名は半角英数字でないとエラーが出る場合があります。
32bit環境では(x64)は不要,64bit環境では(x86)(x64)両方必要。
余計な言語パックを入れても問題ない。

BDAドライバ(TVチューナーのドライバ)

①BDAドライバをDLして解凍(ここにないものはggって下さい)。

機種 リンク
PX-W3PERev1.3 http://www.plex-net.co.jp/product/px-w3pe/download.html
PX-W3PEV2.0 http://www.plex-net.co.jp/product/px-w3pev2/download.html
PX-W3PE4 http://www.plex-net.co.jp/product/px-w3pe4/download.html
PX-Q3PE http://www.plex-net.co.jp/product/px-w3pe/download.html
PX-PX-Q3U4 http://www.plex-net.co.jp/product/px-q3u4/download.html
PX-PX-W3U4 http://www.plex-net.co.jp/product/px-w3u4/download.html

②Driverフォルダ内のBDAフォルダを開き,OSのアーキテクチャに合ったインストーラを実行。
③スタートボタンを右クリ→デバイスマネージャ→サウンド,ビデオ,およびゲームコントローラにhogehoge BDA driverがあればおk。
④BS/CS用アンテナを使用していて他の機器で電源供給を行っていない場合は,必ずACアダプタを付けて,Utilityフォルダ内のLNBフォルダを開き,LNB_ON.regを実行して電源供給をする(ONの状態でアンテナの抜き差しをしないこと)。LNB_OFF.regでオフになる。再起動の必要はない。
⑤Utilityフォルダ内のISDB-T_LNA_Controlフォルダを開き,readmeを参考に調整(TVTestの設定後正常に映らない場合等に実行する)。BS/CSの調節機能はW3PEには無い(必要な場合は増幅器や減衰器等で外部から調節)が,Q3PEにはある。
※Tは地上波を表し,SはBS/CSを表す

放送波 標数
地デジ 20~30dB
BS 10~18dB
CS 7~18dB

BonDriver(radi-sh版BonDriver_BDA改)を入れる

※SはBS/CS,Tは地上波用のプラグインです。
https://github.com/radi-sh/BDASpecial-PlexPX/releases からバイナリを入手
②内蔵カードリーダでスクランブル解除を行う場合のみ,BonDriver_PlexPX_T.ini,BonDriver_PlexPX_S.iniの5行目辺りをM2_Dec=1に書き換え保存
https://github.com/radi-sh/BonDriver_BDA/releases からバイナリを入手
④BonDriver_BDA.dllをBonDriver_PlexPX_T.dll,BonDriver_PlexPX_S.dllにリネーム

Visual Studio Community 2017(コンパイラ)を入れる

https://www.visualstudio.com/ja/downloads/からインストーラをDL。
②ワークロードタブでC++によるデスクトップ開発と.NETデスクトップ開発にチェック,個別のコンポーネントWindows8.1 SDKとWindows10 SDK(最新)にチェックしてインストール。

TVTest

baseclasses入手

※この手順は不要なので飛ばしてください。
https://www.microsoft.com/en-us/download/details.aspx?id=8442 からGRMSDK_EN_DVD.iso(x86でおk)をDL
7-zip等で解凍しWinSDKSamplesフォルダを入手(他は不要)
③C:\hoge\baseclasses\WinSDKSamples のように設置(パスは自由)
④C:\hoge\baseclasses\export のようにフォルダを作る(パスは自由)
⑤以下コマンドを管理者で実行(batファイルとして残しておくと良い)

cd C:\③のパス\baseclasses\WinSDKSamples  
start /wait msiexec.exe /a WinSDKSamples_x86.msi targetdir="C:\④のパス\baseclasses\export"  

⑥C:\hoge\baseclasses\export\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclassesを入手し(他は不要),↓の③へ

TVTest0.9.0正式版(視聴・録画モジュール)ビルド手順

https://github.com/DBCTRADO/TVTest/tree/develop からClone or Download→Download Zipでソースを入手
②TVTest-develop.zipを解凍
※この手順は不要です。↑の⑥から(WinSDK v7.1の)BaseClasses/*.cpp,*.hTVTest-develop/src/BaseClassesにコピー
④TVTest-develop\src\DirectShowFilter\EVRCustomPresenter\EVRPresenterBase.hの18行目辺り3つとも_vistaを削除してCtrl+S
⑤TVTest-develop\src\TVTest_All.VS2013.slnをVS2017で開く
⑥上のDebugをRelease,Win32かx64を選択
⑦右のソリューション'TVTest_All.VS2013'右クリでソリューションの再ターゲット
⑧上のビルドからソリューションのビルド
========== ビルド: 10 正常終了,0 失敗,0 更新不要,0 スキップ ==========になればおk
C:\DTV\TVTest-develop\sdk\Samples\Samples.VS2013.slnも同様にビルド
========== ビルド: 15 正常終了,0 失敗,0 更新不要,0 スキップ ==========になればおk

CasProcessor.tvtp(CAS処理)ビルド手順(外付けカードリーダを使う方のみ)

https://github.com/dtvgit/CasProcessor からソースを入手
②CasProcessor.zipを解凍
③TVTest-develop/srcから以下の2ファイルを上書き
・TVTestPlugin.h
・TVTestInterface.h
④CasProcessor.cppの2170行目をInfo.ConnectPosition = TVTest::TS_PROCESSOR_CONNECT_POSITION_POSTPROCESSING;に修正
⑤CasProcessor.rc 11~13行目修正
AUTOCHECKBOX “EMM処理を行う(&M)”,IDC_PROPERTIES_ENABLEEMMPROCESS,8,20,80,9
RTEXT “使用する拡張命令(&E):”,IDC_PROPERTIES_INSTRUCTION_LABEL,8,38,72,8

⑥CasProcessor.slnをVS2017で開く→Release,Win32かx64を選択→ソリューションの再ターゲット→ソリューションのビルド

B25.tvcas(B25処理)ビルド手順(外付けカードリーダを使う方のみ)

※地デジ,BS/CS用。スカパープレミアムにはB1.tvcasが必要?
https://github.com/logue/TvCas からソースを入手
②TvCas-master.zipを解凍
③TvCas.slnをVS2017で開く
④上のDebugをRelease,x86かx64を選択
⑤右のソリューションエクスプローラのTvCasを右クリ→プロパティ→リンカー→インプット(入力)→モジュールデフィニション(定義)ファイルにTVCAS_B25.defを追加
⑥ソリューションの再ターゲット→ソリューションのビルド

TVTestVideoDecoder(MPEG2デコーダ)バイナリ入手

MSは8から有料化,DScalaerが0.9.0には非対応のため,これを使います。一時停止時にキャプれるのが便利。残像がすごいから嫌ってる人は設定をミスってる(tvtestの設定辺りを参照)
(つい最近出たのか,ストアアプリから入れられるMS公式の無料のMPEG2デコーダを入れたけど,サムネイルが表示できるってだけだった…)
https://github.com/DBCTRADO/TVTestVideoDecoder/releases からバイナリを入手
TVTestVideoDecoder_0.3.0.7zを解凍

TvtPlay(再生プラグイン)を入れる

録画したtsファイルを再生する時に早送りしたりするためのプラグインです。
https://github.com/xtne6f/TvtPlay からバイナリを入手
regsvr32 "C:\TvtAudioStretchFilter.axのパス"を管理者で実行
③成功しましたと出たらおk
TVTest側の設定でどうにかなったhttps://github.com/xtne6f/TvtPlay/tree/work-plus からソースを入手してVS2015でビルドして"\TvtPlay-work-plus\src\Release\TvtPlay.tvtp"と↑のバイナリを入れ替えると全画面表示や独自タイトルバーを使用しない場合にスマートになる。

TVCaptionMod2(字幕プラグイン)を入れる

字幕を観ないのなら入れなくて構いません。TVCaption,TVSubtitleと試しましたが一番フォントレンダリングが綺麗なTVCaptionMod2が今のところおすすめです。
https://github.com/xtne6f/TVCaptionMod2

TVTestの設定

TVTestでもEDCBのEPGデータを使用したりするので,先にEDCBから設定すると良い。
言われたとおりに進むとチャンネルスキャンをしてくれると思います。
最低限やっておくべきものだけ書きます。どんな項目があるのかざっと確認して好みの設定に変えて下さい。

一般

・デフォルトのBonDriver:指定したBonDriverを選択し,BonDriver_Pipe.dllを選択しておくと,上記エラーが出ることがないので便利。

表示

・最小化時タスクトレイに入れるにチェック(EDCBで使う場合,PC使用中で録画開始時にアクティブウィンドウになってしまうと厄介なので)
・抑止:3つともチェックしておくと視聴時にイラつかない

ステータスバー

・TvtPlayステータスバーにチェック

キー割り当て

・ チューナー選択や字幕プラグインのONOFF,キャプチャ又は字幕付き画像の保存,TvtPlayの早送り(後述)などにショートカットキーを設定しておくと便利。

映像

MPEG-2デコーダ:TVTest DTV Video Decoder
・映像レンダラ:EVR
※TVTest本体右クリックでフィルタのプロパティ→映像デコーダ(再生中に設定できる)
以下を設定後,動きのあるシーン等で残像感や縞模様が無いことを確認してください。
DXVA2によるデコードを有効にする:お好みに。ハードウェアのデコードは字幕プラグインの合成機能と相性が悪いのでちらつく場合はチェックを外す。(要再起動)
インスタレース解除(非DXVA時):インターレース解除を行わない(これを知らなかったがために有料化されたMSのデコーダを不正入手していた時期が私にもありました…)
インターレースフラグを設定する:外しといていいと思う

音声

・音声フィルタ:TvtAudioStretchFilter(TvtPlayの早送りなどに対応させるため)

録画

・保存先フォルダ:…をを押してお好みに設定してください(私の場合はユーザーのビデオフォルダ)
・ファイル名マクロ:▼を押してお好みに設定してください
・現在のサービスのみ保存する:チェックを外す
・字幕データを保存する:必要な場合はチェック(自動エンコして生tsを観ない場合チェックを外す)。今回は録画にtvtestを使うのでこの設定がEDCBの録画結果に反映される。
・データ放送を保存する:チェックを外した方が良い
・(EDCBで使う場合)保存プラグイン:Write_multi.dll,設定:SETセクションでWritePlugin=Write_OneService.dll

キャプチャ

・保存先フォルダ:…をを押してお好みに設定してください(私の場合はユーザーのピクチャフォルダのTVTestフォルダ)
・ファイル名マクロ:▼を押してお好みに設定してください
・大きさは表示されている大きさに設定(元の大きさだと例えば50%で表示中にキャプった時に1920x1080に引き伸ばされて保存されてしまう)
・保存形式:JPEGじゃないとパンクしますが画質に拘るのならPNGにしておくと良いでしょう。
※キーが割当されていれば長押しで連写出来たり,プラグインでaviutlと連携して綺麗にキャプれたりするが,それらをやっていると番組を落ち着いて観られないので私はffmpegで全編切り出している。詳しくは自動エンコバッチのサンプルの項を参照。

チャンネルスキャン

自動でチャンネルスキャンされなかった場合は手動で行ってください。S(BS/CS)とT(地デジ)1つづつスキャンすれば全てのチューナーに反映されます。

EPG/番組情報

EPG情報をファイルに保存する:チェックを外す(EDCBで使う場合)
・EpgDataCap_BonのEPGデータを利用する:チェックを付ける(EDCBで使う場合)
EPGデータのフォルダ:EDCBフォルダ\Setting\EpgDataに指定(EDCBで使う場合これによりTVTest側のEPG取得が不要になる)
・ロゴデータをファイルに保存する:チェックするとチャンネル切り替え時等に表示されるロゴデータを入手できる。地デジは各チャンネルごとに切り替えて,BS/CSはBS1にして放置すると取得できる。
BMP形式のロゴを保存する場合はロゴデータをファイルに保存するのチェックを外しておくこと(生データ形式ARIB-PNG形式なので互換性がありません)。

プラグイン

・TVCaptionMod2.tvtpの設定
映像への字幕合成機能を使う:チェック(要再起動)
外字テーブル名:WindowsTV丸ゴシックを使う場合は!typebank(詳しいところはreadme参照)
描画方式:3-映像と合成(これでTVTest本体のキャプチャ機能でキャプれる)
・TvtPlayの設定
TVTestのPluginsフォルダのTvtPlay.iniをテキストエディタ等で開き,readmeを参考にシークや早送り再生を自分好みに編集。8倍速まで可能(宇宙人向け)。
TsTryGaplessPause=1ギャップなしで一時停止,再生する
RaiseMainThreadPriority=1早送り時にdropがあった際応答しなくなるのを回避
↓以下を参考にしてみると便利

SeekItemOrder=99
StatusItemOrder=99
IconImage=
SeekA=-60000
SeekB=-30000
SeekC=-15000
SeekD=-5000
SeekE=4000
SeekF=14000
SeekG=29000
SeekH=59000
StretchA=100
StretchB=120 
StretchC=150 
StretchD=200 
StretchE=50 
; ボタン0の位置にボタンデザイン0を表示させ,ファイルを開く動作を指定
Button00=0,Open
; ボタン4の位置に"-60"と表示させ,シークAを指定
Button04='-'6'0,SeekA
Button05=;'-'3'0,SeekB
Button06='-'1'5,SeekC
Button07='-' '5,SeekD
Button08=6,Pause
Button09='+' '5,SeekE
Button10='+'1'5,SeekF
Button11=;'+'3'0,SeekG
Button12='+'6'0,SeekH
; ボタン15の位置にボタンデザイン16,右クリで等倍速,左クリで倍速一覧(%)がポップアップ
Button15=16,StretchZ,StretchPopup

https://github.com/xtne6f/TvtPlay/blob/work/src/Buttons.bmpにボタンデザインの一覧がある。

TSプロセッサー(外付けカードリーダを使う方のみ)

・TSプロセッサー:CasProcessor
・デフォルトモジュール:B25.tvcas
・デフォルトデバイス:SmartCard
・デフォルトフィルター:ICカードリーダ名(私の場合ACS ACR39U ICC Reader 0)

TVTest.exeをタスクバーに登録

①TVTestを起動しタスクバーにピン留めする
%AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\に移動
③TVTestのショートカットのプロパティを開き,リンク先に/tvtplayを追加

録画したtsファイルをダブルクリックで再生

①tsファイルをプログラムから開く→その他のアプリ→TVTest.exeで関連付ける
レジストリエディタでHKEY_CURRENT_USER\Software\Classes\Applications\TVTest.exe\shell\open\commandにアクセス
"C:\TVTest.exeのパス" /nd /d BonDriver_Pipe.dll "%1"に変更
/ndでTSプロセッサーを無効。録画時にスクランブル解除は済んでるからね。
※因みに拡張子.mp4も再生できるよ。

トラブルシューティング

※PCの電源を入れたままアンテナの抜き差しをするとチューナーが壊れるのでやめましょう
※以下を確認しても解決しない場合は一から環境構築をやり直すか,OSのクリーンインストールを試す。

起動しない

・言語パックは足りてるか
・欠損しているバイナリはないか
・パス等が間違っていないか
・落としたビルド済みソースを使っていないか
・OSのアップデートはなかったか

0dB,0Mbps,D(ドロップ)の値が増えすぎる,ブロックノイズだらけ

・アンテナの向きが正しいかどうか
・給電の設定は正しいか,給電器が壊れてないか
・感度調整は正しいか(BS/CS側のdBが足りず,抜けそうなくらいギリギリまで同軸ケーブルを緩めると映る場合は減衰器,混合波の場合は分波器を挟むと治るかも?)
・各部緩んでいないか
・PCIExの帯域が足りているか
デコーダは入れてあるか
・再生オフになっていないか

S(スクランブル)の値が増える

・内蔵カードリーダのハード側の問題で30分で5桁くらいの値になることがあるが,その場合は外付けカードリーダを使うしかない。
B-CASカードがしっかり刺さっているか
CPU使用率に余裕はあるか

エラーメッセージ

・BonDriverの初期化ができません:選んだチューナーに空きが無いので空いてるチューナーやPipeを選べば問題ない。
・DirectShowの初期化ができません。MPEG-2デコーダフィルタをフィルタグラフに追加できません。:使えるデコーダを入れましょう。因みにMSのデコーダwindows8から有料化されたので別のものを使いましょう。
・音声デコードフィルタがうんたらかんたら:regsvr32 "C:\TvtAudioStretchFilter.axのパス
・何も書いてないポップアップウィンドウ:私の場合は起動中に外付けカードリーダのUSBポートの位置を変えてしまった時に起こった。OSを再起動すること。
・カードリーダに接続できません。Windowsのエラーメッセージ :SCARD_W_UNRESPONSIVE_CARD: スマート カードがリセットに応答していません。:B-CASの接触不良なので少し抜いたり奥まで挿す。又は金属部が正しく接触しているか(裏返し?)。

EDCB

xtne6f EDCB-work-plus-sビルド手順

※32bitの場合は次項のバイナリの方を使えばビルドしなくても結構ですが,readmeや録画後バッチサンプルが必要なのでDLして解凍だけはしておきましょう。
https://github.com/xtne6f/EDCB からソースを入手
②EDCB-work-plus-s.zipを解凍
③DocumentフォルダのEDCB_ALL.VS2015.slnをVS2017で開く
④上のDebugをRelease
⑤右のWrite_AVIVOを右クリで削除
⑥ソリューション'EDCB_ALL.VS2015.sln'を右クリ→ソリューションの再ターゲット(この時SDKのバージョンを記録しておく)
⑦ソリューション'EDCB_ALL.VS2015.sln'に連なる各プロジェクトのプロパティ内のSDKのバージョンが8.1とかではなく↑で記録したもの(10.0.15063.0等)になっているか確認。手動で書き換えても良いが,どうやらプロパティを開くまくったり時間を置いたり再ターゲットを繰り返したりすると各プロジェクトに行き渡るっぽい(バグかな)。再ターゲットの終了: 完了 10,失敗 0,スキップ 0になればおk。
⑧上のビルドからソリューションのビルド。ビルド: 11 正常終了,0 失敗,0 更新不要,0 スキップ ========== になればおk。
※EpgTimerのプロジェクトのプロパティのリソースにEDCBのアイコンがある。

EDCB-work-plus-sバイナリ入手

※TVTestのチャンネルスキャン情報をEDCB用に変換するch2chset.vbs,TVTestとEDCBの連携用EdcbPlugIn.ini,Write_Multi.dll,Write_OneService.dll等が入っている。
https://github.com/xtne6f/EDCB/releases からEDCB-work-plus-s-bin.zipを入手して解凍

チャンネル設定(EpgDataCap_Bon.exe+EpgTimerの場合)

①EpgDataCap_Bon.exeを2つ起動。
②それぞれS,Tを選択しチャンネルスキャンをする。外付けカードリーダを使う場合Scrambleの値が増えていくがチャンネルスキャンには影響はない。時間がかかるのでその間にPC内のいかがわしい画像等を整理しましょう。
③終わったら目的のチャンネルが表示されていることを確認し閉じる
BS1,BSプレミアム等が検出できない場合は,BonCtrl.iniのChChgTimeOut ServiceChkTimeOutでそれぞれの値を15~20程度に変更して再度スキャン。(チャンネルスキャンのタイムアウト値を大きくする)(人柱版10.61.1以降)

チャンネル設定(TVTest.exe+EpgTimerの場合)

※上手くいかない場合は↑の方法でやって下さい。スクランブル解除が出来なくてもチャンネルスキャンは行えます。
①EDCB-work-plus-s-binのch2chset.vbsにTVTestフォルダのch2ファイルをD&Dし,EDCBのSettingフォルダに設置
②EdcbPlugIn.iniを開き,以下のように指定

EdcbFolderPath="C:\EDCBのフォルダパス"
RecNamePrefix=#$SID16$#

EpgTimerSrv設定

EpgTimer.exeを起動→設定ボタン→EpgTimerSrv設定
※これらの設定を終えてから,EPG取得を行って下さい。

基本設定

・録画用アプリのexe:TVTest.exeのパスを指定
コマンドライン引数:最小化-tray(タスクトレイに格納された状態で起動),非視聴時-nodshow(DirectShowを初期化しない,結果的に再生オフ)
・録画保存フォルダを指定。私はC:\DTV\tsにしている
・BonDriver:SとVそれぞれチューナー数をW3PEなら2,Q3PEなら4に指定

EPG取得

EPG取得開始時間:録画に重ならない好きな時間を最低でも1日1回は指定

録画動作

・録画,EPG取得終了後のデフォルト動作:自動エンコしたり外出先からアクセスする場合は何もしない,自動エンコしない場合はスタンバイ
・ドロップログ,番組情報を出力する:チェックを外す ・録画マージンのデフォルト:低スペでなければ前後共0に変えても大丈夫
・プロセス優先度:通常以上又は心配なら高に設定(リアルタイムはオススメしない)。
・番組情報を出力する:自動エンコバッチを使用する場合はチェック(使うので)

予約情報管理

録画時のファイル名にPluginを使用する:チェック
設定:readmeを参照しお好みに。因みに↓はZtoHで半角に,Head10$SubTitle2$が意図しないものになった場合ファイル名が長くなり過ぎるのを防いでいる。

$SDYY$$SDMM$$SDDD$_$ZtoH(Title)$$Head10~(ZtoH(SubTitle2))$.ts

その他

EPG取得後も番組情報を1日前まで保存する(結構便利)
・ボタン表示
タブの位置に表示:チェック(よりスマートになる)

EpgTimerの設定

どんな項目があるのかざっと確認して好みの設定に変えて下さい。
人柱版10.66等とは少々設定GUIが違いますが,分かりやすくなっていると思う。
EPG取得や番組表の設定辺りで番組名がズラズラならんでチェックボックスがある所は,マルチ編成(連番や同じ名前)になってるものは一番上を残して削除したり,絶対に観ないチャンネルや契約していないチャンネルを削除しても良い。

動作設定

・スタートアップEpgTimer.exeのショートカットを作成(常駐していないと録画できません,設定変更後はタスクトレイに残らないよう一度終了してからexeを再起動してください)
・テーマを適用する:チェックを外す(軽くなる)
・EpgTimerSrv設定は後述

番組表

・グラデーション表示を行う:2つともチェックを外す(軽くなる)

外部アプリケーション

・TVTestのパスを通しておく(視聴予約時に使用)

EDCBの使い方

例1 アニメ全録

検索キーワードに半角スペース,ジャンル絞込で国内アニメを追加,映像サービスのみ,検索,自動予約登録条件に追加

例2 今期アニメ毎週録画

正規表現モードにチェック,検索キーワードに(うらら迷路帖|けものフレンズ|幼女戦記|クズの本懐~)など,ジャンルを国内アニメ,チャンネルをTBS,テレ東,MX,検索(余計な番組が表示されてしまう場合は,時間指定やnotキーワードで工夫する),自動予約登録条件に追加
※基本的に市販のレコーダーにあるような連ドラ機能はない代わりに,検索で代用します(この方が正確)。
※自動予約登録に番組名を1つづつ登録すると重くなるので,正規表現で局や期毎に分けて正規表現を使うと良い。
※録画後実行batを使う場合は登録忘れに注意。
※人柱版10.66ではアルファベットは大文字,スペースが入るものはスペースの前か後のワードで頑張らないといけなかった
※録画モードで視聴予約を選ぶこともできる(最近気づいた)
※今回はTVTestで録画しているので,録画中のtvtestを右クリックで再生オフを外せば見る+録画を1チューナーでできる。EpgDataCap_Bon.exeのviewよりも使いやすい。
※TVTestを使って録画すると,録画済み一覧が黄色と赤で埋め尽くされてしまうが,TVTestのTSプロセッサーを無効にした状態で正常に再生できれば問題はない。

外出先から予約・視聴

たまにしか使わないのであればchromeリモートデスクトップが一番お手軽だろう。
PCの性能とチューナー数が許す限り何番組同時に録画しても視聴してもエンコしても大丈夫だ。ここが市販レコーダーとの差である。
頻繁にロケフリを利用するならばTvRemoteViewer_VBを利用したりリモート用にVPNで環境を作ると良いだろう。

録画前後実行bat

xtne6f版でTwitter連携する

https://www.axfc.net/u/3803947.zip←斧へ参考用バイナリを置いておきました。

Ruby環境を構築する

http://rubyinstaller.org/downloads/ のRubyInstallersからインストーラーをDL。私はRuby 2.3.3 (x64)を選んだ。
②↑をインストール。「Rubyの実行ファイルへ環境変数PATHを設定する」「.rbと.rbwファイルをRubyに関連づける」にチェック。
③インストールされたかruby -vで確認。rubyのバージョンみたいなのが出てくればおk
http://rubyinstaller.org/downloads/ のDEVELOPMENT KITから適切なDevelopmentKitをDL。
⑤↑を実行。C:\devkit\に展開すること。
⑥以下のコマンドを実行してインストール。INFOっぽいのがちょろっと出てくればおk。

cd C:\devkit\  
ruby dk.rb init  
ruby dk.rb install  

Twitterのアプリケーション登録

①予め通知用のTwitterアカウントを作っておく。
②↑と本垢等でFFになって,スマホで↑のプロフィールから投稿通知を受け取るように設定。
https://dev.twitter.com/apps でCreate New Appからアプリケーション登録を行う。
Nameはtwitterクライアント内でクライアント名として表示されるので中二病患者はお気をつけください。
Website,Callback URLは今回使わない情報なので嘘でも構わない。
Access levelはRead and writeに設定。

録画開始時に番組内容をツイートするコマンド

gem install twitterTwitter API gemをインストールする。
https://curl.haxx.se/ca/cacert.pem からSSL証明書をDL。右クリからcacert.pemという名前を付けてEpgTimerSrvがあるフォルダに保存。
テキストエディタで以下コマンドを記述。https://dev.twitter.com/appsのKeys and Access Tokensからコピペしtweet.rbなどのファイル名でEpgTimerSrvがあるフォルダに保存。

#!/usr/bin/env ruby  
require "twitter"  
require "csv"  
  
client = Twitter::REST::Client.new do |config|  
  config.consumer_key        = 'Keys and Access Tokensからコピペ'  
  config.consumer_secret     = 'Keys and Access Tokensからコピペ'  
  config.access_token        = 'Keys and Access Tokensからコピペ'  
  config.access_token_secret = 'Keys and Access Tokensからコピペ'  
end  
  
talk = CSV.read( ARGV[0] )  
client.update( talk[rand(talk.length - 1)][0].encode("utf-8") )  

テキストエディタで以下コマンドを記述し,それぞれのパスを自分の環境に合わせる。マクロはReadmeを参考に自分好みに変更すると良い。録画開始時に実行したい場合(readme_mod参照)は"PostRecStart.bat"という名前でEpgTimerSrvがあるフォルダに保存。
ハッシュタグ自動判別版
EDCBから受け取ったチャンネル名からハッシュタグを判別し,番組タイトルをテキストファイルに上書き保存し,rubyでそのテキストファイルを読ませてツイートという流れになっている。
if not defined %HASHTAG% set HASHTAG=$ServiceName$でリストにない場合はハッシュタグではなくそのままチャンネル名を入れるようにした。

::ChSet5.txtを参考にしながらチャンネル名を,Twitterを漁りながらハッシュタグを編集する。ハッシュタグ機能なんて要らないよって場合はツイートの部分の3行だけ残して%HASHTAG%を$ServiceName$にすると良い。
::BS
if $ServiceName$ equ NHKBS1 set HASHTAG=#nhkbs1
if $ServiceName$ equ NHKBSプレミアム set HASHTAG=#nhkbsp
if $ServiceName$ equ BS日テレ set HASHTAG=#bsntv
if $ServiceName$ equ BS朝日1 set HASHTAG=#bsasahi
if $ServiceName$ equ BS-TBS set HASHTAG=#bstbs
if $ServiceName$ equ BSジャパン set HASHTAG=#bsjapan
if $ServiceName$ equ BSフジ・181 set HASHTAG=#bsfuji
if $ServiceName$ equ BS11イレブン set HASHTAG=#bs11
if $ServiceName$ equ BS12トゥエルビ set HASHTAG=#bs12
::地デジ
if $ServiceName$ equ NHK総合1・東京 set HASHTAG=#nhk
if $ServiceName$ equ NHKEテレ1東京 set HASHTAG=#etv
if $ServiceName$ equ tvk1 set HASHTAG=#tvk
if $ServiceName$ equ チバテレ1 set HASHTAG=#chibatv
if $ServiceName$ equ 日テレ1 set HASHTAG=#ntv
if $ServiceName$ equ テレビ朝日 set HASHTAG=#tvasahi
if $ServiceName$ equ TBS1 set HASHTAG=#tbs
if $ServiceName$ equ テレビ東京1 set HASHTAG=#tvtokyo
if $ServiceName$ equ フジテレビ set HASHTAG=#fujitv
if $ServiceName$ equ TOKYO MX1 set HASHTAG=#tokyomx
::その他
if not defined HASHTAG set HASHTAG=$ServiceName$

::ツイート
echo $SDYY$/$SDM$/$SDD$($SDW$) $STHH$:$STMM$~$ETHH$:$ETMM$ $Title$ %HASHTAG% > "C:\EpgTimerSrvのフォルダ\tweet.txt"
set SSL_CERT_FILE=C:\EpgTimerSrvのフォルダ\cacert.pem
ruby "C:\EpgTimerSrvのフォルダ\tweet.rb" "C:\EpgTimerSrvのフォルダ\tweet.txt"  

↓簡易版

echo $SDYY$/$SDM$/$SDD$($SDW$) $STHH$:$STMM$~$ETHH$:$ETMM$ $Title$ $ServiceName$ > "C:\EpgTimerSrvのフォルダ\tweet.txt"
set SSL_CERT_FILE=C:\EpgTimerSrvのフォルダ\cacert.pem
ruby "C:\EpgTimerSrvのフォルダ\tweet.rb" "C:\EpgTimerSrvのフォルダ\tweet.txt"  

↓こんな感じになる

↓下の自動エンコバッチに組み込んだ場合の一例

ts抜きして全自動でffmpegエンコードGoogleフォトに無限保存する

この項が肥大化し過ぎたので別記事に分けるかも。
https://www.axfc.net/u/3804859.zip←斧へ参考用バイナリを置いておきました(更新はする気無いですorz)。
全体的な流れとしては,

録画終了
↓
TSとかmp4を古い方から自動削除
↓
音声形式を見て音ズレしないように適切なオプションを設定
↓
ffmpegで補正処理+QSVにしてはマシなエンコ
↓
ファイルサイズが10GB以下ならうp,10GBより大きくてGoogleフォトに保存出来なかったりエラーが起こったらTwitterで警告

ってのを放って置いても大丈夫なくらい完全自動で動作させようってのがこのバッチのポリシー。

特徴

大層なものではないが,色々と試行錯誤をしたので見てほしいのだ!!
・勿論外出先から録画番組を見られる。
・無限に保存できることで「家族に勝手に番組消された…」「この番組とっておきたいけどHDDの容量が…」なんて言わなくて済む。
・補正処理により元の映像よりも綺麗になる。特に地デジは汚いから差が顕著に現れる。

・市販のレコーダーのリアルタイムエンコードより圧縮率を高められる。大抵ファイルサイズが生tsに比べ約1/5~1/15になる(30分アニメだと約200~500MB,平均約300MB)。
エンコード時間は番組の約1/3~1/2(i5-6500)。オプションを妥協すれば短くなる。
・放置し過ぎて注目番組の録画を忘れたりするくらい放って置いても完全自動で動作するようになっている。音ズレしちゃう時は手動で編集して~みたいな仕様ではない。
Googleフォト自体がh265非対応なため,長~い番組やコントラストや動きが大きい番組はどうしてもサイズが大きくなってしまう。Backup and Sync登場でスマホ版と同じく2GB制限が廃止されたので10GBまでうp出来る(歓喜)。Google Photos Uproderには2GB制限があるため手動でうpしてもらうしかない。ただ紅白とかはGoogleフォト自体の制限である10GBを超えてしまいうpすら出来ないかも?
・確実な動作のために今のところCMカット機能は実装しない(ウォーターマークが無かったり突然消えた場合や提供&エンドカードはカットされるので…現在思案中)。

・基本的にPCを起動しっぱなしにすることが前提。スリープや休止状態では動作しませんがロック中は問題なく動作します。
・特にQSVを使うとマザボチップセットがかなり熱くなるのでしっかり冷やして下さい。ファンやヒートシンクを増設したりグリスを塗り替えるなどしてしっかり冷やして下さい。大事なことなので二回言いました。

事前準備

①管理者権限が必要ないディレクトリ(program filesとか以外)に"一時的にmp4を吐き出すフォルダ",“Backup and Sync用フォルダ”,“10GB以上用フォルダ”(名前はお好みに)計3つの空フォルダを作成。
②EDCBの設定で番組情報を出力するにチェック
③xtne6f版recname_macro.dll等で半角リネーム(ZtoH)する(全角だとffmpegがエラーを吐くので)。$SubTitle2$を使う場合はHead文字数長~いサブタイトルがヒットしてしまった時にファイル名が長くなり過ぎるのを防止する(googleフォトが認識するにも関わらずうp出来ないっぽい。情報を探しても無かった)。

$SDYY$$SDMM$$SDDD$_$ZtoH(Title)$$Head10~(ZtoH(SubTitle2))$.ts

https://photos.google.com/appsからBackup and SyncをDLしてインストール(以前のアップローダを使っていた場合は勝手に置き換わる形になる)。
・"Backup and Sync用フォルダ"のみを指定
・"高画質(無料,容量無制限)“を選択
・"写真と動画をgoogleフォトにアップロード”:チェック
・削除するアイテム:他の場所からアイテムを削除しない
・マイドライブをパソコンに同期:チェックを外す
・共有フォルダからアイテムを削除する際に警告を表示する:チェックを外す
・システム起動時にバックアップと同期を開く:チェック
※家族と共有する場合は,家族用Googleアカウントでログインするか,“Googleフォト"フォルダとフォルダ分け後のフォルダを家族との共有フォルダにすると良い。ただし他人とリンクを共有したらOUT。
https://ffmpeg.zeranoe.com/builds/ からffmpeg公式の最新版バイナリを入手(Version:お好きな方をどうぞ,Architecture:OSに合わせる,Linking:お好みで→Download FFmpeg)

自動エンコバッチ本体

::ファイル名をタイトルバーに表示
title "$FileName$.ts"をエンコード中...
::ffmpeg.exeがあるフォルダのパス
set FFFOLDERPATH=C:\DTV\ffmpeg
::一時的にmp4を吐き出すフォルダのパス
set MP4FOLDERPATH=C:\DTV\MP4
::backup and sync用フォルダのパス
set BASFOLDERPATH=C:\DTV\backupandsync
::10GB以上用フォルダのパス
set OTHERFOLDERPATH=C:\Users\Shibanyan\Desktop
::ffmpegのオプション
set FFOPTION=-vf yadif=0:-1:1,pp=ac,scale=1280:720:flags=lanczos+accurate_rnd -global_quality 27 -c:v h264_qsv -preset veryslow -g 300 -bf 16 -refs 16 -b_strategy 1 -look_ahead 1 -look_ahead_depth 100 -pix_fmt nv12
::mp4,TS,番組情報,エラーログファイルの自動削除時にそれぞれ残す数を指定
set AUTODEL=10

::mp4,TS,番組情報,エラーログファイルを日付が古い順に列挙し%AUTODEL%個以上あれば削除(運用時はdelの前のコメントを外して下さい)
for /f "skip=%AUTODEL% delims=" %%a in ('dir "%BASFOLDERPATH%\*.mp4" /b /o-d /s') do (
  del "%%a"
)
for /f "skip=%AUTODEL% delims=" %%a in ('dir "$FolderPath$\*.ts" /b /o-d /s') do (
  del "%%a"
)
for /f "skip=%AUTODEL% delims=" %%a in ('dir "$FolderPath$\*.txt" /b /o-d /s') do (
  del "%%a"
)
for /f "skip=%AUTODEL% delims=" %%a in ('dir "$FolderPath$\*.err" /b /o-d /s') do (
  del "%%a"
)

::番組情報の中に"デュアルモノ"という文字列があれば環境変数"FFOPTION"に"-filter_complex channelsplit"を加える
findstr "デュアルモノ" "$FilePath$.program.txt"
if %ERRORLEVEL% equ 0 (
  set FFOPTION=%FFOPTION% -c:a aac -b:a 128k -filter_complex channelsplit
) else if %ERRORLEVEL% equ 1 (
  set FFOPTION=%FFOPTION% -c:a aac -b:a 256k
)

::ループ処理用
set CNT=0
:top
::録画の開始終了でビジーなので負荷を減らすために10秒待つ
timeout /t 10

::エンコ
"%FFFOLDERPATH%\ffmpeg.exe" -y -i "$FilePath$" %FFOPTION% -map 0:p:$SID10$:0 -map 0:p:$SID10$:1 "%MP4FOLDERPATH%\$FileName$.mp4"
::エンコ後のファイルのサイズを環境変数"MP4SIZE"に指定
for %%i in ("%MP4FOLDERPATH%\$FileName$.mp4") do (
  set MP4SIZE=%%~zi
)
::ファイルサイズが0バイトなら失敗とみなしループ(QSVのトランスコードに失敗すると"Error during encoding: device failed (-17)"が返される仕様により稀にエンコに失敗してしまうので,ループさせて復旧を試みる)
if %MP4SIZE% equ 0 (
  goto :roop
)
::環境変数"MP4SIZE"の下1桁を切り捨て(大き過ぎる数字は32bitで計算出来ないため),10GB以下ならbackup and sync用フォルダ,大きいなら10GB以上用フォルダへ(10GB以上はうp出来ない)(1073741824=10737418240/10,10737418240byte=10GB)(40GBとかは想定していない)
if %MP4SIZE:~0,-1% leq 1073741824 (
  call :backupandsync
  exit
) else if %MP4SIZE:~0,-1% gtr 1073741824 (
  call :otherfolder
  exit
)

:roop
::10回までループし,それでもダメなら諦めて無限ループを回避
set /a CNT=CNT+1
if %CNT% geq 10 (
  goto :err
) else (
  goto :top
)

:backupandsync
::エンコしたファイルが10GB以下ならbackup and sync用フォルダに移動
move "%MP4FOLDERPATH%\$FileName$.mp4" "%BASFOLDERPATH%"
::EDCBが順番に1つづつバッチ処理を行う仕様上詰まってしまうので運用時はこのようにpauseをコメントアウトするか消してください
::pause
exit /b

:otherfolder
::エンコしたファイルが10GBより大きいなら10GB以上用フォルダに移動
move "%MP4FOLDERPATH%\$FileName$.mp4" "%OTHERFOLDERPATH%"
::10GBより大きいので手動でうpする必要があることをツイートで報告
::echo $FileName$.mp4は10GB以上なので諦めてね! > "C:\DTV\EDCB\ffmpeg.txt"
::set SSL_CERT_FILE=./cacert.pem
::ruby "C:\DTV\EDCB\tweet.rb" "C:\DTV\EDCB\ffmpeg.txt"
::pause
exit /b

:err
::エンコに失敗したファイルを10GB以上用フォルダに退避
move "%MP4FOLDERPATH%\$FileName$.mp4" "%OTHERFOLDERPATH%"
::予期せぬエラーが発生したことをツイートで警告
::echo $FileName$.tsのエンコードを10回トライしてもダメだったよぉ。10GB以上用フォルダに退避させておいたから早く助けてあげて!! > "C:\DTV\EDCB\ffmpeg.txt"
::set SSL_CERT_FILE=./cacert.pem
::ruby "C:\DTV\EDCB\tweet.rb" "C:\DTV\EDCB\ffmpeg.txt"
::pause
exit

テキストエディタ等で上記スクリプトをコピペ(ラーメンプログラムですみません…)。ツイート機能についてはTwitter連携の項を参照(必要ならばコメント::を外す)。
②上から4つまでのsetを自分の環境に合わせてそれぞれ変更(“"は環境変数使用時に補完されるので付けないで下さい)
③以下の3つの条件に"当てはまらない"場合は5番目のset FFOPTIONを以下のように変更
Intel Core i又はxeon(AMDはQSVが使えない)(少々重い処理があるため低スペックだと詰まっちゃう?)
・Haswel以降(h.264のLA-ICQを使うため)
・グラボを付けている場合Windows8以降のOS(それ以前だと内蔵GPUを併用できないから)

↓(IvyBridge)先行探索でない固定品質(ICQ)

… -look_ahead 0 …

↓(~SandyBridge,AMD,Windows8未満でグラボを付けている場合)x264ソフトウェアエンコードする(veryfastくらいが高圧縮且つ現実的なエンコ時間かと)(crf値を色々変えてみて画質とサイズのバランスを決めて下さい)

… -c:v libx264 …-crf 25 … -pix_fmt yuv420p …

↓(低スペ)ppフィルタはfa<acの順で,presetはveryfast<faster<fast<medium<slow<slower<veryslowの順でエンコ時間が大きくなる。品質・圧縮率とエンコ時間はトレードオフであることに注意。

… -vf yadif=0:-1:1,pp=ac … -preset veryfast …

④EpgTimerSrvがあるフォルダに,誤作動防止の為できれば"PostRecEnd.bat"以外の名前で,ANSI(Shift_JIS)形式で保存(日本語文字列を参照して検索する処理があるため。UnicodeUTF-8はダメ)。
④'(やってもやらなくても良い)自動判別は一応やったがとてもシビアな処理が必要になってしまうのでお蔵入りに。やりたい人はバッチを2つにし自動予約登録で分けてくれ。
アニメ・映画は基本的に24fps制作なので間引きする(24fps化)オプション。GOP長も適切に変更する。ただし30fps制作アニメ(RWBYとか)に注意。

… -vf yadif=0:-1:1,decimate,pp=ac … -g 240 …

長~い音楽番組は10GBを超えてGoogleフォトに保存できない場合があるので,品質を落とす。ダメならもっと落とす。

… -global_quality 29 …

⑤※誤爆注意※mp4,TS,番組情報,エラーログファイルの自動削除時にそれぞれ残す数を指定(デフォルト=10)(タスクスケジューラを使わず,自動エンコバッチ内で古いファイルからちょくちょく消せるようにした)
⑥EDCBの自動予約登録の録画後実行batに自動エンコバッチのパスを通す(既に予約一覧に表示されているものにも適用するため一度予約を削除してパスを通したら"自動予約登録条件を変更"を押下する)。
⑦とりあえずなんか録画してみて正常に動くか確認(“録画後実行bat"なので途中で録画を終了させてしまうと動作しません)。
https://drive.google.com歯車→設定→Googleフォトフォルダを作成するにチェックしてあげれば,自動でGoogleフォトの動画がGoogleDrive内のフォルダに表示される"パソコン"タブの中に"Backup and Sync用フォルダ"が現れる。前述の通り正しく設定してあればローカル側で削除してもクラウドにはしっかり残ってくれる。個別に選択して"マイドライブに追加"するか,左で必要な階層まで展開しディレクトリごとマイドライブにD&Dして(同期は引き続き行われます)から,検索バーで番組名検索してフォルダ分けができる。
※2017年8月19日現在,2017年7月19日(その数日前にBackup and Syncがリリース)以降にGoogleドライブにうpされた動画が720p又は全ての解像度でストリーミング出来なくなっています。一応YouTubeの推奨設定でエンコしてみましたが変わりませんでした。こうなる前からGoogleフォトの高画質設定でうpしている動画はGoogleフォトで直接観た方が快適に観られるので,Googleフォト側で定期的にアルバム分けするなどして対応してください。
※10GBより大きいファイルはGoogleフォトの仕様上うp出来ません。
Googleフォトの詳しい仕様や使用方法はhttps://support.google.com/photos参照。
※ドライブは特に反映が遅く,更には再生できないトラブルがたまにあるのでそういう場合はフォトを使うと良い。最近は検索も出来るようになったしまあ無料だからね。
※一応生TSもhttps://photos.google.com/でうpできる。RecName_Macroで指定するかren *.ts *.m2tsなどで拡張子を変更してうpすればよい。ただし「低スペで自動エンコが出来ないからそのままうpしよ」という考えの方は,Googleに対して迷惑でしかない(onedriveの容量無制限廃止はDTV民が原因らしい…)し,そのスペックでは高負荷に耐えられず確実にブラウザが落ちるので諦めましょう。

ffmpegオプションの解説

ffmpegの構文の基本

"ffmpeg.exeのパス" 入力オプション -i "入力ファイルパス" 出力オプション フィルタ "出力ファイルパス"

自動エンコバッチ内で最終的にこのような形に補完される。私的に今のところffmpegのh264_qsvで一番高画質で高圧縮な設定だと思うんだ(キリッ)

::エンコ
"%FFFOLDERPATH%\ffmpeg.exe" -y -i "$FilePath$" -c:a aac -b:a 256k -vf yadif=0:-1:1,pp=ac,scale=1280:720:flags=lanczos+accurate_rnd -global_quality 27 -c:v h264_qsv -preset veryslow -g 300 -bf 16 -refs 16 -b_strategy 1 -look_ahead 1 -look_ahead_depth 100 -pix_fmt nv12 -map 0:p:$SID10$:0 -map 0:p:$SID10$:1 "%MP4FOLDERPATH%\$FileName$.mp4"

それぞれのオプションの解説
"%FFFOLDERPATH%\ffmpeg.exe"環境変数FFFOLDERPATHにffmpeg.exeがあるフォルダのパスが補完される。
-yyesnoで聞かれたら自動でyesを選択。要するに同じファイル名のものがあったら上書きする。
-i "$FilePath$"“$FilePath$"を読み込む。EpgTimerから受け渡されるマクロについてはReadme_mod.txt参照。
-c:a aac -b:a 256k音声エンコーダはデフォルトのAAC,256kbps
-vf yadif=0:-1:1フィルタオプション。インターレース解除(bwdifよりyadifの方が若干綺麗で低サイズだった)を行う。これをしないと縞々になっちゃうよ><
-vf yadif=0:-1:1,decimateフィルタオプション。インターレース解除フィルタと組み合わせることで自動で重複したフレームを間引きしてくれる(24fps化。アニメや映画は24fps制作なので行ったほうが動きが滑らかになるが,テロップは30fps制作なのでガクガクする。単純計算で0.8倍のファイルサイズになる。処理速度への影響が大きい。)
-vf pp=acフィルタオプション。デノイズとデブロッキング(ソースの汚い部分を滑らかにしてくれるので"地デジの場合はソースより綺麗"になり,ファイルサイズも削減できる。市販品だとノイズリダクションに近い?)
-vf scale=1280:720:flags=lanczos+accurate_rndフィルタオプション。1280x720にリサイズするときにLanczosというリスケールアルゴリズムを使用,正確な丸め処理を行う(よく分からんけどこれが一番輪郭が綺麗だった)
-global_quality 27 -look_ahead 1先行探索固定品質27(値を大きくするほど低品質低ビットレート低サイズ)(値が1変わるだけで品質に大きく影響するので注意。経験則だと奇数が良い?)
-c:v h264_qsvハードウェアエンコード(Quick Sync Video)のx264コーデック
-preset veryslowゆっくり丁寧にエンコすることで高品質高圧縮になる。
-g 300GOP長。Iフレーム間の距離。大きい方が高圧縮だが,大きくしすぎるのもよろしくない。24fpsの場合は240くらいが良いだろう。
-bf 16最大16枚の連続するBフレームを使う。
-refs 16最大16フレームまで動き予測の際に参照できる。
-b_strategy 1Bフレームの挿入位置を適応的に判断する
-look_ahead_depth 100先行探索の先読みの深さ100
-pix_fmt nv12ピクセル形式をデジタル放送に合わせてYV12に指定(QSVの場合はNV12)
-aspect 16:9アスペクト比16:9
-s 1280x720解像度を1280x720に変更
-map 0:p:$SID10$:0 -map 0:p:$SID10$:1サービスIDを指定(これを指定して前後の番組の音声方式が一致しない時音声がおかしくなってしまうのを回避)。
"%MP4FOLDERPATH%\$FileName$.mp4"環境変数MP4FOLDERPATHに"一時的にmp4を吐き出すフォルダ"のパスが補完され,そこに書き出す(直に"Google Photos Backup用フォルダ"に書き出すと正しく認識してくれないため)。
-filter_complex channelsplit(予約登録の番組情報ファイル内に"デュアルモノ"という文字列があった場合)左右の音声を分離して2トラックのモノラルに分ける処理。これをしないとニュース7等のデュアルモノ音声な番組が左日本語右英語の英会話教材になってしまう。それはそれでアリかも。

自動エンコバッチの応用サンプル

どれも基本的にD&Dで処理する用に書いてあるので,自動エンコバッチに導入する際は%1$FilePath$に修正したりして使用して下さい。

D&Dで処理

入力を%1,出力をパス名%~n1.mp4に変更しただけ。$SID10$を番組情報ファイルのServiceID(例えばBS11なら211,MXなら23608)に置き換える(番組情報ファイルが無い場合は"C:\hoge\ffprobe.exe" 入力ファイル名で必要なServiceID(Program hoge)を見つける。誤って前後の番組やワンセグを選択しないように。)。

"C:\hoge\ffmpeg.exe" -i %1 -vf yadif…-map 0:p:211:0 -map 0:p:211:1 "C:\hoge\%~n1.mp4"
pause
ServiceIDの入力を自動化

EDCBから渡されないので番組情報ファイルから文字列を探し,必要な部分だけトリミングしている。

::番組情報ファイルからServiceIDのある行を抜き出し環境変数%SID10LINE%にセット
for /f "tokens=*" %%i in ('findstr ServiceID "%~1.program.txt"') do set SID10LINE=%%i
::%SID10LINE%の前から10文字目,最後の8文字分を除き,環境変数%SID10%にセット
set SID10=%SID10LINE:~10,-8%

"%FFFOLDERPATH%\ffmpeg.exe" -y -i %1 %FFOPTION% -map 0:p:%SID10%:0 -map 0:p:%SID10%:1 "%MP4FOLDERPATH%\%~n1.mp4"
D&Dしたフォルダ内のtsファイルを順次処理

“tsが溜まってるフォルダ"をD&Dで動作する。番組情報ファイルがtsと同じディレクトリにあることが条件。
=====で囲まれた::D&Dしたフォルダ内のTSファイルを順次処理するよう呼ぶセクションを削除すれば一応"tsファイル単体"をD&Dで動作できる。

::ffmpeg.exeがあるフォルダのパス
set FFFOLDERPATH=C:\DTV\ffmpeg
::mp4を吐き出すフォルダのパス
set MP4FOLDERPATH=C:\Users\Shibanyan\Desktop
::ffmpegのオプション
set FFOPTION=-vf yadif=0:-1:1,pp=ac,scale=1280:720:flags=lanczos+accurate_rnd -global_quality 27 -c:v h264_qsv -preset veryslow -g 300 -bf 16 -refs 16 -b_strategy 1 -look_ahead 1 -look_ahead_depth 100 -pix_fmt nv12

::==================================================
::D&Dしたフォルダ内のTSファイルを順次処理するよう呼ぶ
for %%a in ( %~1\*.ts ) do (
  call :encode "%%a"
)
exit
::==================================================

:encode
::ファイル名をタイトルバーに表示
title "%~nx1"をエンコード中...
::番組情報の中に"デュアルモノ"という文字列があれば環境変数"FFOPTION"に"-filter_complex channelsplit"を加える
findstr "デュアルモノ" "%~1.program.txt"
if %ERRORLEVEL% equ 0 (
  set FFOPTION=%FFOPTION% -c:a aac -b:a 128k -filter_complex channelsplit
) else if %ERRORLEVEL% equ 1 (
  set FFOPTION=%FFOPTION% -c:a aac -b:a 256k
)

::番組情報ファイルからServiceIDのある行を抜き出し環境変数%SID10LINE%にセット
for /f "tokens=*" %%i in ('findstr ServiceID "%~1.program.txt"') do set SID10LINE=%%i
::%SID10LINE%の前から10文字目,最後の8文字分を除き,環境変数%SID10%にセット
set SID10=%SID10LINE:~10,-8%

::ループ処理用
set CNT=0
:top
::録画の開始終了でビジーなので負荷を減らすために10秒待つ
timeout /t 10

::エンコ
"%FFFOLDERPATH%\ffmpeg.exe" -y -i %1 %FFOPTION% -map 0:p:%SID10%:0 -map 0:p:%SID10%:1 "%MP4FOLDERPATH%\%~n1.mp4"
::ファイルサイズが0バイトなら失敗とみなしループ(QSVのトランスコードに失敗すると"Error during encoding: device failed (-17)"が返される仕様により稀にエンコに失敗してしまうので,ループさせて復旧を試みる)
for %%i in ("%MP4FOLDERPATH%\%~n1.mp4") do (
  if %%~zi equ 0 goto :roop
)
exit /b

:roop
::10回までループし,それでもダメなら諦めて無限ループを回避
set /a CNT=CNT+1
if %CNT% geq 10 (
  goto :err
) else (
  goto :top
)

:err
::予期せぬエラーが発生したことをログで警告
echo %~nx1のエンコードを10回トライしてもダメだったよぉ。 >> "%MP4FOLDERPATH%\ffmpeg_err.log"
exit /b
番組情報から24fps化するか選択

危なっかしいので没になったやつ。
番組情報ファイルのジャンル :と書いてある行の次の行にアニメ又は映画という文字列があれば24fps化,品質を少し上げる。

ジャンル : ←まずこの行を見つけて
映画 - 邦画←んでここの行をみて判断する
映画 - アニメ
映画 - その他
::ffmpegのオプション
::通常
set FFOPTION3029=-c:a aac -b:a 192k -vf yadif=0:-1:1,pp=ac,scale=1280:720:flags=lanczos+accurate_rnd -global_quality 29 -c:v h264_qsv -preset veryslow -g 300 -bf 16 -refs 16 -b_strategy 1 -look_ahead 1 -look_ahead_depth 100 -pix_fmt nv12
::アニメ・映画
set FFOPTION2429=-c:a aac -b:a 192k -vf yadif=0:-1:1,pp=ac,scale=1280:720:flags=lanczos+accurate_rnd -global_quality 27 -c:v h264_qsv -preset veryslow -g 300 -bf 16 -refs 16 -b_strategy 1 -look_ahead 1 -look_ahead_depth 100 -pix_fmt nv12

::番組情報の中に"ジャンル"という文字列がある行に行番号を付けて取得
for /f "delims=" %%a in ('findstr /n "ジャンル" "%1"') do (
  set GENRE=%%a
)
::行番号の部分だけ取り出す
set GENRE_NUMBER=%GENRE:~0,-8%
::行番号を1大きくする(次の行に求める内容があるため)
set /a NEED_LINE_NUMBER=%GENRE_NUMBER%+1
echo %GENRE%
::その行に書いてある内容を抜く
for /f "delims=" %%b in ('findstr /n /r "." "%1" ^| findstr /r "^%NEED_LINE_NUMBER%:"') do (
  set NEED_LINE=%%b
)
その行にて"アニメ"又は"映画"という文字列の有無でオプションを選択
echo %NEED_LINE% | findstr "アニメ 映画"
if %ERRORLEVEL% equ 0 (
  set FFOPTION=%FFOPTION2429%
) else if %ERRORLEVEL% equ 1 (
  set FFOPTION=%FFOPTION3029%
)

::番組情報の中に"デュアルモノ"という文字列があれば環境変数"FFOPTION"に"-filter_complex channelsplit"を加える
findstr "デュアルモノ" %1
if %ERRORLEVEL% equ 0 (
  set "FFOPTION=%FFOPTION% -filter_complex channelsplit"
)
echo %FFOPTION%
23時~7時の夜間時間(東京電力)にエンコを実行して電気代を節約

先頭に追加すると動作します。ただの思いつきネタなので効果の程は知りません。詰まって時間内に処理しきれない場合は使わないで下さい。

::dos標準の環境変数timeの先頭2文字が7以上且つ23未満の場合300秒待ってループ
:electric
if %time:~0,2% geq 7 (
  if %time:~0,2% lss 23 (
    timeout /t 300
    goto :electric
  )
)
カット時間の計算をdosにやらせる

例えばOP部分だけカットして色々試行錯誤する場合等に使うと良い。最初に-ss秒シークさせて読み込み,そこから-t秒後(再生ソフトで表示される時間で言うと終了時刻と開始時刻の差にあたる)までカットする。

:roop
echo カット開始時刻を入力
set /p SSH=
set /p SSM=
set /p SSS=
echo カット終了時刻を入力
set /p TTH=
set /p TTM=
set /p TTS=
set /p ASK=入力内容でよろしいですか?[y/n]:
if %ASK% equ n goto :roop
if %ASK% equ N goto :roop
echo 秒になおす計算
set /a SS= (%SSH%*3600 + %SSM%*60 + %SSS%)
set /a TT= (%TTH%*3600 + %TTM%*60 + %TTS%)
set /a T= (%TT% - %SS%)
echo 計算結果
echo カット開始時刻は%SS%秒です
echo カット終了時刻は%TT%秒です
echo カット開始時刻と終了時刻の差は%T%秒です

ffmpeg -ss %SS% -i %1 -t %T% -vf yadif…
mpeg2-tsの字幕をmp4に付ける(ソフトサブ)

一度自動エンコに組み込んでみたが,そもそもgoogleドライブが対応していなかった。
昔EpgDataCap_Bon.exeで録画したtsではできるけどEdcbPlugin+TVTest.exeで録画したものでは字幕データが無いよって言われちゃう…
https://github.com/iGlitch/Caption2Ass からMPEG-TS字幕データ抽出ツールを入手
②以下コマンドでsrt形式で字幕を抽出

"C:\hoge\Caption2AssC_x64.exe" -format srt %1

③以下コマンドでエンコしながら結合

… -i %1 -f srt -i "C:\hogehoge.srt" … -map 0:p:hoge:0 -map 0:p:hoge:1 -map 1:0 -c:s mov_text "C:\hoge\%~n1.mp4"
ffmpegでtsファイルを綺麗にpng切り出し

30fpsのtsファイルの場合,-r 30で1秒あたり30枚=全フレーム,-r 1で1秒あたり1枚切り出しが出来る。お好みでどうぞ。
例えば1時間の番組の場合,
-r 30なら1時間x60分x60秒x30フレーム=108000枚(あってるよね?ねぇあってるよね??)となり6桁なので%07dで最大7桁にしておけば連番に困ることは無いかな。0000001.png,0000002.png…みたいになるよ。
-r 1なら1時間x60分x60秒x1フレーム=3600枚となり4桁なので%05dくらいで多分おk。00001.png,00002.png…みたいになるよ。
yadif=0:-1:1でインタレ解除(これしないと縞々になっちゃう)
pp=acでノイズ除去(ブロックノイズやホワイトノイズに効くので地上波には効果大)
scale=1920:1080:flags=lanczos+accurate_rndで地上波の1440x1080→1920x1080に丁寧なアルゴリズムでリサイズ(ただのリサイズより輪郭が綺麗)
アニメキャプチャ命!の方は録画後実行batに組み込むのもアリだろう(その時は%1とかを適切なマクロに置き換えてね)。正直自分は観て楽しめればおkなので普段は使ってない…

::C:\hoge\ファイル名にフォルダをつくる
md "C:\hoge\%~n1"
::png連番出力
ffmpeg -i %1 -vf yadif=0:-1:1,pp=ac,scale=1920:1080:flags=lanczos+accurate_rnd -c:v png -r 30 "C:\hoge\%~n1\%%07d.png"
pause

おわりに

余談

余談ですが,以前はTS抜きできないPCIExpress接続のPC用TVチューナを使っていましたが,様々な制約はあるものの,導入は凄く簡単でした。それにこちらのメーカーは公式の対応が良かったのでライトユーザなら無理してこんな七面倒臭いことしなくてもいいかも。

ひとこと

すぐ投げ出したり人に頼ろうとはせずreadmeを熟読するなりネット上の記事や2chを漁ったりして頑張りましょう。
有志の開発者の皆様方,深く感謝しています。

Copyright © 2016-2017 俺の外付けHDD All Rights Reserved.