スタジオ出力の検証
このプロジェクトの黄金律:「結果を見ずして『完了』と言うな」。自動テストは「動く」ことを保証しますが、見た目が正しいことは実際に見ることでしか確認できません(このプロジェクトでも、hyperframes checkはテキストを横切るアークを通過させてしまい、ビューアテストでは4つの視覚的失敗のいずれも検出できませんでした)。
手順
- 動画または
seek(t)付きシーン:最初のフレームだけでなく、6〜8枚の分散したフレームをコンタクトシートにまとめて、Readで目視確認します。node scripts/capture.mjs <scene.html> 1,4,7,10,13,16,19 out/frames/sheet.png 4既にレンダリングされたMP4の場合:ffmpeg -i out/x.mp4 -vf "fps=1/3,scale=640:-1,tile=3x3" -frames:v 1 out/frames/sheet.png確認すべき点:テキストの切れや重なり、フレーム外の要素、コントラスト不良、空またはフリーズしたフレーム。 - フォーマット:
ffprobe -v error -show_streams -show_format -of json <file>→ 1920x1080、30 fps、H.264yuv420p、期待通りの長さ、AAC 48 kHz オーディオトラック。 - 音声:
ffmpeg -i <file> -vn -af ebur128=peak=true -f null -→ インテグレーテッドラウドネス −16 LUFS(±1)、トゥルーピーク ≤ −1 dBFS。 実際に聴くことはできません:スペクトログラム(showspectrumpic)、測定値、そしてWhisper large-v3 による書き起こし(audio/verify_voice.py)を使用します。 小さなWhisperは絶対に使わないでください:無音部分でテキストを捏造し、49〜160%の誤ったエラー率を出力します。 - すべてをまとめて:
make verify(またはaudio/.venv/bin/python scripts/verify_output.py)を実行します。ALL CORRECTで終了する必要があります。 - 正直に報告する:何を見たか、何を測定したか、判断できない点(音声の自然さ、デザインの好み)、および修正したとしても発生した障害があればそれらを報告します。
既知の落とし穴
- 「同一」の結果は証明(
cmp、ffmpeg -f framemd5によるフレームハッシュ)が必要であり、仮定してはいけません。Kokoro はシードなしでは決定論的ではありません。 - 0.4秒未満のウィンドウによるラウドネス測定は −65 LUFS(無効な値)になります:これらはスキップされます。
- 複雑なシーンではPNGはJPEGより10倍遅くなることがあります(210秒対20秒)が、平坦なシーンではPNGの方が速くなります。