Mac: iTunesライブラリへビデオファイルを自動追加するApplescript

第2世代Apple TVを使っているのですが、Macに保存している音楽や動画を再生する為にはそれらがiTunesライブラリに入っている必要があります。

しかし、iTunesが動いているのがMac miniで、動画ファイルはMacBook Airからネットワーク越しでMac miniへコピーしていると、わざわざMac miniを操作してiTunesライブラリへそれらを転送するのを思わず忘れてしまったりします。

そこで特定のフォルダとその中のサブフォルダに入っているファイルを検索し、それらをiTunesライブラリに追加するApplescriptを作ってみました。

iTunesはデフォルトで追加するファイルをライブラリフォルダにコピーしてしまうので大きな動画ファイルを扱う場合は、予めiTunesの設定でライブラリフォルダへファイルをコピーしない様に設定した方が良いかもしれません。

次の様な動作をします。

  • 変数strRootPathで設定したフォルダ内に存在するサブフォルダを検索し、それら全てに入っているファイルを見つけ、iTunesライブラリへ追加。
  • 過去にこのスクリプトで追加したファイルを除外する為、変数strLogFullNameで定義されたログファイルに書き込まれているファイル名は処理しない。

という事で、スクリプト本体はこんな感じです。

かなり遠回りな処理をしている気もしますし、まともなエラー処理を行っていないので、利用される際は自己責任でお願いします。

set strRootPath to “USB HDD:Movie” — 検索する親フォルダ。

set LogFullName to “USB HDD:AddedFile.txt” –ログファイル。予め存在している必要有り。

 

— ログファイルを開き、含まれる内容を変数へ代入、ファイルを閉じる。

set FileHanderLog to open for access LogFullName

try

set ConvertedFiles to read FileHanderLog as string

end try

close access FileHanderLog

 

try

— 親フォルダに入っているサブフォルダを検索。

tell application “Finder”

tell folder strRootPath

set strSubFolderList to a reference to (every folder)

end tell

end tell

— 各サブフォルダを処理する為のループを開始。

set strSubFolderNameList to name of strSubFolderList

repeat with i from 1 to count of strSubFolderList

set strSubFolderName to (item i of strSubFolderNameList) as string

set strSubFolderPath to strRootPath & “:” & strSubFolderName

— サブフォルダ内に入っているファイルを検索。

tell application “Finder”

tell folder strSubFolderPath

set strFileList to (a reference to (every file))

end tell

end tell

— 処理中のサブフォルダに入っている各ファイルを処理する為のループを開始。

set strFileNameList to name of strFileList

repeat with j from 1 to count of strFileNameList

set strFileName to (item j of strFileNameList) as string

set strVideoFile to strSubFolderPath & “:” & strFileName

— ログファイルの内容を保持した変数内に現在処理中のファイル名があるか判断。

if (offset in ConvertedFiles of strFileName) ≤ 0 then

— iTunesに処理中のファイルを追加。

tell application “iTunes”

add strVideoFile

— ログファイルを開き、処理したファイル名を追加書き込みし、ファイルを閉じる。

set FileHanderLog to open for access LogFullName with write permission

set aEOF to get eof of FileHanderLog

try

write (strFileName & return) starting at (aEOF + 1) to FileHanderLog

end try

close access FileHanderLog

end tell

end if

end repeat

end repeat

end try

 

自動化するのであれば、これをアプリケーションとして保存してcrontab等で実行すれば決めた時刻や曜日に自動で処理をさせる事が出来ます。

 

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください