gpt4 book ai didi

Python 使用 osascript 将文件路径变量传递到 Applescript

转载 作者:太空宇宙 更新时间:2023-11-03 18:27:53 25 4
gpt4 key购买 nike

我正在尝试从 Python 将文件路径传递到 n Applescript 中,不知道如何实现它。下面的代码显示了工作的 Applescript 代码,它提示打开一个或多个文件,然后重新分配音频 channel ,保存并关闭。我不想提示输入一个或多个文件,而是想将文件路径传递到 osascript Applescript 中,我已经设置了参数,但不确定如何让它工作。

from subprocess import Popen, PIPE

scpt = '''
on run
open (choose file with prompt ("Choose movie file(s)") ¬
with multiple selections allowed)
end run

on open aa
set channel_layouts_map1 to {¬
{"Sound Track 1", "Sound Track 1", {"Left"}}, ¬
{"Sound Track 2", "Sound Track 2", {"Right"}}, ¬
{"Sound Track 3", "Sound Track 3", {"Center"}}, ¬
{"Sound Track 4", "Sound Track 4", {"LFE Screen"}}, ¬
{"Sound Track 5", "Sound Track 5", {"Left Surround"}}, ¬
{"Sound Track 6", "Sound Track 6", {"Right Surround"}}, ¬
{"Sound Track 7", "Sound Track 7", {"Left Total"}}, ¬
{"Sound Track 8", "Sound Track 8", {"Right Total"}} ¬
}
set channel_layouts_map2 to {¬
{"Sound Track 1", "Sound Track 1", {"Left"}}, ¬
{"Sound Track 2", "Sound Track 2", {"Right"}}, ¬
{"Sound Track 3", "Sound Track 3", {"Center"}}, ¬
{"Sound Track 4", "Sound Track 4", {"LFE Screen"}}, ¬
{"Sound Track 5", "Sound Track 5", {"Left Surround"}}, ¬
{"Sound Track 6", "Sound Track 6", {"Right Surround"}}, ¬
{"Sound Track 7", "Sound Track 7", {"Left Total", "Right Total"}} ¬
}
set channel_layouts_map3 to {¬
{"Sound Track", "Sound Track", {"Left", "Right"}} ¬
}
set channel_layouts_map4 to {¬
{"Sound Track 1", "Sound Track 1", {"Left"}}, ¬
{"Sound Track 2", "Sound Track 2", {"Right"}} ¬
}

repeat with a in aa
set f to a's POSIX path
set k to count_sound_tracks(f, {_close:false})
if k = 8 then
remap_audio_channels(f, channel_layouts_map1)
else if k = 7 then
remap_audio_channels(f, channel_layouts_map2)
else if k = 1 then
remap_audio_channels(f, channel_layouts_map3)
else if k = 2 then
remap_audio_channels(f, channel_layouts_map4)
else
-- ignore it (just close it)
close_document(f, {_save:false})
end if
end repeat
end open

on count_sound_tracks(f, {_close:_close})
tell application id "com.apple.quicktimeplayer" -- QuickTime Player 7 Pro
open (f as POSIX file)
tell (document 1 whose path = f)
repeat until exists
delay 0.2
end repeat
set k to count (tracks whose audio channel count > 0)
if _close then close
end tell
end tell
return k
end count_sound_tracks

on close_document(f, {_save:_save})
tell application id "com.apple.quicktimeplayer" -- QuickTime Player 7 Pro
tell (document 1 whose path = f)
if exists then
if _save and modified then save
close
end if
end tell
end tell
end close_document

on remap_audio_channels(f, channel_layouts_map)
script o
property map : channel_layouts_map
property pp : {}
property qq : {}

-- get name and id of sound tracks
tell application id "com.apple.quicktimeplayer" -- QuickTime Player 7 Pro
activate
open (f as POSIX file)
tell (document 1 whose path = f)
repeat until exists
delay 0.2
end repeat
tell (tracks whose audio channel count > 0)
set {pp, qq} to {name, id} -- name and id of sound tracks
end tell
end tell
end tell

-- remap audio channel layouts as specified
tell application "System Events"
tell (process 1 whose bundle identifier = "com.apple.quicktimeplayer")
-- open movie properties window
keystroke "j" using {command down}

tell (window 1 whose subrole = "AXDialog") -- properties for movie
repeat until exists
delay 0.2
end repeat
repeat with m in my map
set {trk, undef, layouts} to m
-- [TRK:
repeat 1 times
if trk's class = integer then
if trk < 1 or trk > (count my pp) then exit repeat -- TRK:
set trk to my pp's item trk
end if
tell scroll area 1
tell table 1
tell (row 1 whose text field 1's value = trk) -- target sound track whose name = trk
if not (exists) then exit repeat -- TRK:
select
end tell
end tell
end tell
tell tab group 1
click radio button 3 -- audio settings
tell scroll area 1
tell table 1 -- channel assignment table
set ix to count layouts
repeat with i from 1 to count rows
if i > ix then exit repeat
tell row i -- channel i
tell pop up button 1
click
tell menu 1 -- channel assignment menu
tell (menu item 1 whose title = layouts's item i)
if exists then click
end tell
end tell
end tell
end tell
end repeat
end tell
end tell
end tell
end repeat
-- /TRK:]
end repeat

-- close movie properties window
click (button 1 whose subrole = "AXCloseButton")
end tell
end tell
end tell

-- rename sound tracks as specified
tell application id "com.apple.quicktimeplayer"
tell document 1
repeat with m in my map
-- [RENAME:
repeat 1 times
set {x, y} to m's items 1 thru 2 -- {old name or index, new name or index}
if x's class = integer then
if x < 1 or x > (count my pp) then exit repeat -- RENAME:
else
set x to my _index_of(pp, x)
if x = 0 then exit repeat -- RENAME:
end if
if y's class = integer then
if y < 1 or y > (count my pp) then exit repeat -- RENAME:
set y to my pp's item y
end if
set p to my pp's item x
set q to my qq's item x
if p ≠ y then set track id q's name to y
end repeat
-- /RENAME:]
end repeat
if modified then save
close
end tell
end tell

end script
tell o to run
end remap_audio_channels

on _index_of(xx, x) -- renamed _bsearch() v0.1
script o
property aa : xx
local i, j, k
if {x} is not in my aa then return 0
set i to 1
set j to count my aa
repeat while j > i
set k to (i + j) div 2
if {x} is in my aa's items i thru k then
set j to k
else
set i to k + 1
end if
end repeat
return i
end script
tell o to run
end _index_of'''

args = ["/Users/me/Desktop/DOWNLOAD/44.mov"]

p = Popen(['osascript', '-'] + args, stdin=PIPE, stdout=PIPE, stderr=PIPE)
stdout, stderr = p.communicate(scpt)
print (p.returncode, stdout, stderr)

最佳答案

找到答案了。需要将运行部分更改为:

on run argv
repeat with a in argv
set a's contents to a as POSIX file as alias
end repeat
open argv
end run

关于Python 使用 osascript 将文件路径变量传递到 Applescript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22877348/

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