7 votes

Comment puis-je faire plusieurs enregistrements d'écran avec la même partie exacte de l'écran

Je ne peux sélectionner que manuellement la partie de l'écran à enregistrer. Je veux qu'elles soient toutes exactement les mêmes afin que lorsque les vidéos sont lues séquentiellement, tout s'aligne.

entrer la description de l'image ici

J'utilise QuickTime et j'aimerais idéalement simplement rester avec ça si possible.

1 votes

Vous pouvez trouver ceci utile : apple.stackexchange.com/questions/63056/…

0 votes

Merci cela m'a mis sur la bonne voie... Je vais maintenant poster ma solution...

8voto

matt burns Points 3762

MISE À JOUR : La réponse de @Andre LaBranche est meilleure, allez lire cela


Enregistrez ce script sous caperture.swift:

#!/usr/bin/env xcrun swift
import Foundation

// Démarrer QuickTime Player en utilisant 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("ERREUR : \(error)")
        }
    }
}

// Cliquer et faire glisser la souris selon les arguments de la ligne de commande fournis
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("utilisation :")
    print("    ./caperture.swift -x 100 -y 100 -w 400 -h 300")
} else {
    startQT()
    dragMouse()
}

Une fois que le fichier caperture.swift est enregistré. Vous devez vous assurer qu'il peut être exécuté.

Dans Terminal.app, exécutez la commande :

chmod +x caperture.swift

Ensuite, vous l'exécutez avec :

./caperture.swift -x 100 -y 100 -w 400 -h 300

Cela démarrera QuickTime Player prêt à commencer l'enregistrement comme ceci :

capture d'écran

Cela dépend d'AppleScript et de swift donc vous devrez aussi avoir xcode installé.

C'était vraiment utile pour moi donc je l'ai mis sur github sous le nom de caperture au cas où quelqu'un voudrait l'améliorer.

1 votes

Je pense que ceci pourrait être notre première réponse avec du code Swift dedans! Stellar!

0 votes

J'ai édité la réponse. Mais je n'ai pas corrigé une erreur dans votre code car elle pourrait être intentionnelle pour une raison quelconque. Mais la ligne let p1 = CGPointMake(x + dx, y + dy) devrait être let p1 = CGPointMake(dx, dy) il n'est pas nécessaire d'ajouter les entiers et le faire provoque une inexactitude des limites de ce qui est placé dans l'applescript. Par exemple, si j'utilise les limites {364, 206, 1038, 726}, ce que j'obtiendrai est une fenêtre déplacée {364, 206, 1402, 932}

0 votes

Merci Mark. dx et dy représentent en réalité la largeur et la hauteur, et non le point en bas à droite, j'ai donc renommé pour refléter cela. J'ai également intégré votre suggestion de fusionner dans un seul fichier. Voir github.com/mattburns/caperture pour la version actuelle. Santé

4voto

Andre LaBranche Points 56

Ici en 2020 - macOS Catalina et ultérieur permet à l'outil intégré /usr/sbin/screencapture d'avoir des options pour spécifier la zone de capture. Et si vous l'utilisez graphiquement, il se souvient de la dernière sélection donc à moins que vous ne la changiez, vous pouvez relancer l'application et obtenir les mêmes réglages sans les détails ci-dessous.

  -R capture l'écran rect
  -v        capture l'enregistrement vidéo de l'écran

Par exemple :

screencapture -R10,10,500,500 -v cap.mov

Il y a plein d'autres bonnes choses dans la page de manuel :

man screencapture

0 votes

Hourra, mon code est maintenant redondant. Parfait, merci :)

1voto

markhunte Points 11634

Il existe une application appelée Screeny qui fait cela ainsi que de nombreuses autres choses. 14,99 $ et peut être acheté sur l'App Store

1voto

markhunte Points 11634

J'aime beaucoup la réponse de @mat-burns.

Mais comme nous exécuterions l'Applescript à partir de la ligne de commande pour exécuter le code swift de toute façon, je voulais tout faire à partir d'un seul fichier.

Ajout de l'Applescript au code swift:

#!/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()

    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()

Une fois le code enregistré et que nous avons exécuté /bin/chmod +x ~/scripts/clickdrag.swift pour rendre le script exécutable

Remplacez ~/scripts/clickdrag.swift par votre chemin réel vers le fichier swift.

Nous pouvons maintenant exécuter le code à partir de la ligne de commande:

MISE À JOUR

Auparavant, vous auriez dû entrer la ligne de commande comme ceci:

~/scripts/clickdrag.swift -x 364 -y 206 -dx 1038 -dy 726

Mais si nous utilisons la méthode simple pour déterminer les limites dont vous avez besoin en ouvrant une fenêtre Finder et en la façonnant à la zone que vous voulez capturer.

Ensuite, exécutez cet Applescript:

tell application "Finder" to get bounds of window 1

Cela renverra les limites dans le volet des résultats.

-> {364, 206, 1038, 726}

Il serait beaucoup plus facile de copier et coller 364, 206, 1038, 726 dans la commande telle quelle.

La mise à jour ci-dessus vous permet de exécuter la commande comme suit.

~/scripts/clickdrag.swift 364, 206, 1038, 726

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X