以下の記事でビデオファイルのトリミングと書き出し処理を自動化する方法について紹介しました。
7rikazhexde-techlog.hatenablog.com
本記事では動画内容とトリミング処理次第ではLosslessCutというアプリを使用することでも実現できることがわかったため紹介します。
LosslessCutアプリについて
LosslessCutはトリミングと出力処理に対応したGUIアプリでマルチプラットフォームに対応しています。 また、書き出しが速いという特徴がありとても使いやすいアプリになっています。詳細は下記GitHubを確認してください。
トリミング機能について
トリミング機能について調べたところ特徴的な機能として以下2つがありました。
1. シーン検出機能
2. トリミングデータのインポート機能
それぞれについて説明します。
シーン検出機能
ツールメニューの中にシーン検出機能があります。
トリミングは開始位置と終了位置を指定することで実行できるようになっていますが、検出したシーンを基準にトリミングすることができます。
検出方法には以下があります。
検出方法
- 真っ暗なシーンを検出
- 無音のシーンを検出
- シーンの変更を検出
本記事では真っ暗なシーンを検出について、以前の記事で使用した頭文字Dの動画を例に紹介します。 対象とする動画ではアニメの話数の間に黒いシーンがあるため、実際に検出してトリミング区間を設定できるか確認しました。
また、機能の設定として以下の設定が可能でした。
これらの設定は組み込まれているffmpegで使用されるパラメーターであり、Read moreをクリックしたところffmepgのblackdetectのページが表示されました。
実行結果
検出方法としてトリミング区間は作成できており、正確に黒いシーンを検出できていました。
一方で話数の切れ目以外の部分でも黒いシーンとして検出されている部分がありました。
これは動画のオープニングやレースシーンで黒いシーンがあり、それも対象として認識しているためでした。
なお、デフォルトでは検出後、黒い部分を出力するような表示となりますが、画面左下の陰陽マークをクリックすると保存する部分と削除する部分を反転することができます。これで出力時に真っ暗なシーン部分をカットすることができるようになります。
アプリでは期待する結果でなければ手動修正もできます。また、黒いシーンの検出時間を時間ベースで調整できるようになっているため、検出時間を調整することで正しく検出できるケースもあると思います。 以下は黒いシーンの検出時間を指定する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ファイルのデータを基に分割出力することができました。
出力処理について、出力ボタン押下後から終了まで4秒程で完了しました。とても速いです。
詳細は未確認ですが、ffmpegを使用して、データコピーが主で解像度変更しないため書き出し処理が速いようです。
トリミングについてはcsvファイルを準備できるのであればこの機能はすごく有用だと思います。
その他ツールの使い方についてはGitHubのFeaturesやUseCaseを見ると確認できます。
まとめ
LosslessCutアプリを使用した動画のトリミング処理について以下の機能を紹介しました。
- シーン検出機能
- トリミングデータのインポート機能
MacはQuickTimePlayerがあるので良いですが、Windowsの純正アプリは使いづらいのでトリミングをするのであればLosslessCutはおすすめできるアプリです。(マルチプラットフォームにも対応しているため、Macでも使用することはできます。)
また、コードはオープンソースであり無料でDLして使えますが、公式ストアから購入することもできます。
Contributorへの寄付も可能です。
個人的にも非常に良いアプリと感じているため情報として共有しておきます。
また、一部機能はCLIにも対応しているようで、詳細は未確認ですが、アプリ外から操作することができるようです。
前回紹介したコードでトリミングデータ指定でLosslessCutの出力機能が使えると、より使いやすくなるため、連携できるか引き続き調査しようと思います。うまく連携できた場合はブログでも紹介します。