MacFeeling Blog

マックな感じ …

GoProのファイル名を撮影順にリネームする(Automator編)

公開 : | 0件のコメント

GoProで撮った動画ファイル、長時間だと分割されるのですが、ファイル名の付け方がちょっと独特なので、後で確認するときにすごく不便です。
具体的には、【GoPro】わかりづらい動画ファイル名問題をスッキリ解決してくれる神スクリプト! - たかねこのひとり放浪記 のページに分かりやすくまとめられているので、ご覧になってください。
で、これを解決してくれるスクリプトが最後に紹介されていたので、GoPro動画の連番をリネームするVBScript | 神山オンラインのページ行ってみたところ、残念ながらWindowsのものでした。
そこで、これを参考にしてMacで使うために、Automatorでクイックアクションを作ってみました。

環境
macOS Monterey 12.2.1
Mac mini (M1, 2020)
GoPro HERO10 Blackで撮影した動画ファイル。拡張子はMP4

Automator.appを起動したら、クイックアクションを選んで、「選択」ボタンをクリック

ワークフローが受け取る現在の項目:ファイルまたはフォルダ
検索対象:Finder.app
イメージ:アクション

左のライブラリから、「ファイルとフォルダ」»「選択されたFinder項目を取得」を右ウインドウにドラッグ&ドロップ。オプションの「このアクションの入力を無視」にチェックを入れる。

左のライブラリから、「ユーティリティ」»「Apple Scriptを実行」を右ウインドウにドラッグ&ドロップ。

以下のスクリプトをコピー&ペーストしてください。
正規表現の処理部分は、Cocoaの機能を使って正規表現で文字列を抽出するAppleScriptハンドラ - Qiitaのページのものを使わせていただきました。大変助かりました。ありがとうございます。
なお、GoProの動画ファイルは「.MP4」で作成しているので、判定で決め打ちしています。
他の拡張子の場合は、(item 5 of matchResultList = ".MP4")の部分を変更してください。

use scripting additions
use framework "Foundation"

on run {input, parameters}
	repeat with fileItem in input
		--ファイル名を取得
		tell application "Finder"
			set oldFileName to name of fileItem as string
		end tell
		
		--正規表現を使って分割
		set matchResultList to regexMatches(oldFileName, "(G.)(\\d{2})(\\d{4})(.+)")
		if (length of matchResultList = 5) and (item 5 of matchResultList = ".MP4") then
			--正規表現の結果が5で、拡張子部分が.MP4の時のみ処理を続ける
			set newFileName to item 2 of matchResultList & item 4 of matchResultList & "-" & item 3 of matchResultList & item 5 of matchResultList
			
			--リネームする			
			tell application "Finder"
				try
					set (name of fileItem) to (newFileName as string)
				on error
					display dialog "error"
				end try
			end tell
		end if
	end repeat
	
	return input
end run

to regexMatches(aText as text, pattern as text)
	set regularExpression to current application's NSRegularExpression's regularExpressionWithPattern:pattern options:0 |error|:(missing value)
	set aString to current application's NSString's stringWithString:aText
	set matches to regularExpression's matchesInString:aString options:0 range:{location:0, |length|:aString's |length|()}
	
	repeat with match in matches
		set matchResult to {}
		repeat with i from 0 to (match's numberOfRanges as integer) - 1
			set end of matchResult to (aString's substringWithRange:(match's rangeAtIndex:i)) as text
		end repeat
	end repeat
	return matchResult
end regexMatches

ペーストしたら、コンパイルボタンをクリックして、コンパイルしてください。

問題なくコンパイルが完了したら、「ファイル」メニューより「保存...」を選択して、「クイックアクションの名前」を入力して保存してください。(例では「GoPro動画ファイルリネーム」としました。)

クイックアクションの実行は、リネームするファイルを選択して、右クリック。「クイックアクション」»「GoPro動画ファイルリネーム」で実行されます。

実行結果。撮影順に並びました。

なお、作成したクイックアクションファイルの格納場所は「~/ライブラリ/Services」内になります。

コメントを残す

必須欄は * がついています




日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)