LoginSignup
sawa-akabee
@sawa-akabee

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

screencaptureコマンド(Mac)の-G<id>オプションで使用するidについて

知りたいこと

  • screencaptureコマンドの-Gオプションのidとは何を指すのか
  • idはどのようにして調べれば良いのか

やりたいこと

  • https://dyny001.net/soundvoice-capture/
  • 上記に記載の通り作業し、画面の録画時に自分のマイク入力と相手の音声が録画できるようになりました(⌘+⇧+5によるキャプチャの場合)
  • 続けて、/Users/(個人ディレクトリ)/Movies/ScreenCapture/YYYYMMDD(当日の日付)内にキャプチャした動画を保存できるようにするため、また、ディレクトリがなかったら自動で生成するようにするために以下の.commandファイルを作成しました
saveDir=/Users/fujisawakoki/Movies/ScreenCapture/"$(date "+%Y%m%d")"

# saveDirが存在するかチェック
if [ -e $saveDir ]; then
    echo $saveDir >> ~/Desktop/log.txt
else
    echo "$saveDir NOT found." >> ~/Desktop/log.txt
    mkdir $saveDir #saveDir作成
fi

screencapture -v -D 2 $saveDir/$(date "+%Y%m%d_%s").mp4
  • しかし、これでは音声が拾えないのでとりあえず-gオプションを最後のコマンドに追記しました
screencapture -v -D 2 $saveDir/$(date "+%Y%m%d_%s").mp4
  • これは失敗で、デフォルトの音声を拾っている(?)ためか相手の声が録音されませんでした
  • となると、上記リンク内「QuickTime Playerでの設定」にある通り、Soundflower(64ch)を指定して録音すれば良いよ考えて、-GオプションでSoundflower(64ch)を指定しようと思いました。

調査したこと

  • man
-G      <id> Captures audio during a video recording using audio source
             specified by id.

-g      Captures audio during a video recording using default input.

HELP!

mac内部で入出力をどのように認識しているか、が肝(多分それがid)だと思うのですが結局わからないままでした・・・

0

2Answer

勘ですが AVFoundation の AVCaptureDevice クラスuniqueID で取得できるユニーク ID ではないかと思ったので調べてみました。

devices.swift
import Cocoa
import AVFoundation

let session = AVCaptureDevice.DiscoverySession.init(deviceTypes: [.builtInMicrophone, .externalUnknown], mediaType: nil, position: .unspecified)

for device in session.devices {
    print("\(device.localizedName) -> \(device.uniqueID)")
}

上記のコードを devices.swift として保存して swift devices.swift を実行するとオーディオデバイス名とユニーク ID が表示されます。

% swift devices.swift
MacBook Pro Microphone -> BuiltInMicrophoneDevice

内蔵マイクのユニーク ID を -G BuiltInMicrophoneDevice で指定してキャプチャーすると音声入りの動画を保存できました。 ID に適当な文字列を指定するとエラーが出るので、ユニーク ID を指定するので合っているようです。

% screencapture -V 3 -G BuiltInMicrophoneDevice out.mov
GVA encoder info: recomputed for fps: 55.045872, gop size in pics: 55, gop size in sec: 1.000000
GVA encoder info: recomputed for fps: 55.045872, gop size in pics: 55, gop size in sec: 1.000000

% screencapture -V 3 -G XYZ out2.mov
screencapture: Capture audio device XYZ not found.

手元で swift devices.swift を実行して(Xcode のインストールが必要です) Soundflower のユニーク ID を確認してみてください。デバイスによってはユニーク ID は 0x802000000123abcd のような16進数になることもあります。

1

Comments

  1. @sawa-akabee

    Questioner
    おおお!できました!

    ~ $ swift Desktop/devices.swift
    Soundflower (64ch) -> SoundflowerEngine:1

    これをIDとして指定することで想定通りのキャプチャに成功しました!

    他人のふんどしで・・・という感じですが、困っていらした海外のAppleコミュニティの方にも回答してあげたいと思ってます
    https://discussions.apple.com/thread/251461223
    (残念ですが、もう時間が経ちすぎてクローズされてました)

    迅速な回答本当に感謝します!ありがとうございました!m( _ _ )m
  2. 動いたようでよかったです!回答できる場所があればぜひ答えてあげてください!

せっかくなので AVCaptureDevice の一覧を出力するコマンドラインツールを作りました。 https://github.com/uasi/list-av-capture-devices

% list-av-capture-devices
[
  {
    "deviceType" : "AVCaptureDeviceTypeBuiltInMicrophone",
    "isConnected" : true,
    "localizedName" : "MacBook Proのマイク",
    "manufacturer" : "Apple Inc.",
    "modelID" : "Digital Mic",
    "uniqueID" : "BuiltInMicrophoneDevice"
  },
  {
    "deviceType" : "AVCaptureDeviceTypeExternalUnknown",
    "isConnected" : true,
    "localizedName" : "mmhmm Camera",
    "manufacturer" : "mmhmm, inc.",
    "modelID" : "mmhmmCameraModel",
    "uniqueID" : "mmhmmCameraDevice"
  }
]
0

Comments

  1. @sawa-akabee

    Questioner
    強い・・・頻繁にそのへんの情報必要になる人にはめっちゃ助かりそうですね。ありがとうございます!

Your answer might help someone💌