fc2ブログ
 

フレームレートの扱いについて(ffmpeg、DirectShow、ビデオキャプチャ)

画質厨の配信設定研究」のこの記事を見ながらアマレコTVとffmpegを連携させた使い方を試していますがその中のフレームレートについてのお話しです。

アマレコTVのライブ機能をffmpegを使うとフレームレートが「29.97」と表示される場合と「29.9701」と表示されることがあり「おや?」と思う場面が出てきます。
結論から言うと先のサイトに書かれている通りどちらも正解(正常)で小数点以下の扱い(非常に細かい単位)を切り捨てるか、繰り上げるかの違いです。


詳しく説明すると、フレームレートは各ソフトウエアの内部で29.97のような値ではなく、

 REFERENCE_TIME AvgTimePerFrame; // Average time per frame (100ns units)

と言うデータで管理されています(Direct Showの仕様です)。
AvgTimePerFrameは100ナノ秒(10,000,000分の1秒)単位で1フレームあたりの(平均)持続時間を管理します。
29.97fpsの場合のAvgTimePerFrameは333666または333667という値になりますが、この値(333666や333667)をそのまま表示したのでは解りにくいので、1秒間に何フレーム扱うかというfpsの形に各々のソフトウエアが計算し29.97のように表示しています。

10,000,000ns(1秒)をAvgTimePerFrameで割るとfpsになるので、それぞれ計算すると

 AvgTimePerFrame=333666の場合:fps = 10,000,000 ÷ 333666 = 29.970089・・・
 AvgTimePerFrame=333667の場合:fps = 10,000,000 ÷ 333667 = 29.970000・・・

となります。
大抵のソフトウエアはfpsの小数点以下2位または3位までしか表示しないため両者の違いが表面化することはありませんが、ffmpegは小数点以下4位まで表示(小数点以下5位を四捨五入)するため「29.9701」と「29.97」といった違いが表面化します。
しかし、その違いは一千万秒に対し1秒の誤差(115日間ぶっ続けで配信して1秒ズレる)なので通常問題になることはないでしょう。
その違いは一千万フレームに対し1秒の差(29.97fpsの場合なら92時間ぶっ続けで配信して1秒差が出る)なので通常問題になることはないでしょう。

そしてAvgTimePerFrameを決めるのは基本的にキャプチャカードです。
大抵のキャプチャカードはAvgTimePerFrame=333667なので表示上は29.97となることが多いと思います。
(現在手元にあるGV-USB2、SD-USB2CUP4、SC512、IntensityProはAvgTimePerFrame=333667)

もう一つのケースとして59.94fps(AvgTimePerFrame=166833)でキャプチャしたものをアマレコTVのライブ機能で29.97fpsにしている場合は計算精度の関係でAvgTimePerFrame=333666となります。この場合、表示は29.9701となってしまいます。

フレームレートをこちらswk's log - NTSC のフレームレートはなぜ 29.97fps なのか 」を参考に計算すると

 fps = 4.5MHz ÷ 286 ÷ 525 = 29.9700299700299700299700299700・・・

となるので、
29.97fpsにおけるAvgTimePerFrameのより正確な値は

 AvgTimePerFrame=333666.6666666666666666666666666・・・

と小数点以下に6が沢山続きます。なので333666(29.9701)よりは333667(29.97)の方が誤差が少ないと言えます。


■まとめ
・「29.9701」と「29.97」はどちらも正常。
・どちらになるかは使っているキャプチャカードのAvgTimePerFrameにより決まる。
・多くのキャプチャカードで「29.97」となる。
・59.94fpsでキャプチャしたものをライブ機能で29.97fpsにしている場合は「29.9701」となる。
・どちらかというと「29.97」の方がビデオ信号の規格との誤差が少ない


■ffmpegの"-r"オプションについて
アマレコTV Live Ver2.30からffmpegの"-r"オプションでライブ機能のフレームレートを指定できるようになりましたが、特に問題がない場合はffmpeg側からフレームレートを指定しない方が望ましいです。

-rオプションでフレームレートを指定するとキャプチャカードのフレームレートとは違うレートでffmpegが動作するため
キャプチャカードとffmpegの間でギャップが生じやすくなります。ギャップが生じるとアマレコTVのライブ機能により
意図的にフレームをドロップさせたり、同じフレームを水増しすることで調整されます(カクカクになる可能性が高まる)。

-rオプションを指定しない場合はキャプチャカードのフレームレートに合わせてffmpegが動作しますのでギャップが生じにくくなります。


アマレコTV Live アマミキ! Ver2.31 先行公開

ライブ機能の不具合修正とアマステがボリューム変更に対応したなどです。Ver2.30はなかったことにして、このバージョンを一般公開する予定です。

【更新内容】
アマレコTV Live Ver2.31更新内容(Ver2.30からの変更点のみ)
・アマレコTVの実行ファイル(AmaRecTV.exe)を複製してそれぞれ異なる設定で利用できるようになりました
233ini.png
・フレームレートチェックを録画またはライブ機能の開始時(リンク開始時)に行うように変えました
・モノステの初期値をONに変更(この部分の設定は初期化されます。再設定してください)
・ライブ機能のフレームレートが合わないときは映像表示直後のfps部を赤で点滅表示するようにしました
262fps.png
・ライブ機能をffmpegで使った際の音ズレに対応しました
・Ver2.30のライブ機能でプログレッシブ画像の場合に同じ画像が2枚ずつ表示される(実質フレームレートが半分の映像になってしまう)場合がある不具合を修正しました


アマミキ! Ver1.04更新内容(Ver1.03からの変更点のみ)
・メイン画面でアマステのボリュームを変更できるようになりました
・コマンドラインオプションに-nolive、-line:[ライン番号]を追加(Ver1.03から追加されていたけど書き忘れました)


■ffmpegについて
Ver2.31のライブ機能ではffmpeg側でフレームレートを指定(-r 30000/1001など)しなくても適切な値で動作します。音ズレもしないと思います。



■ダウンロード
ダウンロード



 
 
あまラボへようこそ
このブログでは自作ソフトの最新情報やtips、PC動画に関する話題を掲載していきます。各記事へは下にあるカテゴリからアクセスして下さい。

ファイルのダウンロードはホームページの方でお願い致します。

質問・要望・不具合報告はこちら
アマレコTV
アマミキ!
アマレココ
アマレコ・ライト
ファンタジーリモート
AMVコーデック



ホームページ
カテゴリ
最新コメント
カレンダー
04 | 2022/05 | 06
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
最新記事
最新トラックバック
ブログ内タグ

アマレコTV ビデオキャプチャ AMVコーデック アマレコVR Oculus アマレココ Quest アマミキ! コーデック gQuest SC500 動画配信 Pico GO ファンタジーリモート 4K アマレコライト プラグイン G2 AMV4 oculus ライブ機能 SC512 Unity AVX2 デスクトップキャプチャ Passthrough リモートソフト FAQ 質問コーナー DirectShow ニコニコ動画 120Hz HDキャプチャ 遅延 可変再生速度 レゴ 解説動画 組み換え VR LEGO XL2420T GV-USB2 2 倍速液晶 AMV2MT 液晶モニター アマステ ベンチマーク デインターレース Intensity VRonVR PS4 パススルー機能 Meta Pro MonsterX3A designs VideoKeeper2 XCAPTURE-1 Alternate AVX インストール GV-USB SD-USB2CAP4 RDT233WX-Z 32ZP2 31006 ffmpeg Rift WindowsMR 60fps 背景透過 31024 T2 画像処理 RGBキャプチャ UtVideo Shadow Play RYZEN Haswell 電源オプション MP3 HDCP MonsterXU3.0R HDMI ゲームスムーズモード 音遅延 LameACM HT 倍速補完処理 31021 フィギュア ハイパースレッディングテクノロジー MPC NVEnc OBS QSV モノステ DirectShowFilter プレビュー 擬似NTSCキャプチャ Livetube AtomでHDキャプチャ キャプチャーツール シンクライアント イベント SD-USB2CUP4 IntensityPro 32ZP32 額縁遅延 REGZA 液晶テレビ 倍速駆動 DC-HD1 リプレイ機能 音ズレ ZP3 GV-USB3 passthrough APIパススルー機能 API 検証 60Hz 新アマレコVR 新プレイヤー機能 AMPlayer Robust Video Hand Tracking 2.0 SkyBox ファイルマネージャプラス Matting python pytorch 90Hz Windows キャプチャカード 可逆圧縮 GPU使用率 SKnet SSE オーバーレイ XCapture-1 Kabelake LAVFilters Preferred フレーム間圧縮 VRコントローラー MR VR動画 SteamVR Filter Tweaker 録画 

ブログ内検索
月別アーカイブ
アマレココに関するリンク
お世話になっているソフトのリンク
RSSリンクの表示
管理画面
  • 管理画面