7rikazhexde’s tech log

技術的な興味関心、備忘録、アウトプットなどを書いています。

LosslessCutアプリを使用した動画のトリミング処理について

以下の記事でビデオファイルのトリミングと書き出し処理を自動化する方法について紹介しました。

7rikazhexde-techlog.hatenablog.com

本記事では動画内容とトリミング処理次第ではLosslessCutというアプリを使用することでも実現できることがわかったため紹介します。

LosslessCutアプリについて

LosslessCutはトリミングと出力処理に対応したGUIアプリでマルチプラットフォームに対応しています。 また、書き出しが速いという特徴がありとても使いやすいアプリになっています。詳細は下記GitHubを確認してください。

github.com

トリミング機能について

トリミング機能について調べたところ特徴的な機能として以下2つがありました。
1. シーン検出機能
2. トリミングデータのインポート機能

それぞれについて説明します。

シーン検出機能

ツールメニューの中にシーン検出機能があります。
トリミングは開始位置と終了位置を指定することで実行できるようになっていますが、検出したシーンを基準にトリミングすることができます。
検出方法には以下があります。

検出方法

  • 真っ暗なシーンを検出
  • 無音のシーンを検出
  • シーンの変更を検出

本記事では真っ暗なシーンを検出について、以前の記事で使用した頭文字Dの動画を例に紹介します。 対象とする動画ではアニメの話数の間に黒いシーンがあるため、実際に検出してトリミング区間を設定できるか確認しました。

また、機能の設定として以下の設定が可能でした。

真っ暗なシーンの検出機能の設定

これらの設定は組み込まれているffmpegで使用されるパラメーターであり、Read moreをクリックしたところffmepgのblackdetectのページが表示されました。

ffmpeg.org

実行結果

検出方法としてトリミング区間は作成できており、正確に黒いシーンを検出できていました。

真っ暗なシーンを検出(black_min_duration=2)

一方で話数の切れ目以外の部分でも黒いシーンとして検出されている部分がありました。
これは動画のオープニングやレースシーンで黒いシーンがあり、それも対象として認識しているためでした。

なお、デフォルトでは検出後、黒い部分を出力するような表示となりますが、画面左下の陰陽マークをクリックすると保存する部分と削除する部分を反転することができます。これで出力時に真っ暗なシーン部分をカットすることができるようになります。

真っ暗なシーンを検出(black_min_duration=2.0 / 選択したセグメントを保存)

アプリでは期待する結果でなければ手動修正もできます。また、黒いシーンの検出時間を時間ベースで調整できるようになっているため、検出時間を調整することで正しく検出できるケースもあると思います。 以下は黒いシーンの検出時間を指定するblack_min_durationを1.0秒と3.0秒に指定した結果です。

真っ暗なシーンを検出(black_min_duration=1.0,3.0)

トリミングデータのインポート機能

LosslessCutでは他にも機能としてトリミングするデータ(.csv)をimportする機能がありました。

トリミングデータのインポート機能

データ形式は以下の通りです。
区間毎に行指定でデータをcsvファイル指定で作成し、そのデータを読み込むことでトリミング設定をすることができます。

フォーマット

開始時間,終了時間,区間名

import機能について、前回記事のコードに対して、タイムスタンプデータをcsvファイルに出力する処理を追加して試してみました。

コード上はトリミング処理メソッドの直前に指定のパスにcsvファイル('./media/timestamp_data.csv')に出力します。

指定として、時間(秒)とフレーム数がありますが、時間(秒)のデータを読み込みます。
実際に読み込んだ、timestamp_data.csvは下記の通りです。

0.0,1637.6693666666667,seg_1
1655.6873666666668,3293.3567333333335,seg_2
3310.340366666667,4948.009733333333,seg_3

実行結果

開始から終了時間の秒数分のトリミング区間が反映され、csvファイルのデータを基に分割出力することができました。

timestamp_data.csv読み込み時

出力処理について、出力ボタン押下後から終了まで4秒程で完了しました。とても速いです。
詳細は未確認ですが、ffmpegを使用して、データコピーが主で解像度変更しないため書き出し処理が速いようです。
トリミングについてはcsvファイルを準備できるのであればこの機能はすごく有用だと思います。

その他ツールの使い方についてはGitHubのFeaturesやUseCaseを見ると確認できます。

まとめ

LosslessCutアプリを使用した動画のトリミング処理について以下の機能を紹介しました。

  1. シーン検出機能
  2. トリミングデータのインポート機能

MacはQuickTimePlayerがあるので良いですが、Windowsの純正アプリは使いづらいのでトリミングをするのであればLosslessCutはおすすめできるアプリです。(マルチプラットフォームにも対応しているため、Macでも使用することはできます。)

また、コードはオープンソースであり無料でDLして使えますが、公式ストアから購入することもできます。 Contributorへの寄付も可能です。
個人的にも非常に良いアプリと感じているため情報として共有しておきます。

apps.microsoft.com

LosslessCut

LosslessCut

  • Mikael Finstad
  • 仕事効率化
  • ¥3,000
apps.apple.com

また、一部機能はCLIにも対応しているようで、詳細は未確認ですが、アプリ外から操作することができるようです。

前回紹介したコードでトリミングデータ指定でLosslessCutの出力機能が使えると、より使いやすくなるため、連携できるか引き続き調査しようと思います。うまく連携できた場合はブログでも紹介します。