FFmpeg を使用して、ドラッグ&ドロップした動画ファイルを対話的かつ柔軟に一括再エンコードするための PowerShell ユーティリティです。
ハードウェアエンコーディング対応、複数プラットフォーム自動最適化、テンプレート機能、高度なフィルタ処理などに加え、MiraBox等を用いた録画機能も備え、プロフェッショナルな動画処理を実現します。
| ハードウェア | 対応コーデック | 備考 |
|---|---|---|
| NVIDIA NVENC | H.264, H.265, AV1, VP9 | 最新RTX/GeForceで高速エンコード可能 |
| Intel QSV | H.264, H.265, AV1, VP9, mpeg2 ,mjpeg | 統合GPU/Arc/Xe での快適エンコード |
| AMD AMF | H.264, H.265, AV1 | RDNA 以降で AV1 対応 |
| CPU (Software) | H.264, H.265, AV1, VP9, VP8 | libx264/libx265/libsvtav1/libaom-av1/rav1e/libvpx など |
下記プラットフォーム向けに、ファイルサイズ上限・品質・コーデックを自動計算し、容量内で最大品質を実現:
| プラットフォーム | 上限 | 推奨設定 |
|---|---|---|
| 512MB | H.264 固定, 720p, AAC | |
| Discord | 10MB | 低ビットレート + HE-AAC/Opus |
| catbox.moe | 200MB | 任意コーデック選択可 |
| uguu.se | 64MB | 小容量向け最適化 |
| GitHub | 100MB | WebM/MP4 選択可 |
| GitHub Release | 2GB | 制限なし、高品質優先 |
| カスタム | 任意指定 | ユーザー定義サイズ |
- インターレース自動検出・解除 - MPEG2/古いビデオカメラの逆テレシネ、複雑なコーミング自動対応
- スケーリング・クロップ - 解像度自動調整やVR向けSBS変換(PSVR等)による最適化
- チャプター分割 - 章立てで自動分割・個別エンコード
- 字幕分割 - SRT/ASS ベースの分割処理
- 中間ファイル作成 - yuv444p/yuv422p の高品質中間形式(編集用)
- カスタムフィルタ - FFmpeg フィルタグラフ直接指定対応
品質方式を用途に応じて選択:
- CRF(Constant Rate Factor) - 品質ベース、可変ビットレート
- CRF+Maxrate - 品質 + ファイルサイズ上限(プラットフォーム対応)
- ビットレート - 固定ビットレート
- 2 Pass Bitrate - CPU エンコーダーの容量精密制御
よく使う設定をテンプレートに保存・再利用可能。
- PSVR向けSBS変換(フル、ハーフ、アスペクト比別クロップ対応)
- その他、ハードウェア・コーデック・品質を一括で切り替え可能
外部エンコーダー(自動検出・利用可能なもののみ表示):
- qaac - Appleの高速AACエンコーダー(HE-AAC/AAC-LC 自動選択)
- Nero AAC Encoder - 高品質AAC(-q 0.20 ~ 0.65)
- fdkaac - Fraunhofer FDKベース(VBR 1-5)
FFmpeg 内蔵:
- AAC - HE-AAC/AAC-LC, ビットレート指定( 非推奨 )
- Opus - 最新フォーマット(libopus)。Ambisonics(
ambisonic 1など)や非標準な多チャンネルレイアウトの入力を自動検出し、適切な-mapping_familyオプション(アンビソニックスは2、その他非標準は255)を自動付与してエンコードエラーを防ぐ機能を搭載。 - Vorbis - WebM 用(libvorbis)
- FLAC - ロスレス音声(高品質中間ファイル用)
- エンコード進捗(現在時刻、速度、fps, ビットレート)
- GPU/HW 処理情報(NVENC/QSV/AMF の実行状況)
- FFmpeg 標準エラー・警告の色付け記録
- 環境情報(OS, PowerShell, FFmpeg バージョン)
- 複数ファイル一括処理 - 複数動画を連続エンコード可能
- フォルダ指定対応 - ディレクトリ内の動画を自動検出
- メタデータ保持・抽出 - exiftool 統合で作成日時等の保持
| ツール | 用途 | インストール |
|---|---|---|
| FFmpeg | 動画エンコーディング | ffmpeg.org または PATH 環境変数に登録 |
| FFprobe | 動画情報取得 | FFmpeg に付属 |
| PowerShell 5.1 以上 | スクリプト実行 | Windows 10/11 に含まれる |
利用可能なもののみ自動検出され、メニューに表示されます:
| ツール | 用途 | URL | 備考 |
|---|---|---|---|
| qaac | AAC エンコーディング(高速) | GitHub | 長年にAppleが熟成させている。要iTunes |
| Nero AAC Encoder | 高品質 AAC | Nero | 古いが高評価、品質 -q で細かく制御 |
| fdkaac | Fraunhofer FDK ベース AAC | GitHub | VBR/HE-AAC 対応 |
| ツール | 用途 | インストール | 必須度 |
|---|---|---|---|
| exiftool | メタデータ処理 | exiftool.org | 低(メタデータ保持機能を使う場合のみ) |
| LosslessCut | ビジュアル編集補助 | MaCleaner 12 / GitHub | 低(設定例のみ) |
PATH に登録済みの場合 - そのまま利用可(下記スキップ)
ローカルインストール - 解凍後、パスを config.user.psd1 に記載
# 動作確認
ffmpeg -version
ffprobe -versionリポジトリ直下の config.user.psd1 を開き、各ツールのパスを設定:
@{
# --- 必須プログラムのパス ---
FfmpegPath = "ffmpeg" # PATH に登録済みなら "ffmpeg" のままで OK
FfprobePath = "ffprobe"
# --- 音声エンコーダー (オプション) ---
# 使用しない場合は空欄 "" のままにしておけ。
QaacPath = "qaac64" # または "C:\path\to\qaac64.exe"
NeroAacEncPath = "neroAacEnc"
FdkaacPath = "fdkaac"
# --- 補助ツール (オプション) ---
ExifToolPath = "exiftool"
LosslessCutPath = "C:\path\to\LosslessCutPortable.exe"
# --- その他 ---
NotifyScriptPath = "" # エラー通知用スクリプトのパス
}# PowerShell を 管理者 で起動後:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser# コマンドラインで実行(引数なしでヘルプ表示)
.\start.bat -hstart.batに動画ファイルをドラッグ&ドロップ- 対話メニューで以下を選択:
- 映像コーデック(H.264/H.265/AV1/VP9 など)
- ハードウェア(NVIDIA/Intel/AMD/CPU)
- 品質・プリセット・フィルタ
- 音声エンコーダー・ビットレート
- エンコード開始
# 単一ファイル
.\re-encode-AIOptimus.ps1 "C:\Videos\input.mp4"
# 複数ファイル
.\re-encode-AIOptimus.ps1 "C:\Videos\video1.mp4" "C:\Videos\video2.mkv"
# フォルダ指定(フォルダ内の全動画を処理)
.\re-encode-AIOptimus.ps1 "C:\Videos\"
# ヘルプ表示
.\start.bat -h1. 通常モード → 対話式で詳細設定を選択
2. テンプレートモード → 保存済みテンプレートから選択
3. プラットフォームモード → Twitter/Discord/GitHub 向け自動最適化
4. 中間ファイルモード → yuv444p/yuv422p 高品質編集用中間ファイル作成
5. 分割モード → チャプター/字幕で分割してエンコード
実際のテスト結果に基づき、対応ハードウェアのみが表示されます:
✓ NVIDIA (NVENC) - 自動検出
✓ Intel (QSV) - 自動検出
✓ AMD (AMF) - 自動検出
✓ CPU (Software) - 常に利用可能
NVIDIA エンコーダーの場合:
品質方式:
├─ CRF(可変ビットレート)
│ └─ CQ値指定(23=高品質、28=中、32=低速)
│
├─ CRF+Maxrate(品質 + ファイルサイズ上限)
│ └─ CQ + ビットレート上限で両立
│
└─ ビットレート(固定)
CPU エンコーダーの場合:
H.264/H.265:
├─ CRF(推奨)- 品質ベース
├─ CRF+Maxrate - 容量制限を加える
├─ 2-pass Bitrate - 正確な容量控制(遅い)
└─ カスタム
AV1:
├─ libsvtav1 - 高速(推奨)
├─ libaom-av1 - 最高品質(⚠ 非常に遅い)
└─ rav1e - 中速・実験的
1. プラットフォーム選択(Twitter/Discord/catbox.moe など)
↓
2. セットアップ方法(簡単 / カスタマイズ)
↓
3. 【簡単】自動設定で OK → エンコード開始
または
【カスタマイズ】個別設定 → HW / コーデック / 品質 / 音声を選択
↓
4. インターレース検出(古いビデオカメラ/DVD 対応)
↓
5. エンコード開始
スクリプト開始時に各 HW エンコーダーでテストエンコードを実行し、実対応状況を検出します。
結果は .cache/hardware-scan-cache.clixml にキャッシュされ、次回以降の起動が高速化されます。
# ログ出力例
[2026-06-11 10:00:00] [DEBUG] テスト結果: NVIDIA=False Intel=True AMD=False Vulkan=False D3D12VA=False MF=True
[2026-06-11 10:00:00] [DEBUG] エンコーダー: [h264_mf, h264_qsv, hevc_qsv, mjpeg_qsv, mpeg2_qsv, vp9_qsv, aac_mf, mp3_mf]
[2026-06-11 10:00:00] [DEBUG] HWアクセル : [qsv, d3d11va, dxva2, vulkan]未対応のハードウェア・コーデックは自動除外。
古い映像形式(MPEG2、NTSC/PAL映像、ビデオカメラ)の逆テレシネ・デインターレース:
検出方法:
├─ FFprobe の field_order フィールド確認
├─ idet フィルタでの複数フレーム検査
└─ フレーム属性から interlaced_frame = 1 検出
除去フィルタオプション:
├─ fieldmatch,decimate - 逆テレシネ(通常アニメ)
├─ fieldmatch,nnedi,decimate - 高品質逆テレシネ(学習ウェイト DL)
├─ bwdif - 標準デインターレース(推奨)
├─ nnedi - 高品質(非常に重い)
└─ w3fdif - 高速デインターレース
容量上限に収めながら最高品質を自動計算します。
例:Discord (10MB 上限)
入力:60秒 動画
計算プロセス:
1. 総ビットレート上限 = (10MB × 0.90) × 8 × 1024 / 60秒
2. 音声: Opus 64kbps → 音声ビットレート = 64kbps
3. 映像ビットレート = 総上限 - 音声
4. CRF値自動計算:内部的に maxrate で制御
結果:H.265 CRF:22 + maxrate:1024k で 9.8MB に収束
計算メトリクス:
マージンファクタ:
├─ H.264/H.265 = 0.90
├─ VP9 = 0.88
├─ SVT-AV1 = 0.82
└─ libaom-av1 = 0.80
外部エンコーダーが利用可能な場合、自動的にメニューに追加:
qaac の例:
選択フロー:
1. qaac → ハイレベルオプション選択
2. AAC-LC (TVBR品質) / HE-AAC (CVBR ビットレート)
3. 品質値入力 → qaac --tvbr 73 等で実行
失敗時の自動フォールバック:
外部エンコーダー実行失敗
→ ソース音声がコンテナ互換 ?
├─ YES → 音声をコピー (-c:a copy)
└─ NO → 音声を除去 (-an)
WebM、MKV、MP4 などのコンテナ書込みバッファリングによるサイズや予測値の更新遅延を解消し、リアルタイムで正確な進捗情報を出力します:
- バッファ遅延の可視化: ディスク書込みサイズ(実績値)に加えて、メモリ内にバッファされている推定サイズを
作成済: [実サイズ] + [バッファ推定差分]として合算表示します。 - フレーム数ベースの動的予測: 起動時に入力動画のフレームレート(FPS)を
ffprobeで動的取得し、エンコード済フレーム数(frame=)を基に1フレームごとに予測ファイルサイズ・平均レートを逆算・更新します。これにより、書き出しが発生していないエンコード初期(開始5秒間)でも表示が"N/A"でフリーズすることなく、開始1秒目から滑らかに予測値が動き続けます。 - 高精度フォーマット: 進捗時間を小数点第3位(ミリ秒)に制限し、エンコード速度は小数点第2位(例:
0.24x)まで詳細表示します。 - 画面レイアウトの崩れ防止: 実行コンソールのウィンドウ幅を自動検出し、バッファリング警告文や進捗テキストがコンソール端で自動折り返し(改行)を起こして進捗行が崩れるのを防ぐ、スマートな動的切り捨て・パディング処理を実装しています。
ログ格納場所:<出力フォルダ>/re-encode-log-YYYYMMdd-HHmmss.log
含まれる情報:
├─ 実行環境(Windows版, PS版, FFmpeg版)
├─ エンコード進捗(タイムコード, 速度, fps, ビットレート)
├─ GPU/HW処理情報(NVENC/QSV/AMF のアクティブ状況)
├─ FFmpeg 警告・エラー(カラー分類)
└─ 所要時間・エンコード完了情報
HW アクセルエラー自動リトライ:
HW アクセルでエラー発生
→ CPU へ自動フォールバック(-hwaccel削除)
→ 再エンコード実行
音声エンコーダー失敗時:
外部エンコーダー実行失敗
→ ソース音声互換性チェック
→ コピーまたは除去へ自動切り替え
MiraBox等のキャプチャデバイスから映像を取り込み、ゼロコピープレビュー付きで録画を行うスタンドアロンスクリプトです。
- Windows標準ハードウェアアクセラレーション (d3d11va) を活用した軽量プレビュー(ffplay)
- teeマルチプレクサを利用し、エンコード負荷を最小限に抑えながらMKV保存とUDPストリーミングを並行処理
- 面倒な設定なしで、保存先をインタラクティブに選択可能
実行ファイル(FFmpeg、外部エンコーダー等)のパスを設定する中心ファイルです。詳細はリポジトリ内の当該ファイルを参照してください。
用途ごとのエンコード設定を記録したファイル群です。
デフォルトでPSVR向けのSBS変換用プロファイルが用意されています。
動画再エンコード/
├── start.bat # 起動用バッチファイル
├── re-encode-AIOptimus.ps1 # メイン処理スクリプト
├── get-ffmpegOptions.ps1 # エンコード設定メニュー構築スクリプト
├── Get-HardwareInfo.ps1 # ハードウェア検出スクリプト
├── Record-MiraBox-Stable.ps1 # 録画&プレビュー用スクリプト (MiraBox対応)
├── config.user.psd1 # 環境設定ファイル(要編集)
├── README.md # このファイル
├── IMPLEMENTATION_HISTORY.md # 実装変遷記録
├── .cache/ # ハードウェアスキャン等のキャッシュ保存先
│ └── hardware-scan-cache.clixml
└── Profiles/ # テンプレート保存先
├── PSVR SBS - フル.psd1
├── PSVR SBS - ハーフ.psd1
├── PSVR SBS - フル - クロップ - 16:9.psd1
├── PSVR SBS - フル - クロップ - 4:3.psd1
├── 暫定アニメ用-with-VP9.psd1
└── ...
A: 以下で実行権限を許可してください:
# PowerShell を【管理者実行】で開く
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
A: 以下のいずれかを実施:
方法 1:PATH に追加(推奨)
Windows設定 → 詳細設定 → 環境変数 → PATH に FFmpeg フォルダを追加
その後 PowerShell を再起動
方法 2:config.user.psd1 で直接指定
FfmpegPath = "C:\path\to\ffmpeg.exe"
FfprobePath = "C:\path\to\ffprobe.exe"A: スクリプト実行時の自動テスト(.cacheを利用)で対応していないと判定されています。ドライバの更新を確認するか、CPUエンコーダーを使用してください。
A: config.user.psd1 のパスを確認:
# PATH に登録済みの場合
QaacPath = "qaac64"
# ローカルインストール
QaacPath = "C:\path\to\qaac64.exe"A: Ctrl+C で中断可能。ただし既出力ファイルは残ります。
A: メニューで設定を選択した最後の画面で「この設定をテンプレートとして保存しますか?」に「はい」と答えることで、Profiles/ フォルダに新しいプロファイルとして保存されます。
詳細な変更履歴は IMPLEMENTATION_HISTORY.md を参照してください。
このスクリプトは初期版の GitHub コード を AI で最適化し、以来継続的に改善されています。
ライセンスとかよくわかりません。個人用を公開してるだけです。もし使う人がいるなら一般常識の範囲で自由にどうぞ。
ただし FFmpeg や各外部ツールのライセンスに従うこと。
改善提案・バグ報告は Issue / Pull Request でお願いします。
最終更新: 2026-07-14