0
1

More than 1 year has passed since last update.

AppleScriptでMacの画面録画する際の音声を切り替える

Posted at

TL;DR

画面録画するとき、Macだと標準では内蔵マイクを入力にするので、Soundflowerや複数出力装置に音声切り替えをして録画している。私の環境では、Macbook Proのスピーカー、DELL~、Soundflower(2Ch)、Soundflower(64Ch)などがある。

image.png

録画のたびに音声を切り替えするのが面倒なのでAutomatorで切り替えするWorkflowを作った。

Menubarのサウンドのところが自動で切り替わっている様子。
menubar_fps30_width640.gif

Motivation

Macで画面録画するのに、毎回音声をSoundflower(または複数出力装置)に設定して、Shift+Command+5するのが面倒。
画面録画するコマンド screencapture は、screencapture -V 10 out.mov など、オプションで秒数指定しないといけない。毎回指定するのはかなり面倒。また、標準では、Macbookの内蔵マイクを入力にしているので、動画のキャプチャなどに向いていない。Mac内で再生された音声を録音するためには、Soundflower (2Ch)、Soundflower (64Ch)を入力にする必要がある。(または複数出力装置)
-Gオプションを使えば、screencapture -V 10 -G SoundflowerEngine:0 out.mov などでSoundflowerに指定できるが、(参照 list-av-capture-devices)、私の環境(Intel Macbook pro 2020, OS:Monterey)ではどちらでも音声を拾えなかった。

そこで、
(i) Menubarのサウンドを「複数出力装置」に設定→Shift+Command+5で録画するAppleScript(アプリケーション)
(ii) movファイルが出力されたらサウンド設定を元の「Macbookのスピーカー」に戻すWorkflow
を作成した。
ついでにmovをmp4にするWorkflowも作ったが録画するたびにエンコードにCPUを使うのは面倒なので使うかはペンディング。 結局使わなかった。
(movはなぜか容量が大きくて、mp4にエンコードすると容量が小さくなる。酷いときにはmp4にエンコードしたら10分の1くらいにもになる...)

Procedure

(i) Menubarのサウンドを「複数出力装置」に設定→Shift+Command+5で録画するAppleScript

Automator→アプリケーション→AppleScriptを実行
image.png

image.png

Better Touch Toolなどでショートカットを割り当てれば便利。

(ii) movファイルが出力されたらサウンド設定を元の「Macbookのスピーカー」に戻すWorkflow (フォルダアクション)
image.png

Automator→フォルダアクション→AppleScriptを実行
image.png

フォルダアクションで、次の場所に追加されたファイルやフォルダを受け取る:のところを自分の環境で画面録画が保存されるフォルダにする。

(ついでにmovをmp4にするWorkflowも作ったが,,,これを使う場合はシェルスクリプトを実行、入力の引き渡し方法のところを引数としてにすること)

最初に実行したらアラートが出て、FolderActionsDispatcherを許可しないといけない?当然、作ったアプリケーションの許可も。
image.png

Finderからフォルダアクションの設定も必要(かもしれない)。
image.png
image.png

Source

record.app
tell application "System Events"
	tell application process "ControlCenter"
		set volMenu to menu bar item "サウンド" of menu bar 1
		tell volMenu to click
		set controlWindow to window "コントロールセンター"
		set outputsList to scroll area of controlWindow
		set complexToggle to checkbox 1 of scroll area 1 of window "コントロールセンター" whose title contains "複数出力装置"
		set complexToggleValue to value of complexToggle
		tell complexToggle to click
		tell volMenu to click
	end tell
end tell
tell application "System Events"
	key code 23 using {command down, shift down} -- command+shiftを押しながら5
end tell
Menubarのサウンドを「複数出力装置」に設定→`Shift+Command+5`で録画するAppleScript。画面全体を収録するのか、選択部分を収録するのかで毎回異なると思うので、その直前まで自動化。 "複数出力装置"のところを自分の環境に合わせてください。

(ii) movファイルが出力されたらサウンド設定を元の「Macbookのスピーカー」に戻すWorkflow

soundchange.workflow
tell application "System Events"
	tell application process "ControlCenter"
		set volMenu to menu bar item "サウンド" of menu bar 1
		tell volMenu to click
		set controlWindow to window "コントロールセンター"
		set outputsList to scroll area of controlWindow
		set complexToggle to checkbox 1 of scroll area 1 of window "コントロールセンター" whose title contains "MacBook Pro"
		set complexToggleValue to value of complexToggle
		tell complexToggle to click
		tell volMenu to click
	end tell
end tell
ほぼ再利用。

movをmp4にするWorkflowはこれ。

originPath=$1
newFilePath=${originPath/.mov/.mp4}
/usr/local/bin/ffmpeg -i $originPath $newFilePath
echo "$originPath"
originPath=$1
if [ -f ${originPath%.*}.mov ]; then mv ${originPath%.*}.mov ~/.Trash; fi

最後に

movファイルってなんであんなに重いの〜

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1