Я могу только выбрать часть экрана для записи вручную. Я хочу, чтобы все они были одинаковыми, чтобы при последовательном воспроизведении видео все выстраивалось в линию.
Я использую quicktime и в идеале хотел бы просто придерживаться этого, если это возможно.
Здесь в 2020 году — macOS Catalina и более поздние версии позволяют встроенному /usr/sbin/screencapture
инструменту иметь параметры для указания области захвата. И если вы используете его графически, он запоминает последний выбор, поэтому, если вы его не измените, вы можете перезапустить приложение и получить те же настройки без подробностей ниже.
-R<x,y,w,h> capture screen rect
-v capture video recording of the screen
Например:
screencapture -R10,10,500,500 -v cap.mov
На справочной странице есть куча других полезных вещей:
man screencapture
ОБНОВЛЕНИЕ: ответ @Andre LaBranche лучше, прочитайте это
Сохраните этот скрипт как caperture.swift
:
#!/usr/bin/env xcrun swift
import Foundation
// Start QuickTime Player using AppleScript
func startQT() {
var scriptToPerform: NSAppleScript?
let asCommand = "tell application \"QuickTime Player\" \n" +
" activate \n" +
" new screen recording \n" +
" delay 1 \n" +
" tell application \"System Events\" to key code 49 \n" +
" delay 1\n" +
" end tell"
scriptToPerform = NSAppleScript(source:asCommand)
var possibleError: NSDictionary?
if let script = scriptToPerform {
script.executeAndReturnError(&possibleError)
if let error = possibleError {
print("ERROR: \(error)")
}
}
}
// Click and drag the mouse as defined by the supplied commandline arguments
func dragMouse() {
let args = UserDefaults.standard
let x = CGFloat(args.integer(forKey: "x"))
let y = CGFloat(args.integer(forKey: "y"))
let w = CGFloat(args.integer(forKey: "w"))
let h = CGFloat(args.integer(forKey: "h"))
let p0 = NSPointToCGPoint(NSMakePoint(x, y))
let p1 = NSPointToCGPoint(NSMakePoint(x + w, y + h))
let mouseDown = CGEvent(mouseEventSource: nil, mouseType: CGEventType.leftMouseDown, mouseCursorPosition: p0, mouseButton: CGMouseButton.left)!
let mouseDrag = CGEvent(mouseEventSource: nil, mouseType: CGEventType.leftMouseDragged, mouseCursorPosition: p1, mouseButton: CGMouseButton.left)!
let mouseUp = CGEvent(mouseEventSource: nil, mouseType: CGEventType.leftMouseUp, mouseCursorPosition: p1, mouseButton: CGMouseButton.left)!
let kDelayUSec : useconds_t = 500_000
mouseDown.post(tap: CGEventTapLocation.cghidEventTap)
usleep(kDelayUSec)
mouseDrag.post(tap: CGEventTapLocation.cghidEventTap)
usleep(kDelayUSec)
mouseUp.post(tap: CGEventTapLocation.cghidEventTap)
}
if (CommandLine.arguments.count != 9) {
print("usage:")
print(" ./caperture.swift -x 100 -y 100 -w 400 -h 300")
} else {
startQT()
dragMouse()
}
Как только caperture.swift
файл будет сохранен. Вам нужно будет убедиться, что он может быть выполнен.
В Terminal.app выполните команду:
chmod +x caperture.swift
Затем вы выполняете его с помощью:
./caperture.swift -x 100 -y 100 -w 400 -h 300
Это запустит проигрыватель QuickTime, готовый начать запись следующим образом:
Он основан на AppleScript и Swift, поэтому вам также потребуется установить xcode.
Это было действительно полезно для меня, поэтому я выложил его на github в качестве капертуры на случай, если кто-то захочет его улучшить.
p1 = CGPointMake(x + dx, y + dy)
должно быть let p1 = CGPointMake(dx, dy)
нет необходимости добавлять целые числа, и это делает неверными границы того, что помещено в applescript. Пример, если я использую границы, {364, 206, 1038, 726}
я получу перетаскиваемое окно.{364, 206, 1402, 932}
Существует приложение под названием Screeny , которое делает это, а также многое другое. $ 14,99 и может быть приобретено в магазине приложений
Мне очень нравится ответ @mat-burns.
Но так как мы все равно будем запускать Applescript из командной строки для выполнения быстрого кода, я хотел сделать все это из одного файла.
Добавление Applescript в быстрый код:
#!/usr/bin/env xcrun swift
import Foundation
let kDelayUSec : useconds_t = 500_000
func DragMouse(p0: CGPoint, p1: CGPoint) {
let mouseDown = CGEventCreateMouseEvent(nil, CGEventType(kCGEventLeftMouseDown), p0, CGMouseButton(kCGMouseButtonLeft)).takeUnretainedValue()
let mouseDrag = CGEventCreateMouseEvent(nil, CGEventType(kCGEventLeftMouseDragged), p1, CGMouseButton(kCGMouseButtonLeft)).takeUnretainedValue()
let mouseUp = CGEventCreateMouseEvent(nil, CGEventType(kCGEventLeftMouseUp), p1, CGMouseButton(kCGMouseButtonLeft)).takeUnretainedValue()
CGEventPost(CGEventTapLocation(kCGHIDEventTap), mouseDown)
usleep(kDelayUSec)
CGEventPost(CGEventTapLocation(kCGHIDEventTap), mouseDrag)
usleep(kDelayUSec)
CGEventPost(CGEventTapLocation(kCGHIDEventTap), mouseUp)
}
func ascript(){
var scriptToPerform: NSAppleScript?
let asCommand = "tell application \"QuickTime Player\" \n activate \n new screen recording \n delay 1 \n tell application \"System Events\" to key code 49 \n delay 1\n end tell"
scriptToPerform = NSAppleScript(source:asCommand)
var errorInfo = AutoreleasingUnsafeMutablePointer<NSDictionary?>()
if let script = scriptToPerform {
script.executeAndReturnError(errorInfo)
}
}
func main() {
let p0 = CGPointMake( CGFloat(atoi( C_ARGV[1])), CGFloat(atoi( C_ARGV[2])))
let p1 = CGPointMake( CGFloat(atoi( C_ARGV[3])), CGFloat(atoi( C_ARGV[4])))
DragMouse(p0, p1)
}
ascript()
main()
После того, как код сохранен и мы запустили /bin/chmod +x ~/scripts/clickdrag.swift
, чтобы сделать скрипт исполняемым
Измените ~/scripts/clickdrag.swift
фактический путь к файлу swift.
Теперь мы можем запустить код из командной строки:
ОБНОВЛЯТЬ
Раньше вам пришлось бы вводить командную строку так:
~/scripts/clickdrag.swift -x 364 -y 206 -dx 1038 -dy 726
Но если мы воспользуемся простым способом определения любых необходимых границ, открыв окно поиска и придав ему форму области, которую вы хотите захватить.
Затем запустите этот Applescript:
tell application "Finder" to get bounds of window 1
Это вернет границы на панели результатов.
-> {364, 206, 1038, 726}
Было бы намного проще скопировать и вставить 364, 206, 1038, 726
в команду как есть.
Приведенное выше обновление позволяет вам запускать команду следующим образом.
~/scripts/clickdrag.swift 364, 206, 1038, 726
Ян С.
Мэтт Бернс