← 記事一覧へ

ライブ配信の沈黙ゾーン検出と
「沈黙の質」三段階分類

ライブ配信のコメント無し連続区間(沈黙ゾーン)を検出し、その直後の反応コメ数で engaged(ガン見系)/departed(離脱系)/neutral(ふつう)の 3 段階に質判定するアルゴリズム。沈黙を一律にネガティブ評価せず、配信者の話芸が効いた瞬間を検出できる。

公開日: 2026-05-01 著者: 君斗りんく / Kimito-Link Project ライセンス: MIT 実装: GitHub

1.解決したい課題

ライブ配信を分析する際、「沈黙の長さ」だけを指標にすると配信の本質を取り違える場合がある。沈黙には大きく 2 種類ある:

  • ガン見系の沈黙: 配信者の話・展開に視聴者が集中して見入っており、コメントを書く余裕がない。直後に大きな反応が爆発する。
  • 離脱系の沈黙: 視聴者が興味を失って配信から離れている。沈黙後も反応がない。

両者は「コメ無し」という見た目は同じだが、配信者にとって意味が真逆である。前者は配信者の腕を示すハイライト、後者は改善すべきポイント。沈黙そのものではなく、沈黙の「質」を判定する必要がある。

2.手法の概要

処理は 2 段階:

  1. 沈黙ゾーン検出: 連続するコメントの間隔(gap)を計算し、thresholdMs(既定 60 秒)以上ならゾーンとして記録。
  2. 質判定: 沈黙終了時刻から windowMs(例: 30 秒)以内のコメ数を数え、engaged(5 以上)/neutral(2-4)/departed(0-1)を割り当てる。

質判定は opt-in。opts.quality を渡さなければ 'unknown' 固定で純粋な沈黙検出のみ動作する。

3.アルゴリズム詳細

3-1. パラメータ

パラメータ既定意味
thresholdMs60_000沈黙と見做す最小間隔
quality.windowMs0(質判定オフ)沈黙終了後の反応観測時間

3-2. ステップ

  1. capturedAt が有効なコメントのみ抽出し昇順ソート(破壊しない)
  2. i = 1 から末尾まで隣接ペア (prev, cur) の gap を計算
  3. gap < threshold なら次へ。gap ≥ threshold なら以下のゾーン情報を記録:
    • startAt = prev.capturedAt
    • endAt = cur.capturedAt
    • durationMs = gap
    • quality = 質判定の結果
    • afterCount = 沈黙終了から windowMs 内のコメ数
  4. 質判定: windowMs > 0 なら、cur の時刻から windowMs 以内に含まれるコメ数を数えて分類

3-3. 質判定の閾値

  • afterCount ≥ 5engaged(沈黙明けに反応が爆発 = 話芸が効いた)
  • afterCount = 2 ~ 4neutral(普通の沈黙明け)
  • afterCount ≤ 1departed(沈黙明けも反応なし)

4.参考実装(JavaScript / 純粋関数)

export function detectCommentSilenceZones(comments, opts = {}) {
  const threshold = opts.thresholdMs > 0 ? opts.thresholdMs : 60_000;
  const qualityWindowMs = opts.quality?.windowMs > 0
    ? opts.quality.windowMs : 0;

  const valid = (comments || []).filter(c =>
    c?.capturedAt > 0 && Number.isFinite(c.capturedAt)
  ).slice().sort((a, b) => a.capturedAt - b.capturedAt);
  if (valid.length < 2) return [];

  const zones = [];
  for (let i = 1; i < valid.length; i++) {
    const prev = valid[i - 1];
    const cur = valid[i];
    const gap = cur.capturedAt - prev.capturedAt;
    if (gap < threshold) continue;

    let quality = 'unknown';
    let afterCount = 0;
    if (qualityWindowMs > 0) {
      const windowEnd = cur.capturedAt + qualityWindowMs;
      for (let j = i; j < valid.length; j++) {
        if (valid[j].capturedAt > windowEnd) break;
        afterCount += 1;
      }
      if (afterCount >= 5) quality = 'engaged';
      else if (afterCount <= 1) quality = 'departed';
      else quality = 'neutral';
    }

    zones.push({
      startAt: prev.capturedAt,
      endAt: cur.capturedAt,
      durationMs: gap,
      quality, afterCount
    });
  }
  return zones;
}

5.なぜこの設計なのか

5-1. なぜ「沈黙明けの反応コメ数」で判定するのか

沈黙そのものを観測しても "なぜ沈黙したか" は分からない。しかし沈黙の直後の反応には情報が宿る:

  • 「うわぁ」「すごい」「やばい」が短時間に多発 → 視聴者は沈黙中ガン見していた
  • 誰も何も書かない → 視聴者は離れていた

この事後情報を使うことで、沈黙の意味を遡って判定できる。

5-2. なぜ閾値が「5 コメ以上 / 0-1 コメ」なのか

20-30 秒の窓で 5 コメ以上は通常の倍以上のコメ速度であり、明らかに「反応爆発」と言える。0-1 コメは「事実上 0」で、ノイズコメ 1 件混じってもまだ離脱と見做せる。中間の 2-4 は判定保留(neutral)として誤分類リスクを避ける。これは経験則だが、複数配信での検証で誤分類が最小になる範囲。

5-3. なぜ既定 thresholdMs = 60 秒か

ニコ生・Twitch・YouTube Live 等の典型的な配信では、コメ速度は 20 ~ 200 CPM。60 秒以上のコメ無しは「明らかに何かが起きた」レベル。30 秒等にすると、通常の小さな間でも検出されてノイズが増える。

5-4. なぜ質判定を opt-in にするのか

用途によっては「沈黙ゾーンの場所」だけ知りたく、質判定は別ロジックでやりたいケースがある。opts.quality を渡したときだけ働く設計にすることで、シンプルな用途と高度な用途の両方に対応できる。

6.既知の限界と拡張可能性

  • 沈黙明けの反応が遅延する場合: 視聴者の入力に時間が掛かる場合、windowMs を短くしすぎると engaged を取り逃す。
  • 配信全体のコメ速度に依存しない閾値: 元々コメ速度の遅い配信では「5 コメ以上」が出にくく、engaged を過小検出する。改善: 配信全体の平均 CPM に対する相対閾値
  • 拡張: 沈黙ゾーンの長さ別の質統計(短い沈黙ほど engaged 率が高い等)を可視化。
  • 拡張: 沈黙の5 ~ 10 秒前のコメ内容を保持し、「何が引き金で沈黙が起きたか」を遡って分析。

7.関連する既知技術(先行技術)

7-1. Audio Silence Detection

音声処理における無音区間検出(VAD: Voice Activity Detection)。本手法はテキスト時系列での類似処理。

7-2. Engagement Metrics in Streaming

YouTube / Twitch のエンゲージメント指標は「コメント数」「いいね数」等の単純カウントが中心で、「沈黙の質」を区別する指標は稀である。

7-3. Sentiment Analysis

個別コメントの感情分析は広く研究されているが、本手法は沈黙という "コメントが無い状態" を分析対象とする点が独特。

8.本記事の位置づけ・ライセンス

本記事は、Chrome 拡張機能『君斗りんくの追憶のきらめき』内で 2026 年 4 月 30 日(バージョン 0.1.22)に投入された commentSilenceZones.js モジュールの設計思想と実装を、2026 年 5 月 1 日付で公開するものである。

参考実装は MIT、本記事文章は CC BY 4.0

引用例: 君斗りんく「ライブ配信の沈黙ゾーン検出と『沈黙の質』三段階分類」君斗りんくの追憶のきらめき、2026 年 5 月 1 日公開、https://tsuioku-no-kirameki.com/articles/comment-silence-zones.html