FFmpeg Cookbook
EN

VFR→CFR 変換ツール

画面録画・スマホ動画の「可変フレームレート(VFR)」を固定(CFR)に直します。ヘッダの平均 fps と基準 fps の差で VFR を疑い、先頭 30 秒を実際にデコードして確定してから、選んだレートで再エンコードします。

完全ローカル処理 — ファイルは外部送信なし
⏱️
動画をドラッグ&ドロップ、またはタップして選択
MP4 / MOV / WebM / MKV など、最大 500MB・15 分まで
🎬
ヘッダを読み取り中…
映像は fps フィルタで一定間隔のフレームに揃えて H.264 で再エンコード、音声は元のタイムスタンプのまま AAC 160kbps にします。フレームは複製・間引きで揃えるので再生速度は変わらず、音声との同期が固定されます
処理中… 0%
このブラウザではプレビューを再生できませんが、ダウンロードしたファイルは正常です。
CFR 動画をダウンロード

次にやること

よく使われる用途
画面録画・スマホ動画の音ズレ修正Premiere / DaVinci に読み込む前の CFR 化OBS / ゲーム録画のフレーム間隔を揃える

このツールでできること

  • 平均フレームレートと基準レート(tbr)を読み取り、差があれば「VFR の疑い」と表示
  • 先頭 30 秒をデコードしてフレーム間隔のばらつきを数え、VFR か実質 CFR かを確定
  • 出力レートは自動(基準レートに合わせる)または 23.976 / 24 / 25 / 29.97 / 30 / 50 / 59.94 / 60 fps
  • 29.97系は30000/1001の分数で指定。元の音ズレを自動修復するものではありません
  • 変換後に出力ヘッダを読み直し「平均 = 基準」になったことを表示
  • 完全ローカル処理:ファイルはサーバーに送信されません

使い方

  1. 1

    動画をドロップ

    MP4 / MOV / WebM / MKV など、最大 500MB・15 分。読み込むと平均 fps・基準レート・VFR 判定が表示されます。

  2. 2

    必要なら確定チェック

    「先頭 30 秒をデコードして確定する」を押すと、フレーム間隔の何 % が不揃いかを実測します。ヘッダの判定だけで十分なら飛ばして構いません。

  3. 3

    出力レートを選ぶ

    迷ったら「自動」。画面録画・スマホなら 30、ゲーム録画なら 60、テレビ規格なら 29.97 / 59.94 を選びます。

  4. 4

    変換してダウンロード

    映像は H.264 で再エンコード、音声は AAC 160kbps。完了すると出力の fps / tbr が表示され、ファイル名に `_cfr30` のようにレートが付きます。

入力項目の意味

平均フレームレート
ファイル全体の「フレーム数 ÷ 長さ」。ffprobe の `avg_frame_rate` と同じ値です。
基準フレームレート (tbr)
FFmpeg が全タイムスタンプを表せる最小レートとして推定した値(`r_frame_rate`)。録画時に「狙っていた」レートに近いことが多い。
出力フレームレート
`fps` フィルタに渡す値。「自動」は tbr が標準値(24 / 25 / 30 / 60 …)ならそれを、そうでなければ平均に最も近い標準値を選びます。
画質(CRF)
H.264 の品質。18 は元とほぼ見分けがつかず、22 が標準、26 は配布用に軽く。数字が大きいほど小さく粗くなります。

おすすめ設定

画面録画を一定間隔の映像に変換
録画設定と編集先に合うレート / CRF 22
自動設定は候補です。元動画と変換後を同じプレーヤーで比較し、冒頭・中間・末尾の音声を確認してください。
動画編集ソフトに読み込む素材の下処理
プロジェクトと同じレート / CRF 18
編集先がCFRを必要とする場合に使用します。VFR対応や同期の挙動はソフト・素材で異なります。
144Hz / 240Hz モニターのゲーム録画
60 / CRF 20
60 を超える部分は間引かれ、落ち込んだ部分は複製されて一定になる。YouTube も 60 までしか配信しない。
放送・DVD 由来で 29.97 と表示される素材
29.97 / CRF 18
入力規格と編集先の要件を確認。fps変換と再生速度変更は異なります。

よくある失敗と対処

症状:「VFR の疑い」と出るが、デコードすると「実質 CFR」

原因:ヘッダの推定値と、先頭30秒のフレーム間隔の検査では対象が異なります。

対処:先頭の結果だけで全編や音ズレの原因を確定しないでください。一定の音声オフセットに限り音ズレ補正ツールが候補です。

症状:変換したら動画が速くなった / 短くなった(CLI で自作した場合)

原因:動画入力の前に指定した-rは、元のタイムスタンプを無視して指定レートで時刻を生成します。

対処:元の再生時刻を基準に一定間隔へ変換する用途では、入力後の-vf fps=30を使い、出力の長さも確認します。

症状:出力が元より大きくなった

原因:フレーム数に加えて、再エンコードのコーデック・CRF・内容が容量に影響します。複製フレームの容量は一定ではありません。

対処:出力を見ながらCRFを調整するか、動画圧縮ツールで容量を指定します。

症状:先頭30秒はCFRなのに後半で音がズレる

原因:先頭だけの検査では後半の時刻情報や録音の問題は分かりません。

対処:問題が起きる区間を比較し、元動画にもズレがあるかを先に確認します。VFRだけが原因とは限りません。

症状:「15分を超える動画は処理できません」

原因:このツールの処理上限です。速度・メモリ使用量は素材と端末で変わり、短い動画でも失敗する場合があります。

対処:原本を保持し、デスクトップ版FFmpegで下のコマンドを実行してください。

相当する FFmpeg コマンド例

コマンドラインから同じ処理を行う場合の参考例です。

過去の実行記録: このページのコマンド例は 2026-09-11 のログで成功 3 件、対象外 2 件(デスクトップ版 FFmpeg 8.1・テスト素材)。その後の編集やブラウザ画面の操作、画質はこの記録では確認できません。

本ツールと同じ処理(fps フィルタで 30 fps に揃える)
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
記事と同じ書き方(-fps_mode cfr、音声は無劣化コピー)
ffmpeg -i input.mp4 -fps_mode cfr -r 30 -c:v libx264 -crf 20 -c:a copy output.mp4
FFmpeg 5.1 以降。古い解説の `-vsync cfr` と同じ意味で、`-vsync` は非推奨。
29.97 fps(NTSC)に揃える
ffmpeg -i input.mp4 -vf fps=30000/1001 -c:v libx264 -crf 20 -c:a copy output.mp4
NTSCの正確な比率は30000/1001です。小数29.97との差を1時間3.6秒とした旧説明は誤りです。
VFR を疑う(平均と基準の比較)
ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate,avg_frame_rate -of default=nw=1 input.mp4
2 つの値が違えば VFR の疑い。同じでも VFR のことはある。
VFR を確定する(先頭 30 秒のフレーム時刻を列挙)
ffprobe -v error -select_streams v:0 -read_intervals %+30 -show_entries frame=pts_time -of csv=p=0 input.mp4
隣り合う値の差が一定なら CFR、ばらつけば VFR。本ツールの確定チェックはこれと同じ情報を showinfo フィルタで取っています。

対応ブラウザ・制限

  • 最大ファイルサイズ 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で一定間隔へそろえる処理と、再生時刻を圧縮する倍速処理は異なります。