見出し画像

複数メディアファイル、総再生時間の表示

このフォルダ内の音声ファイルは総時間どれくらいの長さなんだろう?
と思った時、簡単に情報が得られませんでした。
そこでChatGPTに相談。
「ショートカットキーでポップアップ表示」ができるようになりました。

(このnoteで出てくる「メディアファイル」とは音声や動画ファイルのことを指しています)


Finderでは

普段私はiMacをメインに使っています。
(note作成時 2023年11月 macOS 14.0 Sonoma)

Finder内で音楽ファイル、映像ファイルを1ファイルのみ選択した場合は再生時間が表示されます。
複数選択して再生時間はと…再生時間の項目が消えます。
フォルダ内に複数のメディアファイルがありそのフォルダーの情報を見ても容量の合計は表示されますが再生時間の合計は見当たらない。

メディアを再生できるアプリケーションに入れてプレイリストを作るとトータル時間は出せると思いましたが、もっと簡単にできないのかな?

困った時のChatGPT

というわけでChatGPT-4に相談です。

mac OSのスペシャリストに伺います。

mac 環境でファルダー内にあるメディアファイルの合計再生時間を知りたいです。
方法を何通りか教えてください

ChatGPT-4の返答
 ① メディアプレイヤーを利用する方法
 ② ターミナルとスクリプトを利用する方法
 ③ 専用のソフトウェアを利用する方法

上の3つの提案がありその中の②に決めて、プロンプトテクニックも考えず会話するようにやり取りをしました。(エラー等を改善していった結果、Appleスクリプトで完結するシンプルな構成になりました)

GPT-4の出始めの頃、エラー修正を求めてもぐるぐると回答がループして解決できないことが多かったです(私のプロンプトエンジニアリングの問題と思いますが😅)。今回は機能改善やエラーも適切に対応できて完全動作に辿り着きました。
(このnoteを書いている期間中、ChatGPTにGPTsが搭載され利便性や期待感がさらに上がりました。AI関連ツールの進化はとても高速に感じています)

総再生時間をポップアップ表示

メディアファイルが入っているフォルダやファイルを選択し、ショートカットキーを押すとポップアップ画面に再生時間の合計を表示します。

こんな感じの操作と動作です
 ① 
メディアファイルが入っているフォルダ、またはメディアファイルを選択(複数選択可)
 ② ショートカットキーを押す
 ③ 結果表示
 ④ OKをクリックしてポップアップを閉じます

※フォルダを選択した場合は子階層フォルダ内は計算しません

Macの設定(Automatorを使用)

Automator へスクリプトを書き込みショートカットで動くようにします。

Automator 設定

1) Automatorを開き新規ワークフローを作成
2) クイックアクションを選択し以下の手順を実行

  ① ワークフローが受け取る現在の項目
    → "ファイルまたはフォルダ" を選択
  ② 検索対象
    → "Finder.app" を選択
  ③ サイドバーから”AppleScriptを実行” を
    右の広いスペースへドラッグして適用させます

参考画像 1

⑤ スクリプトコードの書き込み

参考画像 2

今回の動作は下記のスクリプトを使っています👇

on run {input, parameters}
    set totalDuration to 0
    repeat with anItem in input
        set theItemPath to POSIX path of anItem
        if theItemPath ends with "/" then
            -- フォルダ内のメディアファイルの再生時間を合計
            tell application "Finder"
                set folderFiles to (files of folder anItem whose name extension is in {"mp4", "mkv", "avi", "mov", "mp3", "wav", "aif", "flac", "ogg", "m4a"})
                repeat with aFile in folderFiles
                    set aFilePath to POSIX path of (aFile as alias)
                    try
                        set fileDuration to do shell script "mdls -name kMDItemDurationSeconds -raw " & quoted form of aFilePath
                        if fileDuration is not "null" then
                            set totalDuration to totalDuration + (fileDuration as number)
                        end if
                    on error
                        -- エラーが発生した場合、このファイルは無視
                    end try
                end repeat
            end tell
        else
            -- 個別のファイルの再生時間を計算
            try
                set fileDuration to do shell script "mdls -name kMDItemDurationSeconds -raw " & quoted form of theItemPath
                if fileDuration is not "null" then
                    set totalDuration to totalDuration + (fileDuration as number)
                end if
            on error
                -- エラーが発生した場合、このファイルは無視
            end try
        end if
    end repeat

    -- 合計時間を分と秒に変換
    set totalMinutes to totalDuration div 60
    set totalSeconds to totalDuration mod 60
    set totalSeconds to round totalSeconds -- ここで秒数を丸める

    -- 秒数が60以上ならば、1分に繰り上げ
    if totalSeconds ≥ 60 then
        set totalSeconds to totalSeconds - 60
        set totalMinutes to totalMinutes + 1
    end if

    -- ダイアログボックスで結果を表示
    tell application "System Events"
        display dialog "Total Duration: " & totalMinutes & " min " & totalSeconds & " sec"
    end tell
end run
  • このスクリプトはMacの「mdls」コマンド(メタデータリストコマンド)を使用して、メディアファイル(例えば、MP4、WAV、AVI、MOV、MP3など)の再生時間(秒数)を取得しています。

⑥ 任意の名前をつけてAutomatorを保存

ショートカットキーの設定

 ❶ システム設定を開く
 ❷ サイドバーの「キーボード」を選択
 ❸ 「キーボードショートカット」をクリック
 ❹ サイドバーの「サービス」を選択
 ❺ 右画面の「ファイルとフォルダ」のトグルを開く
 ❻ その中の⑥で保存した名前の行を選択
 ❼「なし」の部分をダブルクリック
 ❽ ショートカットキーにしたいキーを押す
 ❾ 右下の完了をクリック

完成

フォルダやメディアファイルを選択し登録したショートカットキーを押すと再生時間が表示されます。
(単独でメディアファイルを選択した時はそのファイルの再生時間、フォルダや複数のメディアファイルを選択した場合は再生時間の合計を計算し表示されます)

ショートカットキーを使わなくても動作します
フォルダ、ファイルを選択→右クリック→クイックアクション→保存したワークフロー名をクリック
この手順で実行できます

プチカスタマイズ

表示を変更

上記スクリプトの下から3行目
display dialog "Total Duration: " & totalMinutes & " min " & totalSeconds & " sec"
" " で囲まれた太字の部分を変更すると日本語で表示することもできます

日本語で表示

対象メディアファイルの変更

スクリプトの上から8行目
set folderFiles to (files of folder anItem whose name extension is in {"mp4", "mkv", "avi", "mov", "mp3", "wav", "aif", "flac", "ogg", "m4a"})
この" " で囲まれた拡張子の部分を変更することで計算されるメディアを増減できます。



この記事が気に入ったらサポートをしてみませんか?