見出し画像

KFMを使ったインターレース解除+等

例:KFMの結果は右です。
文字のちらつきをとても抑えられる。(背景のちらつきは無関係です)
他にも、UIなどの細かい横線部分に効果はある。

最終更新日
2026-04-09
「11)PointResizeのオプション」を追記。(2026-04-13 追記)
2026-06-11
「2c2)」ノイズ除去の項目を追記。
////////////////////////////////////////////////////////////

・この記事は、以下の動画を文章としてまとめたものです。
・分かり易さは
 ここ >>>>>>>>>>>>>>>>>>>> 動画
 になっていると思います。
・この記事のみで完結しています。補足に留まるため動画の視聴は不要です。

【KFMDeint】(ざっくり説明)
KTGMC(QTGMCのCUDA版)で映像をインターレース解除し、コーミング部分かつ静止部分をKFMで個別に処理したうえで結合する。
KFMで、1ピクセルの横ラインが重なる"積"や"量"といった漢字、あるいは細い横線があるUI等に現れるライン・フリッカー(上下の震え)を処理する。
効果に関しては、動画中の 4:23~5:22 の比較部分を1080pでご覧いただければ解す可能性がある蓋然性も低いながらあるのかもしれません。
(KFMには、逆テレシネやノイズ除去などの機能もあります。詳細: Home · nekopanda/AviSynthCUDAFilters Wiki · GitHub

前置き

・コンポジットかS端子を使ったNTSC規格出力のレトロゲームの録画映像のインターレース解除を目的としています。
 実写やVHS、ビデオカメラなどの録画映像でも基本的に同じですが、フィルタの細かい設定は最適ではない場合があります。
 コンポーネントとD端子は、インターレースかプログレッシブかは規格によります(この2種は確認していません)。
・旧版の AviUtl を使用します。
 (AviUtl ExEdit2でも使用可能ですが、ちょっとした注意点は『注釈など』の『7)【AviUtl2で使用する】』を参照してください)
・キャプチャーボードは GV-USB2 を前提としています。
 他のコンポジット・S端子キャプチャーボードでは不要の工程がある可能性があります。


1) AviSynth+ 0:27

AviSynth+ の Installer から GitHub に移動し、
AviSynthPlus_(最新のバージョン)_vcredist.exe をダウンロードする。
インストール時に Add Avisynth Script to New item menu にチェックを入れる(右クリックメニューの新規作成から AviSynth+ Script ファイルを作成できるようになる)。
 
※AviSynth+ を更新した場合は、必ず Neo を再度上書きする。
 
(未確認バージョンでも9割9分9厘9毛は動くと思いますが、未確認は未確認です)
  ・25/08/13 AviSynth+ 3.7.5 はとりあえず動作確認済みです。
※AviSynth.dllを上書きするので、AviSynth+をアップデートする必要がそもそもないと思います。

2) AviSynthNeo 0:47

Releases · nekopanda/AviSynthPlus
AvisynthNeo-r2827.zip をダウンロードし、解凍する。
2a)
AviSynth.dllの置き換え
 ①AvisynthNeo\x64\AviSynth.dll を C:\Windows\System32 にコピーする。  ②AvisynthNeo\x86\AviSynth.dll を C:\Windows\SysWOW64 にコピーする。

※オプション
rainman74氏により、いくつかの修正がなされたフォーク版:
Release AviSynthNeo 3.4.0-r2827-CUDA-12 · rainman74/AviSynthNeo · GitHub
AviSynth.dll を C:\Windows\System32 にコピーする。
System32 の中に DevIL.dll、FFTW3.dll、libfftw3f-3.dll などがない場合は一応コピーする。FFTW3とlibfftw3f-3はQTGMCに必須。plugins64+の中身も、次の工程で扱う自身のplugins64+フォルダにない場合はコピーする)
私の環境では、x86版のAvisynthNeo-r2827を入れたままでも異常は起こっていません。

3) KFMとKTGMC  1:52

Releases · nekopanda/AviSynthCUDAFilters
KFM-0.4.6.zip と KTGMC-0.4.6.7z をダウンロードし、解凍する。
3a)
・KFM-0.4.6のx64フォルダの中身を
 C:\Program Files (x86)\AviSynth+\plugins64+
 
にコピーする。
・KFM-0.4.6のx86フォルダの中身を
 C:\Program Files (x86)\AviSynth+\plugins+
 にコピーする。
3b)
 KTGMC-0.4.6も同様にコピーする。

※オプション
・rigaya氏により、いくつかの修正がなされたフォーク版:
Releases · rigaya/AviSynthCUDAFilters · GitHub
KFM-0.4.6 と KTGMC-0.4.6 を導入後に、plugins64+にのみを上書きする(はず)。
修正点による違いを確認できていないので、この導入方法が正しいかどうかは、現状では分かっていません。
・rigaya氏のフォーク版をrainman74氏がさらにフォーク版:
Releases · rigaya/AviSynthCUDAFilters
私には違いが分かりません。
AviSynthNeo.Shared.Plugins.zip は、便利な主要フィルターの詰め合わせです。詰め合わせてあるので、環境構築に便利です。ありがたいです。

4) AmaRecTVの録画設定 2:27

グラフ 1(デバイス)タブで、GV-USB2を選択し、フォーマットを
*w= 720, h= 480, fps=29.97, fcc=YUY2, bit=16 にする。
録画設定タブで、フレームレートの目安を30にする。

※GV-USB2 の音声ノイズ問題への代替手段に関しては「おまけ - OBS録画→インタレ解除」の「2) OBSの設定の2c)」を参照する。

5) AviUtl 2:23

AviUtl.exeのあるフォルダ内のexedit.iniに、以下を追加し上書き保存する。

.avs=動画ファイル
.avs=音声ファイル

exedit.iniの例: C:\AviUtl100\exedit.ini
※ AviUtl2 では不要です。

6) .avsファイルを作成する 2:37

録画した動画ファイルと同じフォルダに.avsファイルを作成する。
エクスプローラーで右クリック→新規作成→AviSynth+ Script を選択する。
もしくは.txtファイルを作成し、ファイル名をhoge.avsに変更する。
6a)
.avsファイルをテキストエディタで開き、以下のスクリプトをコピペする。
※詳細は Home · nekopanda/AviSynthCUDAFilters Wiki · GitHub を参照する。
※リサイズをする場合は、「8) 動画を出力する」のリサイズをする場合を参照する。

SetMemoryMax(2048, type=DEV_TYPE_CUDA)
srcfile="Test.avi"
AviSource(srcfile)
ConvertToYV12()
AssumeTFF()
OnCPU(2)
KFMDeint(mode=1, preset="Slower", cuda=true)
OnCUDA(2)

# 【PAR補正】
# ソースが4:3の場合(DAR 4:3)
Spline36Resize(640, 480) # 本来、テレビなどで行われるPAR補正の再現をする。4:3に補正する。
# ソースが16:9の場合(DAR 16:9)
#Spline36Resize(854, 480) # 16:9に補正する。

ColorMatrix(mode="Rec.601->Rec.709", clamp=0) # 色空間を、BT.601からBT.709に変換する。
OnCPU(2)

《PAR補正の再現》
Spline36Resize(640, 480) # 本来、テレビなどで行われるPAR補正の再現をする。4:3に補正する。
※ソースが16:9の場合は、 (854, 480) を使用する。
《色空間の変換》

S端子から取り込んだ映像は、例外なく BT.601 の色空間になる。
そのため、BT.601 から BT.709 へ色空間を変換する必要がある。
(AVIは、ファイル内部に色空間の情報を保存しないため明示はないが、コンポジット・S端子から取り込むためBT.601であると推測できる)
変換するフィルターとして、 ColorMatrix(mode="Rec.601->Rec.709", clamp=0) を用いる。
【追記:2026-01-25】【同日夜追記】
AviUtlの色空間の変換と(おそらく)処理が重複するためにフィルタを削除しました。
必要でした。検証は「注釈など」の「9)色空間の変換について」にて。

※ Nvidia CUDA を使用できない場合は、注釈欄の「4)【CPUのみで動作】」を参照する。

7) AviUtlに読み込む 3:57

作成した.avsファイルをテキストエディタで開き、
srcfile="Test.avi" の『" "』内に動画ファイル名(hoge.avi)をコピペし、上書き保存する。
『" "』と拡張子を忘れないようにする。
7a)
作成した.avsファイルを、AviUtlのメインウィンドウにドラッグ&ドロップする。
※「ファイルの読み込みに失敗しました」と表示が出る場合は、工程 2) のファイル配置が逆になっている可能性がある。
※L-SMASH-Worksの導入が必須かは不明。Releases · Mr-Ojii/L-SMASH-Works-Auto-Builds
7b)
AviUtl の設定を確認する。
設定→サイズの変更    →なし
   フレームレートの変更→なし
   インターレースの変更→なし
              トップ->ボトム
   色変換       →自動

8) 動画を出力する

好きなエンコード方法で出力する。
8a)
リサイズをする場合
※リサイズは不可逆処理なのでソースが貴重な場合には注意する。
 適切なサイズ(4:3)に拡大する。
  480p基準  → 640x480
  FHD基準   → 1440x1080
  
2K基準   → 1920x1440
 (4K基準   → 2880x2160)
 (64K基準    → 46080x34560)
リサイズをする場合
・AviSynthでリサイズをする場合は以下を使用する。

SetMemoryMax(2048, type=DEV_TYPE_CUDA)
srcfile="Test.avi"
AviSource(srcfile)
ConvertToYV12()
AssumeTFF()
OnCPU(2)
KFMDeint(mode=1, preset="Slower", cuda=true)
OnCUDA(2)

# ---------------------------------------------------
# 【PAR補正】本来、テレビなどで行われるPAR補正の再現をする。
# ソースが4:3の場合(DAR 4:3)は、(640, 480)にする。ソースが16:9の場合(DAR 16:9)は、(854, 480)にする。
Spline36Resize(640, 480)
# ---------------------------------------------------
# 【HDリサイズ】(1440x1080)。ソースが16:9の場合は、(1920, 1080)にする。
Spline36Resize(1440, 1080)
# 実写・アニメ・ゲーム映像いずれでもバランスよくリサイズできる。本スクリプトでは基準として使用。基本的にはこれを使えば問題ないと思います。

# 【HDリサイズのオプション(用途に応じて切り替え)】
# BlackmanResize(1440, 1080)
# 実写映像やノイズを含む素材向き。LanczosResizeをベースにリンギングを抑制した派生フィルタ。
# Spline36との差は私では判らない程度なので、使用機会が稀。

# PointResize(横幅, 縦幅)
# ドット絵(FC/SFC, etc.)や2D(PS1/SS, etc.)ゲーム向き。
# ピクセル単位を保ったまま拡大するため、補間によるボケは出ない。
# 3D(PS1/PS2, etc.)ゲームでも、当時の粗さを意図して残したい場合はこれを使う。
# ドットを正確にリサイズするために、整数倍リサイズ推奨 例:(1280, 960) or (1920, 1440) 。
# ---------------------------------------------------

ColorMatrix(mode="Rec.601->Rec.709", clamp=0) # 色空間を、BT.601からBT.709に変換する。
OnCPU(2)

・Spline36Resize(1440, 1080) # 実写・アニメ・ゲーム映像いずれでもバランスよくリサイズできる。本スクリプトでは基準として使用。基本的にはこれを使えば問題ないと思います。
・BlackmanResize(1440, 1080) # 実写映像やノイズを含む素材向き。LanczosResizeをベースにリンギングを抑制した派生フィルタ。Spline36との差は私では判らない程度なので、使用機会が稀。
・PointResize(横幅, 縦幅) # ドット絵(FC/SFC, etc.)や2D(PS1/SS, etc.)ゲーム向き。ピクセル単位を保ったまま拡大するため、補間によるボケは出ない。3D(PS1/PS2, etc.)ゲームでも、当時の粗さを意図して残したい場合はこれを使う。ドットを正確にリサイズするために、整数倍リサイズ推奨 例:(1280, 960) or (1920, 1440) 。 ※使用する場合は、「注釈など」の「11)PointResizeのオプション」をあなたが読みます。

※リサイズフィルタは他にも色々ありますが、拡大した静止画をじっくり見比べてようやく分かる程度です。唯一、PointResizeとその他とでは違いが分かりやすい。
Resize Filters — AviSynth+ 3.7 documentation
※Neoの元になったAviSynth+の関係上「v3.7.3-」と付いているものは使用不可です(2026-01-18)。
※注釈などは、ChatGPTやGeminiを使用してまとめたものなので、より詳しい特性を知りたい場合は試したり調べたりしてください。
※LanczosResizeは外した。

・AviUtlのNVEnc出力時に
 Vppフィルタ→リサイズ→1440x1080 〈リサイズ方法〉
を使用する方法もある。
GPU処理のため速度はあるけれど、CPU処理より品質は劣る。
CPU処理の速度でも問題はないので、大きなリサイズでもない限りGPU処理は不推奨です。

※16:9ソースの場合は、リサイズサイズを 1920x1080 にする。
※AvsPmod Releases · nekopanda/AvsPmod の使い方は省略する。

〈注意〉
KFMDeintのオプション ucf=true を使用すると、AviUtl(AviUtl2)が音声を読み込まなくなります。なりました。


おまけ - OBS録画→インタレ解除

OBSで録画したものをインターレース解除する。
h.264 や h.265 などの非可逆圧縮形式で録画した MKV/MP4 ファイルのインタレ解除をする。
 ※ここでは .mkv を使う。
※無劣化で録画をするなら AVI です。
 
※もしくは lossless を使う。

長所

〈長所1〉録画負荷・容量を減らせる。
hevc_nvencなどのGPUエンコーダーを使用すると、録画負荷を抑えつつ、無劣化と実質同等の画質で録画できる。
また、可逆圧縮形式であるAVIに比べファイル容量を小さくできる。

〈長所2〉マルチトラック録音ができる。
一つの動画ファイルに、ゲーム音とマイク音をマルチトラックとして録音できる。
・録画ソフトと録音ソフトを使う場合の同期を取る作業がいらない。
(メニュー欄等を動かしながら「1・2・1・2」言うあの作業)
・複数のマイク入力をマルチトラックとして録音し管理できる。
・マイク録音の書き出しをする前に録音ソフト(Audacity)を閉じてしまい、録音音声を消してしまう事故を防止できる。(とてもつらい)

〈長所3〉マイク録音時にエフェクトを掛けられる。
録音時に、イコライザーやコンプレッサー等をマイク音声に掛け編集を省力できる。

〈短所〉あれば追記する。

GV-USB2とOBSの相性問題

※OBSの「映像キャプチャデバイス」でGV-USB2を直接取り込むと、数フレーム毎に映像が引っかかってみえる微妙な現象に悩むのでアマレコTVのライブ機能を使う。 ( https://x.com/ColtSsr/status/1089167338916667392 )

GV-USB2は、インターレースをBFF(ボトムフィールドファースト)として扱うが、OBSは、映像をすべてTFF(トップフィールドファースト)として受け取るため相性が悪いようです。
GV-USB2 only captures progressive? - Page 2 - VideoHelp Forum
Hybrid input scan type, bottom field first? - digitalFAQ Forum

TFFとして扱うキャプチャーボードの場合は、OBSの映像キャプチャデバイスで直接取り込める、と思う。
[TFFかBFFか確認する方法]
1.取扱説明書や公式サイトを見て調べる。
2.記載のない場合は、OBSの映像キャプチャデバイスで直接取り込みプレビューを見て確認する。
 BFFの場合は、一定間隔でフレームの引っかかりのような違和感が見える。
3.もしくは、録画・インタレ解除を実際に行った映像だと違和感を確認し易いと思います。
 
・TFFの場合は、次の「1)アマレコTV4」の工程を飛ばしてもよいと思いますが、実際に試したわけではありませんので未確認です。


1) アマレコTV4

1a)
アマレコTV4をダウンロードする。
アマレコTV公式ホームページ

※ロゴは、無料版のAMVビデオコーデックを使いアマレコTV4で録画する場合のみ入る。そのため、ライブ機能を使ってOBSで録画する場合は埒外です。
1b)
アマレコの設定(記述以外は基本初期設定)
・グラフ 1(デバイス)タブで、GV-USB2を選択し、フォーマットを
 *w= 720, h= 480, fps=29.97, fcc=YUY2, bit=16 にする。
・グラフ 4:ライブタブの、ライブ機能を使うにチェックを入れる。
・フレームレートは30、サンプルレートは48000
(サンプルレートは、PCのサウンドデバイス入力やOBSと合わせる)
1c)
アマレコTV3.10フォルダ内の live_setup300.exe をインストールする。 64bit用の アマレコTV4 ライブ機能 64bit ベータ版 をダウンロードする。
URL先の注意などをしっかり読む。
あまラボ アマレコTV4 ライブ機能 64bit ベータ版

live411betaフォルダをアマレコTV4のフォルダに入れて live411_install.bat をダブルクリックする。
フォルダ名に2バイト文字NG、live411betaフォルダは残しておく必要がある。 https://x.com/wing1027/status/1718311204945600955



2) OBSの設定

2a)
ファイル→設定→映像 基本・出力の解像度を 720x480 にする。
FPS値を 29.97 にする。

2b)
ソースの映像キャプチャデバイスのプロパティを開き、デバイス「AmaRec Video Capture x64」を選ぶ。
・デバイス「AmaRec Video Capture x64」がない場合
 →一度アマレコとOBSを閉じたり、アマレコとOBSの起動する順番を変えたり、PCを再起動したりする。
・ゲーム画面がでない、なんか下に赤い文字が点滅する。
 →プロパティを開いて「無効化」→「有効化」を切り替える。
  もしくは、解像度/FPSタイプをカスタムにしたり、デバイスの既定値に戻したりすると解決する。

必ず、キャプチャ映像は画面いっぱい丁度にする。
ソースを選択して Ctrl+F を押し、サイズを最大化する。
半端なサイズだと、おそらく正しくインタレ解除をできない。
なので、
    必ず、キャプチャ映像は画面いっぱい丁度にする。
キャプチャ映像以外のソースの混在している状態では、録画映像のインタレ解除を正しく行えるかは試していない。
ともかく、
     必ず、キャプチャ映像は画面いっぱい丁度にする。

2c)
ゲーム音声は、GV-USB2から録るとノイズまみれなので別に回して録る。
※GV-USB2内に静電気がたまる影響説や、PCのOSのドライバアップデートにより相性が悪くなった説などがある。
・RCA端子(赤と白の端子) - 3.5mm(イヤホンジャック)変換ケーブルを使い録音する。(私はこれ)
・PCのマザーボード背面にあるライン入力(青色)を推奨する。OBSの設定->音声->グローバル音声デバイス->マイク音声->「ライン入力 (High Definition Audio Device)」を選択する。
 ※タスクバー右下のスピーカーマークを右クリック->サウンド->録音タブ->ライン入力 (High Definition Audio Device)->詳細タブの規定の形式を「2チャネル、16ビット、48000 Hz(DVDの音質)」にする。
 ※レベルタブのライン入力を30~50程度にする。これより高い場合、信号が飽和している可能性がある。これより低い場合、ノイズの影響が大きくなる可能性がある。(これに関しては、ゲーム機の音声出力から入力までの時点で飽和している可能性(=ほぼどうしようもない可能性)もあるため、効果は不明です)(可能性可能性うるせぇ!)
 軽度の検証の結果、ライン入力85でダイナミクス6前後の部分が、ライン入力50でダイナミクス7~8前後になっていたので、適切なライン入力は効果的のようです。私は、現在34にしています。

・PCのマイク入力(桃色)に直挿しだと、完全無音状態から音楽や音の鳴る瞬間(無信号から信号の入る瞬間)に プッ というポップノイズ(スパイクノイズ)が入る。例えば、ロード時の無音からBGMの鳴り始める手前の瞬間や、ゲームの起動時など。
とはいえ、耳を劈くほどの爆発音やキツイ音では無いので視聴上の問題はないと思います。音声波形にノイズは基本被っていないので、編集でしこしこと消していく。
〈他〉
RCA端子 - HDMI変換機→HDMIキャプチャーボード→録音
・PS2の場合、光出力から録音する。 etc...

2c2)
ライン入力から録音すると、固定ノイズが乗る場合があります。
(私の環境では、約-54~-84dBにある。ゲーム音があればかき消されるが、積もり積もって無意識下に疲労の原因になる可能性もあるのでカットする)
ノイズ除去プラグインやAudacityのノイズ除去などを使用する。
ここでは、ReaPlugsのReaFirを使う。
使い方は、この方を参照してください。
無料でノイズ除去ができる「ReaFir」の使い方(Windows) | 貧乏DTMerの音楽日記
ゲーム音のない無音部分を活用する。
(無音といっても、ゲームを起動していない部分はノイズの性質が違うため無意味です)

2d)
録画設定
ファイル→設定→詳細設定
映像内の色空間を「REC.601」にする。
・ファイル→設定→出力→録画
《使い分け例》
 - AVI(Ut Video)/ hevc_nvenc Lossless
  貴重なソースや編集ソースとしてとにかく高画質に録画する場合
 - hevc_nvenc QP 10(~20)
  編集ソースとして十分の画質かつ録画容量を抑えて録画する場合
  ※LosslessとQP 10(~20)では画質の見分けはつかないとされている。
 - shibanyan_1氏設定
  編集ソースとして十分の画質かつ、さらに録画容量を抑えて録画する場合
ファイル容量順は AVI > ロスレス > qp=10 > shibanyan_1氏 です。
<ファイル容量目安>
検証①: 720x480 / 29.97fps / 480i (PS2『チョロQ HG3(きがるにレース)』)1時間当り
・AVI(UtVideo/AmaRecTV3.10) → 約27GB(約60Mbps)
・hevc_nvenc Lossless (qp=0) → 約14GB(約31Mbps)
・hevc_nvenc QP 10 → 約5.8GB(約13.5Mbps)
・hevc_nvenc QP 12 → 約4.1GB(約9.5Mbps)
・shibanyan_1氏設定(profile=main) → 約1.7GB(約3.9Mbps)
検証②: 720x480 / 29.97fps / 240p (PS1『ゲーム不統一(フライトSTG/レースゲーム)』) 1時間当り
・AVI(UtVideo/AmaRecTV3.10) → 約30GB(約67Mbps)
・hevc_nvenc Lossless → 約18GB(約40Mbps)
・hevc_nvenc QP 10 → 約7GB(約16Mbps)
・shibanyan_1氏設定(profile=main) → 約3.5GB(約8Mbps)
画質順は AVI = ロスレス > qp=10 > shibanyan_1氏 です(理論上)。

※録画設定は、ストレージの余裕、安心と妥協、そして、信じる心などによって決まります。
録画後に、インタレ解除リサイズ等中間エンコードと編集後エンコードの2回のエンコードがあります。さらに、YouTube側の再圧縮もあります。
そのため、録画ファイルはできる限りきれいに録画したいと思う一方で、過剰な設定は容量の無駄ともなります。

shibanyan_1氏の、VMAFを基準とした測定結果によると、QP10は計測対象外のようですが、十分に過剰であると推測できます。
nyanshiba/best-ffmpeg-arguments
・それならば、shibanyan_1氏設定を使おう派
・まぁでも、録画ファイルだから過剰だとしてもQP10や12にはしておきたい派
・余裕なんだが?AVIで録画する派

録画設定は、ストレージの余裕、安心と妥協、そして、信じる心によって決まります。

※qp12とqp20をSSIMで測定した結果、「SSIM Y:0.991744 (20.832117) U:0.992666 (21.346531) V:0.993434 (21.827059) All:0.992179」でしたので、QP=20でも十分でしょうね。
ファイルサイズも qp12→qp20 で、約60%の減少を見込めます。

①シンプルな設定
録画設定
☑スペースなしのファイル名を生成する
種別:標準
録画フォーマット:Matroska Video(.mkv)
映像エンコーダ:NVIDIA NVENC HEVC
音声エンコーダ:FFmpeg FLAC(16-bit)
※もしくは、CoreAudio AAC
(CoreAudio AACは、iTunesをインストールしている場合のみ使用可能。
 無い場合は FFmpeg AAC でも良いと思います。
 OBSのAACオーディオエンコーダについて|とかげ 参考)
音声トラック:☑1→ゲーム音声
       ☑2→マイク
      (☑3→マイク2以降がある場合)
エンコーダ設定
レート制御:定数QP(CQP)
※Losslessの場合は「無損失」
定数QP(CQP):10(~20)
キーフレーム間隔:0 s
プリセット: P7
チューニング:高品質
マルチパスモード:2パス(フル解像度)
プロファイル:main(→main10でも良い。後述有り)
Look-ahead:オフ(先読み。QPでは効果は薄いらしいのでオフ)
適応量子化:オン(所謂AQ。低QPなら効果は僅からしいけど一応)
Bフレーム:3
Bフレームを参照:それぞれ(画質優先、らしい)

②shibanyan_1氏設定
OBSに画質を求めるのは間違っているだろうか - 俺の外付けHDD
を参考にする。

③シンプル+設定
②の設定をベースにする。
映像エンコーダ設定:preset=p7 qp=10(~20) b=3
qp=0 でロスレス。

〈私見や使用中の設定など〉
・コンテナフォーマットはmatroska(mkv)を使っています。
・matroska(mkv)はクラッシュ耐性を持つため、OBSのクラッシュや停電時に録画ファイルが破損する確率が低い。mpegts(ts)にも優れたクラッシュ耐性はあるが、配信向きのコンテナ形式のため今回は使用しない。mp4は設定次第です。
※Hybrid MP4は、AviUtlやffmpegで音声を読み取れない・分離などの処理ができなくなった経験がありますので、おすすめしません。(Hybrid MP4実装初期の試用時)
本使用前に試験録画をしてください。

・音声はflacを使っています。aacでも、99.9%聴き分けはできないと思いますが、録音の生データに不可逆圧縮は不適当といえます。pcm(wav)は、ほぼすべてのソフトで読み込める安定した枯れたコーデックですが、トラック数が多いと伴ってファイルサイズが嵩みます。
・AviUtlのインタレ解除出力時に音声を aac にするため、音質とファイルサイズの兼ね合いから録音コーデックに flac を使用しています。
・ “最初から最後までflacで貫き通すと、YouTube側でより良く音声がエンコードされる。” とありますが、編集ソフトに依っては、mp4 + flac の動画ファイルでは正常に音声を読み込めない恐れがあります。
(ffmpegで映像と音声に分離してflac単体で読み込みもできますが、管理は面倒くさいです)


・pcm系(wav)は、mp4では4GB制限がかかるので使う場合はmkvなどにする。(mp4 + pcm 16-bitだと約6時間で録音が途切れた経験がある)
音声コーデックは pcm_s16le - PCM signed 16-bit little-endian にする。(pcm系種類多すぎて見づらい)
音質に拘るのなら pcm_s24le - PCM signed 24-bit little-endian にする。
32や64はプロや好事家こうずか向けだと思います。(好事家は「こうずか」と読むと今知りました。え?そんなの常識だって?⋯⋯、そうスか⋯⋯)

〈プロファイル(bit深度)の設定に関して〉
10bitで録画する場合は「プロファイル:main10」にする。もしくは「profile=main10」にする。その際は、「詳細設定→カラーフォーマット→p010」にする。
8bitの録画ソースでも10bitで録画することでバンディング対策をする手法もある。
※バンディングとは、グラデーション部分が省略した描写になる現象です。 
 1-2-3-4-5-6-7-8-9-10 が 1-1-3-3-4-5-6-7-9-9-10 になる感じです。
理論上は、10bitで録画すると画質は良くなるそうです。
ただ、コンポジット・S端子で録画するゲーム機の場合は、bit差の影響は知覚できないほど極僅かだと思います。旧い編集ソフトでは、10bitを読み込めないものもありますので扱いやすい方を選択してください。
私は8bitにしています。
shibanyan_1氏設定の初期パラメータはprofile=main10なので、注意。

2e)
音声のマルチトラック録音の設定は調べてください。
ゲーム音をトラック1マイクをトラック2にする。
※ソース映像とソース音声のみを必要とする場合は、マイク関連の設定や工程は不要です。
※プレイ中のゲーム音は、OBSの音声モニタリングから"モニターと出力"を使い、聴くことをおすすめします。
理由は、ゲーム音が聴こえていれば録音もできていると判るため。
OBS等のアップデートや設定の変更により、グローバル音声デバイスの設定が初期化されている可能性がある。
プレイ中に聴く音量は、OS側の音量ミキサーなどで調節する。(OBSの音量ミキサーを下げると録音音量も小さくなるため)
厳密には、極僅かな遅延が生じていると思いますが、気になったことはありません。
※ソースの音声入力キャプチャとグローバル音声デバイスのどちらでも音声入力はできますが、違いは分かりません。
一つは、音量ミキサーを変えずに録音用にし、一つは、モニターのみ設定にして、プレイ時に聴く音量を調節する、という使い方もできそうです。

2f)
録画する。必ず、キャプチャ映像は画面いっぱい丁度にする。
※OBSのファイル→設定→一般→出力から、録画を停止するときに確認ダイアログを表示するにチェックを入れると誤らない。


3) 録画ファイル(.mkv)の、インタレ解除

①L-SMASH Worksを使う方法(推奨)
②ffmsを使う方法

①L-SMASH Worksを使う方法(推奨)💎
AviUtl に L-SMASH Works を導入する。
GitHub - Mr-Ojii/L-SMASH-Works-Auto-Builds: Unofficial build of L-SMASH Works
導入方法も記載されています。
(AviUtl→ファイル→環境設定→入力プラグインの設定→ L-SMASH Works File Readerの設定から、AviSynth Script にチェックを入れる)
以下のスクリプトを .avsファイルにコピペし、動画ファイルと同じフォルダに保存する。
※ちなみに、このスクリプトは、AviUtl 2(L-SMASH Works導入済み)でも動作する。
 ※L-SMASH Works を導入済みの方は少なからず(多いの意)いらっしゃると思いますので、こっちの方が楽ですね。

SetMemoryMax(2048, type=DEV_TYPE_CUDA)
X = "hogehoge.mkv"
AudioDub(LWLibavVideoSource(X), LWLibavAudioSource(X))
ConvertToYV12()
AssumeTFF()
OnCPU(2)
KFMDeint(mode=1, preset="Slower", cuda=true)
OnCUDA(2)

# ---------------------------------------------------
# 【PAR補正】本来、テレビなどで行われるPAR補正の再現をする。
# ソースが4:3の場合(DAR 4:3)は、(640, 480)にする。ソースが16:9の場合(DAR 16:9)は、(854, 480)にする。
Spline36Resize(640, 480)
# ---------------------------------------------------
# 【HDリサイズ】(1440x1080)。ソースが16:9の場合は、(1920, 1080)にする。
Spline36Resize(1440, 1080)
# 実写・アニメ・ゲーム映像いずれでもバランスよくリサイズできる。本スクリプトでは基準として使用。基本的にはこれを使えば問題ないと思います。

# 【HDリサイズのオプション(用途に応じて切り替え)】
# BlackmanResize(1440, 1080)
# 実写映像やノイズを含む素材向き。LanczosResizeをベースにリンギングを抑制した派生フィルタ。
# Spline36との差は私では判らない程度なので、使用機会が稀。

# PointResize(横幅, 縦幅)
# ドット絵(FC/SFC, etc.)や2D(PS1/SS, etc.)ゲーム向き。
# ピクセル単位を保ったまま拡大するため、補間によるボケは出ない。
# 3D(PS1/PS2, etc.)ゲームでも、当時の粗さを意図して残したい場合はこれを使う。
# ドットを正確にリサイズするために、整数倍リサイズ推奨 例:(1280, 960) or (1920, 1440) 。
# ---------------------------------------------------

ColorMatrix(mode="Rec.601->Rec.709", clamp=0) # 色空間を、BT.601からBT.709に変換する。
OnCPU(2)

※インデックスファイル(.lwi)はエンコード完了後に消しても問題ない。
 .lwi ←かわいい(.lwi)←涙ぼくろがキュート

【 240p (N64/PS1など)の場合】

N64/PS1などの多くのタイトルは 240p 29.97fps 描写です。
そのため、インタレ解除とは違う処理をする。
①元の描写が 29.97fps の場合は、KFMDeintでインタレ解除処理を行った後に、フレームを半分に間引き 29.97fps にする。
②元の描写が 29.97fps 以上の場合はフィールド分離をする。ムービーシーンなどで 29.97fps 以上のシーンがある場合に行う。(もしかしたら、480i 映像の様に KFMDeint でインタレ解除する方法で良いかもしれません。PS1で、59.94fps 描写のゲームはほぼないので試していません)
ゲームに依っては、レンダリングムービーではインターフレーム仕草を見せる可能性もあるので、元動画をコマ送りで確認する。(ほぼないと思いますが)

※240pでDAR16:9があるのかは分かりませんが、その場合はPAR補正とリサイズの数値を変更してください。

《その他の例:29.97fps以外の固定fpsシーンでクロマゴーストがインタレ削除時に発生する場合の逆テレシネ》
「注釈など」の「10)ゴーストの処理(逆テレシネ)」(クロマゴーストの見本有り)
もしくは、19.98fps映像の処理|kituta

①KFMDeintで処理後にフレームを間引く。(推奨)
・コーム部分が最もきれいに見える。
※コーム部分とは、櫛のように細い横線が縦に連なる部分のこと。
・以下の方法と比べると最もきれいに見える。

SetMemoryMax(2048, type=DEV_TYPE_CUDA)
X = "hoge.mkv"
AudioDub(LWLibavVideoSource(X), LWLibavAudioSource(X))
ConvertToYV12()
AssumeTFF()
OnCPU(2)
KFMDeint(mode=1, preset="Slower", nr=true, cuda=true)
OnCUDA(2)
SelectEven() #フレームを間引き、29.97fpsに戻す。PS1/ニンテンドウ64(一部ソフトは除く)など、描写フレームが29.97fpsのソフトが対象になる。確認方法のひとつとして、このフィルターを無効化した状態でフレーム送りを行い、止まっている描写物(メニュー画面やUIなど)が上下に揺れて見える場合は、必要です。

# ---------------------------------------------------
# 【PAR補正】本来、テレビなどで行われるPAR補正の再現をする。
# ソースが4:3の場合(DAR 4:3)は、(640, 480)にする。ソースが16:9の場合(DAR 16:9)は、(854, 480)にする。
Spline36Resize(640, 480)
# ---------------------------------------------------
# 【HDリサイズ】(1440x1080)。ソースが16:9の場合は、(1920, 1080)にする。
Spline36Resize(1440, 1080)
# 実写・アニメ・ゲーム映像いずれでもバランスよくリサイズできる。本スクリプトでは基準として使用。基本的にはこれを使えば問題ないと思います。

# 【HDリサイズのオプション(用途に応じて切り替え)】
# BlackmanResize(1440, 1080)
# 実写映像やノイズを含む素材向き。LanczosResizeをベースにリンギングを抑制した派生フィルタ。
# Spline36との差は私では判らない程度なので、使用機会が稀。

# PointResize(横幅, 縦幅)
# ドット絵(FC/SFC, etc.)や2D(PS1/SS, etc.)ゲーム向き。
# ピクセル単位を保ったまま拡大するため、補間によるボケは出ない。
# 3D(PS1/PS2, etc.)ゲームでも、当時の粗さを意図して残したい場合はこれを使う。
# ドットを正確にリサイズするために、整数倍リサイズ推奨 例:(1280, 960) or (1920, 1440) 。
# ---------------------------------------------------

ColorMatrix(mode="Rec.601->Rec.709", clamp=0) # 色空間を、BT.601からBT.709に変換する。
OnCPU(2)

CPUのみで使用する場合は、後述 4)【CPUのみで動作】 を参考に一部変更するとできるかもしれません。

②フィールド分離後を補間するスクリプト。【調整中です。使わないでください。不要かもしれません。2026-01-17】
・少しボケて見える。

X = "hoge.mkv" #【調整中です。使わないでください。不要かもしれません。2026-01-17】
AudioDub(LWLibavVideoSource(X), LWLibavAudioSource(X))
AssumeTFF()
SeparateFields()
#KNLMeansCL(last, d=1, a=1, s=3, h=1.0, channels="Y") #デノイズ
AssumeFPS(59.94)
Spline36Resize(640,480) #テレビで行われるPAR補正の再現をする。4:3に補正する。

# HDリサイズ(1440x1080)。ソースが16:9の場合は、(1920, 1080)にする。
Spline36Resize(1440, 1080) # 実写・アニメ・ゲーム映像いずれでもバランスよくリサイズできる。本スクリプトでは基準として使用。基本的にはこれを使えば問題ないと思います。

# HDリサイズのオプション(用途に応じて切り替え)
#BlackmanResize(1440, 1080) # 実写映像やノイズを含む素材向き。LanczosResizeをベースにリンギングを抑制した派生フィルタ。Spline36との差は私では判らない程度なので、使用機会が稀。
#PointResize(1440, 1080) # ドット絵(FC/SFC, etc.)や2D(PS1/SS, etc.)ゲーム向き。ピクセル単位を保ったまま拡大するため、補間によるボケは出ない。3D(PS1/PS2, etc.)ゲームでも、当時の粗さを意図して残したい場合はこれを使う。

ColorMatrix(mode="Rec.601->Rec.709", clamp=0) # 色空間を、BT.601からBT.709に変換する。

②ffmsを使う方法
※L-SMASH Works でどうしても読み込めない場合の選択肢です。
使う機会はほぼないと思いますのでスクリプトを修正していません。
もし使用される場合は他スクリプトを参考にして変更してください。
放置している理由は動作確認をする気がないからです。
 Release 2.40 · FFMS/ffms2 · GitHub から、ffms2-2.40-msvc.7zをダウンロードし、解凍。
・x64 の中身を C:\Program Files (x86)\AviSynth+\plugins64+
・x86 の中身を C:\Program Files (x86)\AviSynth+\plugins+
3a)
以下のスクリプトを .avsファイルにコピペする。
.avsファイルは、動画ファイルと同じフォルダに配置する。

SetMemoryMax(2048, type=DEV_TYPE_CUDA)
X = "hogehoge.mkv"
FFIndex(X)
AudioDub (FFVideoSource(X), FFAudioSource(X))
ConvertToYV12()
AssumeTFF()
OnCPU(2)
KFMDeint(mode=1, preset="Slower", cuda=true)
OnCUDA(2)

↓キャッシュファイルを生成しないバージョン↓(非推奨)
 こっちで良いと思います。基本1回しかしない工程なので。
←良くなかった。
インデックスファイルはエンコード処理速度や精度に影響するため、キャッシュ非生成は非推奨、だそうです。(Gemini談)

SetMemoryMax(2048, type=DEV_TYPE_CUDA)
X = "俺はもう⋯⋯用済みだ⋯⋯!クッ⋯⋯(目に湛えた涙を見せないように顔をそらす).mkv"
AudioDub(FFVideoSource(X, cache=false), FFAudioSource(X, cache=false))
ConvertToYV12()
AssumeTFF()
OnCPU(2)
KFMDeint(mode=1, preset="Slower", cuda=true)
OnCUDA(2)

3b)
hogehoge.mkv を動画ファイル名にする。
AviUtlに、.avsファイルをドラッグアンドドロップし、出力する。


4)マイク音声を分離

※マイク不使用の場合は省略可。
録画ファイルからマイク音声を分離する。
□-□-□-□-□-□-□-□-□-□-□-□-□-□-□-□-□-□
ffmpeg のパスを通す。
「ffmpeg 環境変数」で検索してパスを通すまでをする。
□-□-□-□-□-□-□-□-□-□-□-□-□-□-□-□-□-□
メモ帳を開き、以下のどちらかをコピペする。
・ファイル名を「(ファイル名).bat」にして保存する。
・作成した.batファイルに録画ファイルをドラッグ&ドロップする。

↓元動画と同じフォルダに出力するバージョン↓

@echo off
set INPUT=%~f1
set OUTPUT=%~dp1%~n1

%~d0
cd %~d0%~p0

ffmpeg -i "%INPUT%" -map 0:2 -vn -acodec copy "%OUTPUT%_mic.flac"

pause

( ↓ 出力先を選択するバージョン ↓  )
出力先フォルダ名2バイト文字使用できません
上のスクリプトなら、出力先フォルダ名が2バイト文字でもいけます。今試したらできました。フシギダネ。

@echo off
set INPUT=%~f1
set "OUTPUT=出力先\%~n1"

%~d0
cd %~d0%~p0

ffmpeg -i "%INPUT%" -map 0:2 -vn -acodec copy "%OUTPUT%_mic.flac" 

pause

ダネフシャ(「出力先」の部分は、絶対パスで指定する)
ダネダ(出力したいフォルダを作って、Shift + 右クリック から パスのコピー)
ダネダネ(後は貼っつけて、パスに付属するダブルクォーテーションを消して上書き保存するだけ)

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
・工程2b)で他の音声コーデックにした場合は拡張子を変更する。(wavなら .wav 、aacなら .aac です)
・ちなみに0:0は録画映像、0:1はトラック1(ゲーム音)、0:2はトラック2(マイク音)
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

ファイルごとの音量を統一する場合は speechnorm を掛ける。
〈自分用〉ローカル録画用OBSマイクエフェクト|kituta 


注釈など

1)【おまけの工程3で使用している ffms2】

ffms2 には 2024-5-28 リリースの新バージョンが公開されていますが、64bit版のみになっています。
AviSynth Neo は 64bit ですが、AviUtl が 32bit なので、AviSynth Neo は 32bit で動作するため、ffms2 64bit は動作しないはずらしいのですが⋯⋯。
32bitと64bitの両方を2.40に合わせたほうが、安定はすると思います。
*(私は気にせず 64bit のみ最新版のままにします。問題が起こるまでは)

*(AviUtl ExEdit2では、少なくとも、この記事でしたいことはできませんでした。2025-08-13現在時点) → 7)【AviUtl2で使用する】 に追記
※ffms2 64bit に関しての実験を記事の下の方に書きます。
 (こういう書き方をすると、ゴチャゴチャするのだよね)

2)【おまけの工程4 - マイク2本以上の出力例】

2本のマイク入力を出力する場合
まず、OBSの録音トラックの設定をする。
(2本めのマイク入力をトラック3にする)

ffmpeg -i "%INPUT%" -map 0:2 -vn -acodec copy "%OUTPUT%_mic.flac" -map 0:3 -vn -acodec copy "%OUTPUT%_mic_2.flac" 

.batファイルの、該当欄を↑のようにする。
マイクを3本4本と増やす場合は法則を推理して増やす。
 ※.aacや.wavを使用時は拡張子を変更する。
(OBSの制約上、5本までいけるはずです。⋯⋯5人実況?)
・ファイル→設定→音声→グローバル音声のマイク音声は4本までです。
それ以上を追加する場合は、ソース→右クリック→ソースを追加→音声入力キャプチャを追加して、音声入力キャプチャソースのデバイスにマイクを指定する。
ちなみに、私は
・トラック1→ゲーム音声
・トラック2→未処理のマイク音声
加工処理の内容がこちら 〈備忘録〉マイク音声加工プラグインエフェクト。設定。音量バランス。ゲーム実況。|kituta

3)【おまけの工程4 - マイクの分離】

OBSの再多重化を使うとマルチトラックのmp4ファイルになりますので、マルチトラック読み込みのできる編集ソフトや個々人の編集手法によっては、スクリプトでマイク音声を分離する工程は不要です。

実のところ、OBSの再多重化をすると音声が1トラックに纏められてしまうのだろうと思い込んでいました。
ですが実際には、試してみるとマルチトラックのmp4になり、驚きで顎がブラジルまで落ちました。嘘です。

4)【CPUのみで動作】

KFMDeint 内の CUDA を使用するには、CUDA 対応 GPU が必要です。
CUDA対応GPUがない場合は、以下のスクリプトを使いCPU処理を用いる。
 - QTGMCを導入する。
QTGMCは、必須プラグインファイルが多いですが、rainman74氏がまとめてくださっています。
Release AviSynthNeo 3.4.0-r2827-CUDA-12 · rainman74/AviSynthNeo · GitHub
C:Windows\System32 の中に FFTW3.dll、libfftw3f-3.dll をコピーする。DevIL.dllは最初からたぶん入っています。AviSynth.dllを上書きすると基盤のAviSynth+のバージョンが新しいものになります。plugins64+の中身も、次の工程で扱う自身のplugins64+フォルダにない場合はコピーする。
Releases · rigaya/AviSynthCUDAFilters
AviSynthNeo.Shared.Plugins.zip の中にQTGMC一式が含まれています。その他にも、便利な主要フィルターの詰め合わせです。詰め合わせてあるので、環境構築に便利です。ありがたいです。
※下記のスクリプトエラーが出たら、フィルタープラグインが足りていないということです。なんかよく分からないなら、エラー内容をGeminiに打てば解決方法を探してくれます。便利ですね。

yadifmod2があらへんやないけぇ!

・このエラーの場合は、yadifmod2.dllをplguins64+フォルダに入れる。
Releases · Asd-g/yadifmod2

・AVI版

SetMemoryMax(2048)
srcfile="Test.avi"
AviSource(srcfile)
ConvertToYV12()
AssumeTFF()

KFMDeint(mode=1, preset="Slower", cuda=false)

# ---------------------------------------------------
# 【PAR補正】本来、テレビなどで行われるPAR補正の再現をする。
# ソースが4:3の場合(DAR 4:3)は、(640, 480)にする。ソースが16:9の場合(DAR 16:9)は、(854, 480)にする。
Spline36Resize(640, 480)
# ---------------------------------------------------
# 【HDリサイズ】(1440x1080)。ソースが16:9の場合は、(1920, 1080)にする。
Spline36Resize(1440, 1080)
# 実写・アニメ・ゲーム映像いずれでもバランスよくリサイズできる。本スクリプトでは基準として使用。基本的にはこれを使えば問題ないと思います。

# 【HDリサイズのオプション(用途に応じて切り替え)】
# BlackmanResize(1440, 1080)
# 実写映像やノイズを含む素材向き。LanczosResizeをベースにリンギングを抑制した派生フィルタ。
# Spline36との差は私では判らない程度なので、使用機会が稀。

# PointResize(横幅, 縦幅)
# ドット絵(FC/SFC, etc.)や2D(PS1/SS, etc.)ゲーム向き。
# ピクセル単位を保ったまま拡大するため、補間によるボケは出ない。
# 3D(PS1/PS2, etc.)ゲームでも、当時の粗さを意図して残したい場合はこれを使う。
# ドットを正確にリサイズするために、整数倍リサイズ推奨 例:(1280, 960) or (1920, 1440) 。
# ---------------------------------------------------

ColorMatrix(mode="Rec.601->Rec.709", clamp=0) # 色空間を、BT.601からBT.709に変換する。
return last

.mkv版(未試験)↓

SetMemoryMax(2048)
X = "hoge.mkv"
AudioDub(LWLibavVideoSource(X), LWLibavAudioSource(X))
ConvertToYV12()
AssumeTFF()

KFMDeint(mode=1, preset="Slower", cuda=false)

# ---------------------------------------------------
# 【PAR補正】本来、テレビなどで行われるPAR補正の再現をする。
# ソースが4:3の場合(DAR 4:3)は、(640, 480)にする。ソースが16:9の場合(DAR 16:9)は、(854, 480)にする。
Spline36Resize(640, 480)
# ---------------------------------------------------
# 【HDリサイズ】(1440x1080)。ソースが16:9の場合は、(1920, 1080)にする。
Spline36Resize(1440, 1080)
# 実写・アニメ・ゲーム映像いずれでもバランスよくリサイズできる。本スクリプトでは基準として使用。基本的にはこれを使えば問題ないと思います。

# 【HDリサイズのオプション(用途に応じて切り替え)】
# BlackmanResize(1440, 1080)
# 実写映像やノイズを含む素材向き。LanczosResizeをベースにリンギングを抑制した派生フィルタ。
# Spline36との差は私では判らない程度なので、使用機会が稀。

# PointResize(横幅, 縦幅)
# ドット絵(FC/SFC, etc.)や2D(PS1/SS, etc.)ゲーム向き。
# ピクセル単位を保ったまま拡大するため、補間によるボケは出ない。
# 3D(PS1/PS2, etc.)ゲームでも、当時の粗さを意図して残したい場合はこれを使う。
# ドットを正確にリサイズするために、整数倍リサイズ推奨 例:(1280, 960) or (1920, 1440) 。
# ---------------------------------------------------

ColorMatrix(mode="Rec.601->Rec.709", clamp=0) # 色空間を、BT.601からBT.709に変換する。
return last

5)【リサイズに関して】

3:2 ( 720x480 )で録画する理由と
  4:3 ( 640x480,1440x1080, … )が適切なリサイズの理由
少なくとも、GC/Wii/PS1/PS2などのゲーム機では、制作側が想定するゲーム映像画面は 4:3 (PS2は一部16:9もあり)ですが、S端子から出力する映像は 3:2(720x480) です。

720x480 を、そのまま 1920x1080 (16:9) に拡大すると、横に間延びした映像になります。
ゲーム画面のアスペクト比を再現した上で拡大するには、4:3のアスペクト比、1440x1080 にします。

▣NTSC規格のアスペクト比の本来の運用
1.制作した映像そのものは 640x480。
2.映像を電波信号や物理媒体へ圧縮するために、720x480に引き伸ばす。(アナモルフィック)
  この時に、ピクセルアスペクト比(PAR)がちょっと横長(横1:縦約0.9091)の非正方形になる。
   ※720x480はNTSC規格。
   ※この規格内で高画質化のために詰め込めるだけ詰め込んで、テレビ側で補正する運用をしていた。テレビやVHS、ゲーム機などNTSC規格で出力するものは基本同じだと思う。
   ※アナモルフィック:横長の映像(縦を圧縮した映像)
3.720x480にした映像を、「これは本来4:3の映像だよ」というアスペクト比情報と一緒に受信装置に送信する。
4.受信装置(テレビなど)は、720x480映像とアスペクト比情報を受け取ると、3:2を4:3に補正をして、ちょっと横長の非正方形ピクセルを正方形ピクセルに戻す。
  つまり、アナモルフィック非アナモルフィックデスクイーズアナモルフィックする。
   ※カタカナばっかりだ!
   ※Desqueeze Anamorphic(Desqueeze→圧縮を解く)
   ※簡単に言えば、横長にしたものを元に戻すだけ、ですね。
   ※厳密にはNTSC規格はアナログのため、ピクセルというデジタルの概念は存在しない。
   ※非正方形/正方形ピクセルは、アナログをデジタルにする際に生まれた概念と言えます。(「元の映像を横長にしているから非正方形ピクセルだね!」みたいな。現代の基準で型にはめて表現している感じですね)
5.640x480の映像が映る。
 
PCでは、アスペクト比情報を処理できないので、非正方形ピクセルの 720x480(3:2)をそのまま正方形ピクセルとして認識して記録してしまう。
なので、3:2(720x480)を 4:3 に補正をして、工程4で本来テレビがするピクセルアスペクト比補正(PAR補正)の再現をする。
※ゲームに依ってゲーム内解像度が 512x448 だったりなんだったりまちまちなこともあるようですが、映像出力はNTSC規格を経由しているため、一様に 4:3 のリサイズ処理をしていいようです。(Geminiの情報)

・例外
NTSCにも16:9ソースがあります。
DVDや、HDのテレビ放送をS端子で録画する場合、アナログ放送末期の番組などが該当するそうです。(とChatGPTは、そう仰る)
720x480(16:9のスクイーズビデオ)の本来の表示は、 正方形ピクセルに変換すると 854x480 (16:9)が適切です。(とChatGPTは、またそう仰る)
この映像は 16:9 なので、1920x1080 にすると破綻なく表示できる。(とChatGPTは、またまたそう仰る)

ここは、正味いじらなくてもいいけど⋯⋯、の部分

1)【きれいなインタレを渡す】
アマレコTV4→設定→グラフ1→gv-usb2→デバイス設定→VID Deinterlace Method → WEAVE にする。
完全に無処理の映像をOBSに渡して録画をすることで、インタレ解除時にKFMにとって理想の映像を渡せるらしいです。
どの設定で録画しても、見た目に大きな差はありませんが、録画データはソースに近い状態で保存した方が、高品質な後処理に向いています。
2)【色味】
S端子で出力される映像(PS1/PS2/GCなど含む)は BT.601 で録画されます。後から BT.709 に変換することで、色を正確に再現できます。
OBS の設定で直接 BT.709 にして録画しても、見た目に大きな差はありませんが、録画データはソースに近い状態で保存した方が、高品質な後処理に向いています。

6)【fpsに関して】

基本は、インタレ解除をして 29.97fps を 59.94fps にする。
しかし、AVI形式で録画をすると(GV-USB2の影響かは不明)録画fpsにブレが生じます。
※OBS+mkvで録画するとfpsはブレませんので、気にする必要は何もありません。

ちょっと少ない

 ※.avsの末尾に info() を書くとfpsを確認できます。
これは、規格の倍数の59.94fpsや一般的な60fpsと僅かに違います。
59.94fpsや60fpsにこれらを固定すると、理論的には、音ズレなどの原因となってしまいます。

ちなみに、AviUtlからそのまま出力すればそのままのfpsで出力できます。(出力保存画面の下で確認できる)

59.407fps

Q.で、どうすればいいの?
A.気にしなくても大丈夫です。

音ズレなどの問題が実際に生じることは非常に稀だと思われます。
 (少なくとも私の環境では起こったことがありません)
fpsのブレに関しても、最近の編集ソフトには自動補正機能(リサンプリング)があるため、59.94fpsの動画を60fpsのプロジェクトに入れたり、59.94fpsと60fpsの動画を混在させたりしても自然に処理されます。
が、ゲーム映像の場合は、リサンプリングが掛かるとブラーがかかったように見えますのでオフをおすすめします。
別の見方をすると、リサンプリングをかけると映像が滑らかに見えますのでお好みで選択してください。

※"最近"という表現は感覚的なものですね。
 また、自動補正の名称や挙動は編集ソフトによっても様々ですので、ご自身で確認してください。
※動画としての視聴時の快適性を求めるならリサンプリングをオン、フレーム送りをしても補間生成されたブラーフレームがない等の厳密性をゲームの録画映像として求めるならリサンプリングをオフにするなど。

・正確性を残したい場合
59.94fps(もしくはインタレ解除後の固有fps、240pの場合は29.97fps)に最終出力まで統一します。
ソフト側の補正機能も自然だと思いますが、厳密に一致させたい場合は使わない方が良いです。
補正を使わない場合は、足りないフレームをどこかのタイミングで複製するなどして出力fpsに自動的に合わせられます。

※AviUtl2でfpsを完全に一致させたい場合は" info() "などでfpsを確認後に、AviUtl2側を手動で合わせる必要があります。
AviUtl2のリサンプリング処理関係はわかりませんので、録画データのままfpsを維持したい場合は旧AviUtlを使ったほうが良いと思います。
OBSで録画をした場合は、録画時の設定によりfpsは固定されてますので、29.97か59.94をする。

7)【AviUtl2で使用する】

※L-SMASH-Worksを使ってください。

🍚重要🍚
・左下(初期設定)のシーンリストのRootを右クリック→シーンの設定から、以下を設定する。
 ・解像度→ 1440x1080(例外あり)
 ・フレームレート→ 29.97 か 59.94(もしくは30か60)
にする。
プリセット機能を使うと楽ですね。
▣解像度に関して
 ・AviSynth(.avs)でリサイズをする場合は、シーンの解像度設定もそれに合わせる。例:1440x1080
 ・16:9ソースの場合は、1920x1080
 ・出力時にvppリサイズを使う場合は、720x480
 ・編集時にリサイズをする場合は、720x480

*(AviUtl2では、解像度・fpsにノータッチにはできない様子(2025-08-17))
*(私は今後も基本は旧AviUtlを使うつもりでございますが、投稿すると結局60fpsになるので、AviUtl2で59.94fps固定でもいい気がしてきたでござる)
fpsは、投稿した動画の数値のままです。例えば、59.94fpsで投稿した動画は、59.94fpsのまま、再生されます。
(YouTubeプレイヤー上の"1080p60"表記を、「YouTube側で60fpsに変換しておいたよ」という意味だと勘違いをしていました)

8)録画環境を変更したら録画テストをしよう。

OBSの録画設定や音声設定を変更したり、パソコンのキャプボや音声端子を抜き差ししたりした後は、必ず設定を再確認し、必ず録画テストをする
OBSの設定ミスや設定忘れ、音声デバイスをパソコンが自動で(勝手に💢)変更する等により
・画質が悪い。
・音声が録れていない。
・ゲーム音とマイク音声を同じトラックに録音してしまった。
などの可能性があります。
撮り直しが利く場合はよいですが、そうではない場合は結構落ち込みますので、自戒を込めて、必ず録画テストをする

9)色空間の変換について

※モニターの設定によっては違いが分かり難うございます。

avsスクリプトの読み込みは、「srcfile=hoge.avi"  AviSource(srcfile)」 の形式を使用。
このGIFは、分かり易さと分かり難さ、両方の性質を併せ持つ♥

AviUtlの色変換の設定が「入力-出力」ともに「自動-自動」の場合、縦解像度が「720以下-720以下」なので、色空間が「601-601」のままにAviSynthへと渡される、そしてAviSynthのフィルターが色空間を「601-709」に変換処理をしている、と思います。

【図】
     ---AviUtl---    →    ---AviSynth---     →  ---プラグイン出力(等?)---
入力 601    出力 601  →  入力 601    出力 709  →  入力 709        出力 709
ちなみに、mkvとLWLibavVideoSourceを使った場合でも同様の結果が見えます。

AviUtlの色変換の設定は、「自動‐自動」で問題ないようです。
FFmpegかVirtualDub2を使えばブラックボックスであるAviUtlの色変換処理を経由せずにAviSynthに処理を渡せますが、そこまでする必要性を私が感じませんのでここまでです。

例:
1. avsスクリプトの最後に"return last"を追記する。
2. 以下のFFmpegコマンドを使う。
ffmpeg -i "Z:\piyo\hoge.avs" -vf setfield=prog -c:v hevc_nvenc -rc constqp -qp 10 -c:a aac -b:a 256k "Z:\piyo\hogehoge.mp4"

※FFmpeg出力を使うメリットは、AviUtlがなかなか読み込めずエンコードに至れないような、処理の重いスクリプトでもエンコードをすぐに開始できる点です。

【LW48 output】
【AviUtl】L-SMASH Worksの設定方法(2/2)【入力プラグイン】 | AviUtlの易しい使い方
では、LW48 outputを使用すると「色変換誤差が発生しない」等が有るようですが、私は未検証です。

※左上の拡大は、拡大位置が僅かに違います。
この検証では明確な違いが見られません。

【参考】
【AviUtl】色変換の設定について【BT.601とBT.709】 | AviUtlの易しい使い方
【AviUtl】RGB・YUV動画の色を劣化させないコーデックの設定 | AviUtlの易しい使い方

10)ゴーストの処理(逆テレシネ)

①プログレッシブフレーム
(縁の黒枠はスクショが雑なだけです)
②クロマゴーストのあるフレーム(元インターレースフレーム)
③その次のプログレッシブフレーム

29.97fpsではないフレームレートの映像を29.97fpsに変換したテレシネ映像を、インターレース解除をして29.97fpsにするとゴーストが起こる。
画像例のプリレンダムービーは14.985fpsなので、録画した29.97fps映像に(インタレ解除をして59.94fpsにした後、フレームを半分に間引き29.97fpsにし、)逆テレシネ処理をして14.985fpsにする。
↓結果↓

①と同じプログレッシブフレーム
②不要なフレームを省きました。

【必要なもの】
・TIVTC
Releases · pinterf/TIVTC
から、TIVTC-v(最新).7zをダウンロード。解凍。
C:\Program Files (x86)\AviSynth+\plugins64+ に入れる。

SetMemoryMax(2048, type=DEV_TYPE_CUDA)
X = "hoge.mkv"
AudioDub(LWLibavVideoSource(X), LWLibavAudioSource(X))
ConvertToYV12()
AssumeTFF()
OnCPU(2)
KFMDeint(mode=1, preset="Slower", nr=true, cuda=true)
OnCUDA(2)

# フレーム間引き 59.94 -> 29.97
SelectEven() #フレームを間引き、29.97fpsに戻す。PS1/ニンテンドウ64(一部ソフトは除く)など、描写フレームが29.97fpsのソフトが対象になる。確認方法のひとつとして、このフィルターを無効化した状態でフレーム送りを行い、止まっている描写物(メニュー画面やUIなど)が上下に揺れて見える場合は、必要です。

#----逆テレシネ-----------------------------------------------------------
TDecimate(mode=1, cycleR=1, cycle=2, denoise=false, display=false)
#------------------------------------------------------------------------
# cycleR=1, cycle=3
# p→i→p のiを除去するため、3フレームごとに1フレームを間引く。(M-in-Nが1-i-3)
#-----------------------------------------------------------------------┐
# 変換元と変換先  , 正確な計算式    , 使用する値
# 59.94 -> 29.970 , "30,000/1,001" , cycleR=1, cycle=2 (または SelectEven() )
# 59.94 -> 23.976 , "24,000/1,001" , cycleR=3, cycle=5
# 29.97 -> 23.976 , "24,000/1,001" , cycleR=1, cycle=5
# 29.97 -> 19.980 , "20,000/1,001" , cycleR=1, cycle=3
# 29.97 -> 14.985 , "15,000/1,001" , cycleR=1, cycle=2
# 29.97 -> 11.988 , "12,000/1,001" , cycleR=3, cycle=5
# 29.97 ->  9.990 , "10,000/1,001" , cycleR=2, cycle=3
#-----------------------------------------------------------------------┤
# fps確認用
# cycleR=1, cycle=20, display=true
# 大きい数字と小さい数字から推測する。
#-----------------------------------------------------------------------┘

# レターボックス - 左右の黒帯を、さらなる深き漆黒へ染め上げる。
#Letterbox(0,0,46,32,$000000) # $00FF00 確認用の緑色

# ---------------------------------------------------
# 【PAR補正】本来、テレビなどで行われるPAR補正の再現をする。
# ソースが4:3の場合(DAR 4:3)は、(640, 480)にする。ソースが16:9の場合(DAR 16:9)は、(854, 480)にする。
Spline36Resize(640, 480)
# ---------------------------------------------------
# 【HDリサイズ】(1440x1080)。ソースが16:9の場合は、(1920, 1080)にする。
Spline36Resize(1440, 1080)
# 実写・アニメ・ゲーム映像いずれでもバランスよくリサイズできる。本スクリプトでは基準として使用。基本的にはこれを使えば問題ないと思います。

# 【HDリサイズのオプション(用途に応じて切り替え)】
# BlackmanResize(1440, 1080)
# 実写映像やノイズを含む素材向き。LanczosResizeをベースにリンギングを抑制した派生フィルタ。
# Spline36との差は私では判らない程度なので、使用機会が稀。

# PointResize(横幅, 縦幅)
# ドット絵(FC/SFC, etc.)や2D(PS1/SS, etc.)ゲーム向き。
# ピクセル単位を保ったまま拡大するため、補間によるボケは出ない。
# 3D(PS1/PS2, etc.)ゲームでも、当時の粗さを意図して残したい場合はこれを使う。
# ドットを正確にリサイズするために、整数倍リサイズ推奨 例:(1280, 960) or (1920, 1440) 。
# ---------------------------------------------------

ColorMatrix(mode="Rec.601->Rec.709", clamp=0) # 色空間を、BT.601からBT.709に変換する。

OnCPU(2)
return last

【使い方】
ムービーシーンを逆テレシネ処理後に、編集で結合する。
【fps確認用】
cycleR=1, cycle=20, display=true
大きい数字と小さい数字から推測する。

Q.14.985fpsに逆テレシネしても、通常のプレイ動画とムービー等を結合したら、29.97fps(もしくは59.94fps/30fps/60fps)に合わせてフレームがかさ増しされるだけでは?
A.かさ増しされます。が、ゴーストのない綺麗なかさ増しです。除霊済み!👻<ひぇぇ
Q.工程を増やしてまでする意味はあるの?
A.シンプルなインタレ解除をした映像のモタつきやゴーストが気になるならする意味がありますが、自己満足です。通常再生ではゴーストは気になりません。フレーム単位で一時停止して動画を視聴する人なら気になるかもしれませんが、そんな人は極稀にしかいません。👻<俺は倍速で見るからどうでもいいよ!🦀<除霊してやる!👻<ひぇぇ

11)PointResizeのオプション

〈使い方例〉
整数倍に拡大後に、扱いやすい解像度に縮小する方法。
PointResize(1920, 1440) を掛けた後に 外部フィルターの AreaResize(1440, 1080) もしくは Spline36Resize(1440, 1080) を掛ける。
AreaResize:Plugins64+に入れる。

・上記の2段階式では、ピクセルを3倍にしてから0.75倍にする。ことで、PointResizeの特性を活かした拡大と、編集などで扱いやすい解像度を両立する。 
・PointResize(最近傍補間)のみの場合、640x480→1440x1080は2.25倍のため、1ピクセルが2.25ピクセルになってしまう。
0.25ピクセルの端数を描画できないため、「ある列は2倍して2ピクセル、次の列も2倍、その次は3倍して3ピクセル」のように、ピクセル毎に拡大率を変えて帳尻を合わせ、1440x1080にする。
そのため、比較GIF②のように、描画位置がズレたり、フォントの太さが変わったりする。

比較GIF①
TOTALのOやAの右の縦線が、画像Bでは細くなっている。
クリックで拡大する。
比較GIF②
Sは、GIMPの補間なしリサイズでソースフレームを拡大したもの。
GIF化によって画質が劣化していますので、もうちょっと実際はきれいです。

AreaResize は縮小用のプラグインです。※PAR補正に使用しない理由は、「720x480 → 640x480」のように同値のリサイズがある場合、あんじょう動かないためです(Aktanusa氏版のみ?)。AreaResize(Chikuzen氏オリジナル版。32bitのみのようですので、他の環境と相性が合いません)。Aktanusa氏版だと20分のところ、Chikuzen氏オリジナル版では4時間かかるそうです。
Claude.aiを使用し不具合を修正したもの:AreaResize
使用する場合は、PAR補正再現も置き換えられます。
※kituta版の速度は、Aktanusa氏版の約40%です。PAR補正再現と2段階式の二箇所にAreaResizeを用いると、約35%の速度です。
※PAR補正再現にもAreaResizeを用いる有意性はないと思いますので、Aktanusa氏版を2段階式のみに使う方式でも問題ないと思います。

・おまけの比較
PAR補正再現を、AreaResizeとspline36Resizeとで比較する。

クリックで拡大する。

spline36でPAR補正再現をした方がくっきりしていい感じに見える!
⋯⋯そっかぁ。

12)『2) OBSの設定』の『2b)』の試案(未検証)

KFMDeintでインタレ解除時に、720x480、fpsが29.97であれば、理屈的には問題ないはずです。
なので、解像度とfpsを録画時に横1440x縦480、59.94fpsにし、ゲーム画面を左側に置き、カメラや他の映像を右側に置く。録画後、何かしらで、録画映像の左側720x480のみを範囲指定、fpsを29.97に間引き、流れ通りにインタレ解除を行う。
カメラや他の映像のある右側は、59.94fpsのまま、クロップなどで別処理を行えば2つの映像を録画できる、かもしれない。

もしかしたら、録画解像度を1920x1440にしていても、録画ソースの映像は720x480のまま配置し、録画後に範囲指定で処理すれば問題ないのかもしれない。
その場合、カメラや他の映像の配置空間を広く取れるので、画質を確保できる。

参考

AviSynth導入
• 【VOICEROID解説】茜ちゃんが教えるインターレース解除【次世代機編】• 【VOICEROID解説】茜ちゃんが教えるインターレース解除【レトロゲーム機編】
GPU CUDA GPU Compute Capability | NVIDIA Developer
インターレース インターレース処理とは | 音響・映像・電気設備が好き
avisynth書式 AviSynth入門/書式と引数 - AviSynth.info AviSynth入門/引数の省略とデフォルト値 - AviSynth.info
lastって? にーやんのアーカイブ: AviSynthの文法
AvsPmodNeoの使い方 AvsPmodの使い方 | EncTools
ChatGPT
Gemini

使用画像:
エクスターミネーション
テイルズオブデスティニー
チョロQ HG3

ffms2 64bit に関して

読む必要のない実験|kituta
(インタレ解除とは関係がないので、読まなくてもいいです)
(L-SMASH Works推奨なので、本当に読まなくてもいいです)

更新履歴

2025-08-13 公開・修正。
2025-08-14 文言を追加。
       ffmpegスクリプトの修正。
       ffms2の謎実験。
2025-08-16 文章修正。
2025-08-17 AviUtlの設定。
      リサイズに関して。
      fpsに関して。
      AviUtl2に関して。
      URLの再設定。
2025-08-31 L-SMASH Worksを推奨に変更。
      スクリプトをL-SMASH Works使用に変更。
      リサイズに関して。
       →説明文の追記変更、スクリプト追記。
      音声コーデックをOBSデフォルトのaacに統一。
      表現をちょこちょこ変更。
2025-09-02 文章を整理。
      ffmpegの導入段階の位置を変更。
2025-09-05 リサイズアルゴリムをlanczosに変更。
      GV-USB2に関して追加。
2025-09-10 前置きを追記。
      240pの場合のスクリプトの記載位置を変更。
      8)【録画環境を変更したら録画テストをしよう。】を追記
      なんか追記。
2025-09-25 録画設定を加筆。
2025-10-12 【 240p (N64/PS1など)の場合】に記事リンクを追加。
2025-10-25 【 240p N64/PS1など)の場合】に注意を追加。
2025-11-18 【 240p (N64/PS1など)の場合】を加筆修正。
      2) OBSの設定を修正。
      8) 動画を出力する。のリサイズ関連の記述を修正。
2025-11-20 OBS録画の長所と短所を修正。他をちょこちょこ修正。
2025-11-27 【 240p (N64/PS1など)の場合】を加筆修正。
      【 240p (FC/SFC/N64/PS1など)の場合】を【 240p (N64/PS1など)の場合】に修正。
      録画設定のデフォルトを10bitから8bitに変更。
2025-11-28 録画設定の色空間をBT.601前提にし、avsに色空間変換フィルタを追加。一部文面の修正と削除。
2025-12-03 リサイズフィルタ関連を変更。PAR補正のフィルタを追記。
2025-12-14 いくつかの修正と追記。
2025-12-17 2) AviSynthNeo に追記。
2025-12-26 文章を少し修正。4)AviUtlと5)アマレコTVの順番を変更
2026-01-17/18 一部の文章を修正
2026-01-25 色空間の変換に関してを変更して、同日夜に取り消し。「9)色空間の変換について」を追記。
2026-02-02 リサイズフィルタ関連の文言を修正。
2026-02-15 注釈など- 4)【CPUのみで動作】を修正。
2026-02-18 10)ゴーストの処理(逆テレシネ)を追加。
2026-03-28 ゲーム音を青色のLINE入力端子に指すを追記。
2026-03-30 可読性確保のためスクリプトを修正。PointResize関連を変更。
2026-04-09 「11)PointResizeのオプション」を追記。
2026-04-13 「11)PointResizeのオプション」に追記。
2026-06-11 「2c2)」ノイズ除去の項目を追記。
2026-07-11 7)【AviUtl2で使用する】の、投稿した動画のfpsについての勘違いを訂正
2026-07-21 2d)に注釈「どれを選ぶのか」を追記。2e)に注釈「モニターと出力」を追記。

いいなと思ったら応援しよう!