VFR→CFR 変換ツール
画面録画・スマホ動画の「可変フレームレート(VFR)」を固定(CFR)に直します。ヘッダの平均 fps と基準 fps の差で VFR を疑い、先頭 30 秒を実際にデコードして確定してから、選んだレートで再エンコードします。
fps フィルタで一定間隔のフレームに揃えて H.264 で再エンコード、音声は元のタイムスタンプのまま AAC 160kbps にします。フレームは複製・間引きで揃えるので再生速度は変わらず、音声との同期が固定されます。
次にやること
このツールでできること
- 平均フレームレートと基準レート(tbr)を読み取り、差があれば「VFR の疑い」と表示
- 先頭 30 秒をデコードしてフレーム間隔のばらつきを数え、VFR か実質 CFR かを確定
- 出力レートは自動(基準レートに合わせる)または 23.976 / 24 / 25 / 29.97 / 30 / 50 / 59.94 / 60 fps
- 29.97系は30000/1001の分数で指定。元の音ズレを自動修復するものではありません
- 変換後に出力ヘッダを読み直し「平均 = 基準」になったことを表示
- 完全ローカル処理:ファイルはサーバーに送信されません
使い方
- 1
動画をドロップ
MP4 / MOV / WebM / MKV など、最大 500MB・15 分。読み込むと平均 fps・基準レート・VFR 判定が表示されます。
- 2
必要なら確定チェック
「先頭 30 秒をデコードして確定する」を押すと、フレーム間隔の何 % が不揃いかを実測します。ヘッダの判定だけで十分なら飛ばして構いません。
- 3
出力レートを選ぶ
迷ったら「自動」。画面録画・スマホなら 30、ゲーム録画なら 60、テレビ規格なら 29.97 / 59.94 を選びます。
- 4
変換してダウンロード
映像は H.264 で再エンコード、音声は AAC 160kbps。完了すると出力の fps / tbr が表示され、ファイル名に `_cfr30` のようにレートが付きます。
入力項目の意味
おすすめ設定
よくある失敗と対処
症状:「VFR の疑い」と出るが、デコードすると「実質 CFR」
原因:ヘッダの推定値と、先頭30秒のフレーム間隔の検査では対象が異なります。
対処:先頭の結果だけで全編や音ズレの原因を確定しないでください。一定の音声オフセットに限り音ズレ補正ツールが候補です。
症状:変換したら動画が速くなった / 短くなった(CLI で自作した場合)
原因:動画入力の前に指定した-rは、元のタイムスタンプを無視して指定レートで時刻を生成します。
対処:元の再生時刻を基準に一定間隔へ変換する用途では、入力後の-vf fps=30を使い、出力の長さも確認します。
症状:出力が元より大きくなった
原因:フレーム数に加えて、再エンコードのコーデック・CRF・内容が容量に影響します。複製フレームの容量は一定ではありません。
対処:出力を見ながらCRFを調整するか、動画圧縮ツールで容量を指定します。
症状:先頭30秒はCFRなのに後半で音がズレる
原因:先頭だけの検査では後半の時刻情報や録音の問題は分かりません。
対処:問題が起きる区間を比較し、元動画にもズレがあるかを先に確認します。VFRだけが原因とは限りません。
症状:「15分を超える動画は処理できません」
原因:このツールの処理上限です。速度・メモリ使用量は素材と端末で変わり、短い動画でも失敗する場合があります。
対処:原本を保持し、デスクトップ版FFmpegで下のコマンドを実行してください。
相当する FFmpeg コマンド例
コマンドラインから同じ処理を行う場合の参考例です。
過去の実行記録: このページのコマンド例は 2026-09-11 のログで成功 3 件、対象外 2 件(デスクトップ版 FFmpeg 8.1・テスト素材)。その後の編集やブラウザ画面の操作、画質はこの記録では確認できません。
ffmpeg -i input.mp4 -vf fps=30 -c:v libx264 -preset veryfast -crf 22 -pix_fmt yuv420p -c:a aac -b:a 160k -movflags +faststart output.mp4 ffmpeg -i input.mp4 -fps_mode cfr -r 30 -c:v libx264 -crf 20 -c:a copy output.mp4 ffmpeg -i input.mp4 -vf fps=30000/1001 -c:v libx264 -crf 20 -c:a copy output.mp4 ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate,avg_frame_rate -of default=nw=1 input.mp4 ffprobe -v error -select_streams v:0 -read_intervals %+30 -show_entries frame=pts_time -of csv=p=0 input.mp4 対応ブラウザ・制限
- 最大ファイルサイズ 500MB、長さ 15 分まで(超える場合は上のコマンドをデスクトップで)
- 確定チェックは先頭 30 秒のみ。後半だけ VFR になる録画は「実質 CFR」と出ることがある
- 出力は常に MP4(H.264 + AAC)。ProRes や無劣化出力はデスクトップの FFmpeg で
- 字幕・複数音声トラックは最初の音声 1 本を除いて破棄
プライバシーについて
このツールは ffmpeg.wasm をブラウザ内で実行するため、動画ファイルがサーバーに送信されることはありません。すべての処理はあなたの端末上で完結します。 プライバシーポリシーを見る →
よくある質問(FAQ)
VFR(可変フレームレート)とは何ですか?
フレームの表示間隔が一定でない動画です。正しいタイムスタンプと対応プレーヤーがあれば、VFR自体は異常ではありません。編集先の要件や実際の不具合を見て変換を判断します。
この変換で音ズレは本当に直りますか?
保証はできません。fpsフィルターは入力時刻を基準に映像を複製・間引きしますが、音声を映像の内容へ自動同期しません。音声はAACへ再エンコードします。一定のズレと時間とともに増えるズレは対処が異なります。
再生速度や長さは変わりますか?
倍速化を意図する処理ではありません。ただしフレーム格子への丸めや末尾の扱いで、映像・音声の終了時刻に差が出ることがあります。原本と出力の冒頭・中間・末尾を比較してください。
「自動」はどのレートを選びますか?
標準値に近い基準レート(tbr)を候補にし、そうでなければ平均に近い標準値へ合わせます。tbrは推定値で撮影意図の証拠ではありません。録画設定や編集先の要件を優先してください。
再エンコードせずに直せませんか?
できません。CFR にするにはフレームの並び自体を変える必要があり、`-c:v copy` ではタイムスタンプが元のまま残ります。音声はデスクトップなら `-c:a copy` で無劣化コピーできますが、本ツールは WebM(Opus)や MKV(FLAC)からでも MP4 にできるよう AAC 160kbps に統一しています。
29.97 と 30 のどちらを選ぶべきですか?
入力規格と編集先の要件に合わせます。fpsフィルターは時刻に合わせて重複・間引きを行うため、29.97から30への変換だけで必ず1時間3.6秒の音ズレが生じるわけではありません。分数指定も既存の音ズレを修復する保証ではありません。
iPhoneのHEVC動画は使えますか?
HEVC入力を読み取りH.264へ変換しますが、対応プロファイルや端末のメモリ次第で失敗する場合があります。短いコピーで先に試し、HDRの色や向きも確認してください。所要時間を一律の倍率では案内しません。
フレーム間隔のばらつきはどう数えていますか?
先頭 30 秒の各フレームの表示時刻(pts_time)を取り、隣接フレームの間隔を 0.1 ms 単位で集計します。最も多い間隔を「本来の間隔」とみなし、そこから 5%(最低 1.5 ms)以上ずれた間隔の割合が 2% を超えれば VFR と判定します。1.5 ms の下限は、1 ms タイムベースの WebM で 60 fps が 16 / 17 ms と交互に出る揺れを VFR と誤判定しないためです。
関連ツール
関連記事 (FFmpeg レシピ)
VFRから一定間隔のフレームへ変換するツールです。選んだ動画はブラウザ内で処理します。下のコマンド実行記録は、実際の録画の音ズレが直ることやブラウザ版の全操作を証明するものではありません。
深掘り:このツールならではの背景
「平均 ≠ 基準」は疑いであって証拠ではない
FFmpeg が表示する `30 tbr` の tbr(`r_frame_rate`)は「ストリーム内の全タイムスタンプを整数で表せる最小のレート」を推定した値で、録画ソフトが狙っていたレートと一致することが多い一方、丸め誤差やコンテナのタイムベース(WebM の 1 ms など)に引きずられて 1000 のような値になることもあります。平均(`avg_frame_rate`)は単純にフレーム数を長さで割った値です。両者が違えば「間隔が一定でないフレームがある」可能性が高いものの、CFR でも先頭の 1 フレームが欠けているだけで両者はズレます。
ヘッダの比較に続き、先頭30秒のフレーム時刻を使って間隔のばらつきを調べられます。結果はこのツールの許容誤差による区間判定で、全編のCFR保証ではありません。以前掲載していた固有のテスト数値は、再現用の公開記録に結び付けられないため撤回しました。
fpsフィルターと入力側-rを混同しない
fpsフィルターは入力時刻を基準にフレームを複製・間引きします。出力側の-fps_mode cfrと-rでも一定レートを指定できますが、丸めや末尾の扱いまで同一出力になるとは限りません。
動画入力の前の-rは入力時刻を無視して時刻を作るため、元のフレーム間隔が不規則なら尺が変わり得ます。画像連番の入力レート指定とは用途を分けてください。公式の-rとfps_modeの説明も参照できます。
出力レートは録画設定と編集先から決める
平均が12fpsという情報だけでは、撮影時に30fpsを狙っていたとは断定できません。元の動きが多い区間を確認し、低すぎる出力レートで必要なフレームを間引かないようにします。高いレートへの複製も新しい動きを作るわけではありません。
自動は基準レート(tbr)を手掛かりにしますが、撮影者の意図を確定するものではありません。編集先の要件も確認してください。29.97は30000/1001、59.94は60000/1001で指定します。fpsで一定間隔へそろえる処理と、再生時刻を圧縮する倍速処理は異なります。