gpt4 book ai didi

java - 通过 Java 使用 Quicktime 进行录制

转载 作者:行者123 更新时间:2023-11-30 07:36:27 25 4
gpt4 key购买 nike

我想使用 Java 使用 Quicktime 进行录音,但是当我尝试输入文件夹和文件时出现一些问题。我认为这可能是一个时间问题,所以延迟了,但它仍然会发生。开始录制的代码是:

public static void startQTrecord(){     
//Activate QT
try{
String[] go = { "osascript", "-e", "tell application \"QuickTime Player\" to activate" };
Process process = Runtime.getRuntime().exec(go);
process.waitFor();

} catch (IOException ex) {
System.out.println(ex.toString());
} catch (InterruptedException ex) {
System.out.println(ex.toString());
}
//Start new recording
try{
String[] go = { "osascript", "-e", "tell application \"QuickTime Player\" to start new movie recording" };
Process process = Runtime.getRuntime().exec(go);
process.waitFor();
} catch (IOException ex) {
System.out.println(ex.toString());
} catch (InterruptedException ex) {
System.out.println(ex.toString());
}

停止并保存的代码是:

public static void closeQT(){
//Go to QT
try {
String[] go = {"osascript", "-e", "tell application \"QuickTime Player\" to activate"};
Process process = Runtime.getRuntime().exec(go);
process.waitFor();
} catch (IOException ex) {
System.out.println(ex.toString());
} catch (InterruptedException ex) {
System.out.println(ex.toString());
}
//Stop the recording
try {
String[] go = {"osascript", "-e", "tell application \"QuickTime Player\" to stop document \"movie recording\""};
Process process = Runtime.getRuntime().exec(go);
process.waitFor();
} catch (IOException ex) {
System.out.println(ex.toString());
} catch (InterruptedException ex) {
System.out.println(ex.toString());
}
//Save
try {
sleep(100);
String[] go = {"osascript", "-e", "tell application \"System Events\" to keystroke \"s\" using {command down}", "-e", "delay 1"};
Process process = Runtime.getRuntime().exec(go);
process.waitFor();
} catch (IOException ex) {
System.out.println(ex.toString());
} catch (InterruptedException ex) {
System.out.println(ex.toString());
}
//Enter the save directory
try {
sleep(100);
String[] go = {"osascript", "-e", "tell application \"System Events\" to keystroke \"G\" using {command down, shift down}", "-e", "delay 1"};
Process process = Runtime.getRuntime().exec(go);
process.waitFor();
} catch (IOException ex) {
System.out.println(ex.toString());
} catch (InterruptedException ex) {
System.out.println(ex.toString());
}
try {
sleep(100);
String gofolder = "tell application \"System Events\" to keystroke \"" + folder + "\"";
String[] go = {"osascript", "-e", gofolder, "-e", "delay 1", "-e", "tell application \"System Events\" to keystroke return", "-e", "delay 1"};
Process process = Runtime.getRuntime().exec(go);
process.waitFor();
} catch (IOException ex) {
System.out.println(ex.toString());
} catch (InterruptedException ex) {
System.out.println(ex.toString());
}
try {
sleep(100);
String[] go = {"osascript", "-e", "tell application \"System Events\" to keystroke\""+file+"\"", "-e", "tell application \"System Events\" to keystroke return", "-e", "delay 1"};
Process process = Runtime.getRuntime().exec(go);
process.waitFor();
} catch (IOException ex) {
System.out.println(ex.toString());
} catch (InterruptedException ex) {
System.out.println(ex.toString());
}
/////////////////////////////////////////////
//Wait for save then quit
boolean keepWaiting = true;
while(keepWaiting){
try{
Runtime rt = Runtime.getRuntime();
String[] commands = {"osascript", "-e", "delay 5", "-e", "tell application \"QuickTime Player\" to quit"};
Process proc = rt.exec(commands);
proc.waitFor();
BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
String s = null;
// read any errors from the attempted command
if(stdError.readLine() == null){keepWaiting = false;}
} catch (IOException ex) {
System.out.println(ex.toString());
} catch (InterruptedException ex) {
System.out.println(ex.toString());
}
}

}

有时它工作正常,但其他时候它会到达文件夹窗口并且无法粘贴正确的文本。

关于为什么这不起作用或者是否有更好的方法有什么想法吗?

谢谢!

最佳答案

最好使用 appleScript 的保存命令,而不是使用击键命令

public static void closeQT(){
//Pause the recording, save and quit
try {
String[] go = {"osascript", "-e", "set tFile to \""+fullPosixPathOfFile+"\" as posix file", "-e", "do shell script \"touch \" & quoted form of posix path of tFile", "-e", "tell application \"QuickTime Player\"", "-e", "pause document 1", "-e", "save document 1 in tFile", "-e", "stop document 1", "-e", "close document 1 saving no", "-e", "quit", "-e", "end tell"};
Process process = Runtime.getRuntime().exec(go);
process.waitFor();
} catch (IOException ex) {
System.out.println(ex.toString());
} catch (InterruptedException ex) {
System.out.println(ex.toString());
}
}

将要保存影片的文件路径放入fullPosixPathOfFile变量中

<小时/>

这是一个有效的 AppleScript 示例

set tFile to (path to desktop folder as string) & "MyMovie.mov" -- save the movie to the desktop

do shell script "touch " & quoted form of POSIX path of tFile -- "QuickTime Player" need an existing file (otherwise permissions issue), so the touch command create an empty file
tell application "QuickTime Player"
launch
set newMovieRec to new movie recording
tell newMovieRec
start
delay 10 -- duration in seconds of this new movie
pause
save in (file tFile) -- The term "file" is necessary when the type of the path is HFS (path with colon character --> "diskName:folder1:subFolder2:myMovie.mov")
--save in tFile -- use this line when the tFile variable contains a posix file (a posix path converted to a posix file)
stop
close saving no
end tell
quit
end tell
<小时/>

要检查Quicktime的版本:

tell application "QuickTime Player"
set v to version
considering numeric strings
set newVersion to v > "7.6.6" -- change it to the old version which not work
end considering
if newVersion then
-- code to save
else
-- code to save as
end if
end tell

关于java - 通过 Java 使用 Quicktime 进行录制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35327751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com