プロジェクト一覧

プロジェクト記録 07 · デスクトップアプリ・映像処理

シーン切り替え位置を表示する動画プレーヤー

動画を開く → シーン分割を実行 → 再生バーに分割位置を表示 → プレビューとシーン移動 → 区間を保存

C#WPFOpenCvSharpFFMEffmpeg

シーン切り替え位置を再生バー上で確認し、すぐに移動できるようにしました

動画の中でシーンが切り替わる位置を見つけ、再生バーに表示するWindows用動画プレーヤーです。シーン切り替えはOpenCVのフレーム差分とVGG16の特徴距離の2つの方式で検出し、私はシーン検出を除くプレーヤー機能をすべて開発しました。

  • 8つ詳細パネルで扱う機能
  • 2つプレーヤーに接続したシーン検出方式
  • 10%Ctrl+ホイール1回で狭まるタイムラインの範囲
再生画面

再生バーの黄色いマーカーがシーンの切り替わる位置です。マーカーにマウスを重ねると、そのフレームをプレビューします。

担当する役割
シーン切り替え検出アルゴリズムを除くプレーヤー機能をすべて開発しました。再生バーの分割位置表示とプレビュー、タイムラインの拡大、シーン移動、分割位置の編集と保存、ffmpegによる区間保存、メディア情報ウィンドウを作りました。
成果
Pythonの検出結果をプレーヤーで受け取り、シーン切り替え位置を再生バーに表示して、プレビュー、移動、修正、区間保存まで1つの画面でできるようにしました。
  1. 1分割位置の表示検出されたフレームを再生バー上のマーカーで表示
  2. 2プレビューと移動マーカーにマウスを重ねるとそのフレームをプレビューし、クリックで移動
  3. 3タイムラインの拡大Ctrl+ホイールでマウス位置を中心に拡大、縮小
  4. 4編集と保存分割位置の追加と削除、メタ情報の保存、ffmpegによる区間保存

この技術によって期待される変化

長い動画もシーン単位で探索

前のシーン、次のシーンのボタンとバー上のマーカーで、目的のシーンにすぐ移動できます。

密集した位置も拡大して選ぶ

Ctrl+ホイールでマウス位置を中心にタイムラインを拡大するため、近接した分割位置も見分けて選べます。

自動検出の結果を人が手直し

誤って検出された位置は削除し、抜けた位置は追加して保存できるため、自動検出のあとの手作業による修正が1つの画面で続けられます。

問題と解決策

  1. 問題タイムラインを拡大したまま次のシーンに移ると、その位置が表示範囲の外に出てしまいました。

    解決移動先の位置が範囲を外れる場合は、その位置より5秒広く範囲を広げて一緒に表示するようにしました。

  2. 問題OpenCVで区間を保存すると音声が抜けていました。

    解決ffmpegで区間を切り出し、音声まで保存するようにしました。

  3. 問題プレーヤーはPythonの検出がいつ終わるのか分かりませんでした。

    解決結果ファイルができたら位置を描画してボタンを有効にし、検出の実行中は新しい検出を止めるようにしました。

プレーヤー画面

詳細パネル

シーン分割の実行、シーン移動、分割位置の編集、区間保存をこのパネルで行います。動画のコーデックや解像度などの情報も表示します。