今回の記事はMac OS10.13 High Sierra以前のOSでKindle等の電子書籍のスクリーンショット自動化についてのです。前回の記事では「スクリーンショット.app」をApple Scriptで起動させていましたが古いOSだとそのアプリが実装されていないので対応させてみました。
動画デモ
デモは5ページ分のスクショになっていますが。100ページ分でもそれ以上でも時間があればMacが自動でスクショをとってくれます。
著作物の取り扱い
この記事は購入した電子書籍を私的利用の範囲内で利用したい時のやり方です。著作権等を侵害する行為に記述者は一切関与いたしません。
私的利用の範囲内であればこの記事での操作で法に触れることはありません。しかし作成したデータをインターネット上にアップロードしたり自分以外の人に何らかの方法で渡す行為はNGなのでやめましょう。
この記事ではご自分だけで利用する場合の手間を省く方法を記述しています。
改良版 手順概要
- スクリプトエディターの起動とスクリプトの貼り付け
- スクショ保管用フォルダの作成
- 電子書籍の準備
- 自動スクショ実行
- 一括PDF化
前回の記事からトリム一括処理がなくなった方法となります。
Macでスクリーンショット自動化
1 スクリプトエディターの起動
デスクトップ右上の虫眼鏡マークでスクリプトエディターを検索して起動しましょう。Script editorと入力して候補の.appがでてきたらエンターキーで起動します。
新規書類をクリックする。
2 スクリーンショット自動化文書作成(Mojaveより古いOS対応版)
use scripting additions
use framework "Foundation"
global aRawimg, desktopHeight, hoseiX, hoseiY
display dialog "スクショする回数を入力してください。" default answer "5" with title "xxxxxx Version"
set screenShotNumber to text returned of result
display dialog "右開き?左開き?" buttons {"左", "右"} default button 2 with title "xxxxxx Version"
set temp to result
set btn to button returned of temp
--左上のポジション取得
display dialog "スクショ範囲 左上" & return & "次の秒数後までにマウスを移動させてください。" default answer "5" with title "?秒後に位置計測"
set screenShotSeconds to text returned of result
delay screenShotSeconds --|開始まで5秒間待ちます、この間に測定したい位置にマウスポインタを移動してください|
(* (1) マウスポインターの位置を取得します *)
set {x, y} to my mousePosition()
do shell script "afplay /System/Library/Sounds/Purr.aiff"
--右下のポジション取得
display dialog "スクショ範囲 右下" & return & "次の秒数後までにマウスを移動させてください。" default answer "5" with title "?秒後に位置計測"
set screenShotSeconds to text returned of result
delay screenShotSeconds --|開始まで5秒間待ちます、この間に測定したい位置にマウスポインタを移動してください|
set {x2, y2} to my mousePosition()
do shell script "afplay /System/Library/Sounds/Purr.aiff"
display dialog "スクショ範囲" & return & "左上座標 X" & return & return & "↓上書きで補正できます" default answer x with title "左上 X位置の補正ができます"
set x to text returned of result
display dialog "スクショ範囲" & return & "左上座標 Y" & return & return & "↓上書きで補正できます" default answer y with title "左上 Y位置の補正ができます"
set y to text returned of result
display dialog "スクショ範囲" & return & "右下座標 X" & return & return & "↓上書きで補正できます" default answer x2 with title "右下 X位置の補正ができます"
set x2 to text returned of result
display dialog "スクショ範囲" & return & "右下座標 Y" & return & return & "↓上書きで補正できます" default answer y2 with title "右下 Y位置の補正ができます"
set y2 to text returned of result
display dialog "左上Position (" & x & "," & y & ")" & return & "右下Position (" & x2 & "," & y2 & ")" with title "スクショ範囲 最終確認"
--始点のセット(x,y)始点からの距離の計算(x2-x,y2-y)
set screenX to x
set screenY to y
set screenWidth to x2 - x
set screenHeight to y2 - y
set dFolder to "~/Desktop/screencapture/"
repeat with p from 1 to screenShotNumber
tell application "Kindle" --ここにはアプリケーション名を記述してください。SafariとかKindxとか
activate
tell application "System Events"
if p = 1 then
delay 1
do shell script ("screencapture -R " & screenX & "," & screenY & "," & screenWidth & "," & screenHeight & " " & dFolder & "0.png")
end if
--key code 123
if btn = "右" then
keystroke (ASCII character 29) -- ページ右送り (カーソルキー)
else --左
keystroke (ASCII character 28) -- ページ左送り (カーソルキー)
end if
delay 1
do shell script ("screencapture -R " & screenX & "," & screenY & "," & screenWidth & "," & screenHeight & " " & dFolder & p & ".png")
delay 1
end tell
end tell
end repeat
tell me
activate
display alert "処理が終了しました。"
end tell
on mousePosition()
set mouseLocate to current application's class "NSEvent"'s mouseLocation() --|現在のマウス位置を記録|
try --|デスクトップの高さの変数desktopHeightに数値が設定されていなければ、再設定をする |
desktopHeight as integer
on error
set desktopHeight to (word 4 of (do shell script "/usr/sbin/system_profiler SPDisplaysDataType | grep Resolution | tail -n 1")) as integer
end try
try --|マウス位置の数値上のズレを記録した変数が設定されていなければ、再設定する|
{hoseiX as integer, hoseiY as integer}
on error
(* ポインタを測定原点位置に移動してから、位置を測定しズレを確認。補正変数に記録します *)
set pt to {x:100, y:100}
tell current application to CGPostMouseEvent(pt, 1, 1, 0)
set mouseLoc to current application's class "NSEvent"'s mouseLocation()
set x1 to (x of mouseLoc) as integer
set y1 to desktopHeight - ((y of mouseLoc) as integer)
set pt to {x:x1, y:y1}
tell current application to CGPostMouseEvent(pt, 1, 1, 0)
set mouseLoc to current application's class "NSEvent"'s mouseLocation()
set x2 to (x of mouseLoc) as integer
set y2 to desktopHeight - ((y of mouseLoc) as integer)
set {hoseiX, hoseiY} to {(x2 - x1), (y2 - y1)}
end try
(* マウスポインターの位置を補正を反映して元の位置に戻します *)
set mouseX to ((x of mouseLocate) as integer) - hoseiX
set mouseY to desktopHeight - ((y of mouseLocate) as integer) - hoseiY
set pt to {x:mouseX, y:mouseY}
tell current application to CGPostMouseEvent(pt, 1, 1, 0)
return {mouseX, mouseY}
end mousePosition
上のコードを全てコピーしスクリプトエディターの新規文書にペーストします。終わったらデスクトップに好きな名前で保存して下さい。ここでは「自動スクショ改1」と名前をつけて保存しておきます。
3 スクショファイル保管用フォルダ作成
デスクトップに「screencapture」という名前でフォルダを作りましょう。ここにスクリーンショットが保管されます。すでにこのフォルダが作成済みの場合は作業不要です。
4 Kindleの場合準備
- スクショを取りたい電子書籍をあらかじめ開いておく
- スクショするページ数を調べておく。(正確でなくても大体多めでOK)
- screencaptureフォルダにファイルがなにも無い事を確認する。
- KindleとScript Editorを下の画像の様に横に並べる。
5 自動スクショ実行
- 下の画像の再生ボタンを押す。
- ページ数を入力する。
- ページの開き方(右開き・左開き)なのか選択する。するとスクリーンショットを指定枚数分自動で取得する処理が音を出しながら開始します。
- OKボタンを押して5秒以内にスクショしたい場所の左上にマウスでカーソルを移動させる。注意:クリックはしない!5秒タイマーで位置をスクリプトが特定します。5秒では短すぎる場合は数字を上書きしてOKボタンを押す。
例)Kindleだとマウスでカーソルを表示範囲ギリギリに移動させる。
- OKボタンを押して5秒以内にスクショしたい場所の右下にマウスでカーソルを移動させる。注意:クリックはしない!
例)Kindleだとマウスでカーソルを表示範囲ギリギリに移動させる。
- 右下位置の特定が完了すると以下の四つのメッセージが順に表示されます。位置を変える場合はここで手入力が可能です。*この機能を使って微調整してください。少ないスクショ回数で行うのをおすすめします。
- スクショ範囲最終確認メッセージ OKボタンを押すと自動スクショが開始されます。
- 以下の画面が表示されて終了です
一括PDF化
- デスクトップに作成したscreencaptureフォルダを開いて、中に出来上がったスクショファイルを全選択してから右クリックしプレビューアプリで開く。
- 開いたらファイル→プリントで印刷する
- ウィンドウ下部のPDFボタンから「PDFとして保存を選択」
Kindle以外の場合はどうするの?
スクリプトの48行目に以下の箇所があるのでそこを他のアプリケーション名に変更すればOKです。
tell application "Kindle" --ここにはアプリケーション名を記述してください。SafariとかKindxとか
例 safari
tell application "safari" --ここにはアプリケーション名を記述してください。SafariとかKindxとか
例 honto
tell application "honto" --ここにはアプリケーション名を記述してください。SafariとかKindxとか
アプリケーション名がわからない場合はこちらを参考にしてください。↓
おわりに
いかがだったでしょか?範囲指定でスクショを自動化するのでトリミングの手間はかかりません。少し最初の範囲指定位置を決めるのに時間がかかるかもしれませんが、自動化枚数を少なくしてから何度か挑戦・調整するとうまくできるかと思います。今後はPDF化の手作業部分を自動化していきますね。
参考書籍等(広告アフィリエイト)
参考書籍をアフィリエイト広告から貼り付けております。問題がある場合は検索エンジンでタイトルを検索してからご購入ください。
コメント
コメント一覧 (2件)
スクショ範囲の左上を指定したあとで「スクリプトエラー CGPostMouseEventを続けることができません。」と出てしまいます。
hiroさん コメントありがとうございます
CGPostMouseEventの件ですがお使いのMacOSのバージョンによって
使える使えないの違いがあるようです。
もし新しいMacOSをお使いの場合は以下の記事を参考にしてみてください。
https://scombu.com/2020/02/22/2020-02-22-191519/#howtoimagefilecreate