【问题标题】:Working with Automator "Run Applescript" variables使用 Automator“运行 Applescript”变量
【发布时间】:2013-10-12 02:23:33
【问题描述】:

请求协助截断/修剪自动操作中的字符串,该操作用于从 30 个左右字符到 800+ 的文本选择中创建文本到语音的音频文件,这对于文件名来说太长了。

简而言之,我正在尝试将字符串截断为 30 个字符,并将其作为文件名传递给“文本到音频文件”操作。

基本工作流程是:

选择文本 通过服务菜单启动以下 Automator 操作

  1. “设置变量值”输入(例如选定的文本)并定义为 TextToSpeech
  2. “设置变量值”输入(例如选定的文本)并定义为文件名
  3. “获取变量值”文件名
  4. “运行 AppleScript”

    on run {input, parameters}
        set theResult to input as string
        set finalResult to input as string
        set txtLength to (length of theResult)
        if txtLength > 30 then
            set finalResult to (characters 1 thru 30 of theResult) as string
        end if
        return finalResult
    end run
    
  5. “设置变量值”输入(例如选定的文本)并定义为文件名

  6. “获取变量的值”TextToSpeech
  7. “文本到音频文件”,另存为:设置为“文件名”
  8. “编码为 MPEG 音频”

非常感谢任何帮助/建议!

问候,

和风

【问题讨论】:

  • 除了不确定第 4 步中的 Applescript 是否没有错误之外,我找不到任何关于变量如何传入/传出“运行 Applescript”操作的明确信息,然后通过其余的操作。

标签: string variables applescript truncate automator


【解决方案1】:

一般来说,您可以使用代码末尾的“return”命令从 applescript 传递到下一个操作所需的任何内容。在您的情况下,尽管自动操作“文本到音频文件”不接受 fileName 变量,所以如果您想要那么多控制权,您需要另一种方法。幸运的是,可以在 applescript 代码中使用简单的“say”命令轻松替换自动化操作。

因此,创建您的自动化服务并接收选定的文本。然后添加一个 applescript 操作并使用以下代码作为代码。然后添加“编码为 MPEG 音频”动作。

对于 applescript 代码,只需使用您选择的值修改 voiceName 和 saveFolder 变量。 saveFolder 路径必须以冒号 (:) 结尾。请注意,我使用 26 而不是 30,因为我们将“.aif”添加到文件名的末尾...以获得总共 30 个字符。

on run {input, parameters}
    set voiceName to "Jill"
    set saveFolder to path to desktop as text

    set selectedText to item 1 of input
    if (length of selectedText) > 26 then
        set fileName to text 1 thru 26 of selectedText
    else
        set fileName to selectedText
    end if
    set fileName to fileName & ".aif"
    set filePath to saveFolder & fileName

    say selectedText using voiceName saving to file filePath

    return {POSIX path of filePath}
end run

如果您需要确定您的 saveFolder,请使用它来获取路径。运行此代码并将结果复制/粘贴到上面的 saveFolder 变量中。

(choose folder) as text

【讨论】:

  • 非常感谢您的帮助。你的提示和我的反复试验相结合,让它发挥作用。谢谢一百万!
【解决方案2】:

以下是有效的:

选择文字

通过服务菜单启动以下 Automator 操作

“设置变量值”输入(例如选定的文本)并定义为 TextToSpeech

“运行 AppleScript”

on run {input, parameters}
    set theResult to input as string
    set finalResult to input as string
    set txtLength to (length of theResult)
    if txtLength > 50 then
        set finalResult to characters 1 thru 50 of theResult as string
    end if
    return finalResult as string
end run

“设置变量值”输入(例如选定的文本)并定义为文件名

“获取变量的值”TextToSpeech 忽略此操作的输入

“文本到音频文件”,另存为:设置为“文件名”并设置另存为位置。

“编码为 MPEG 音频”

结果:由所需声音说出的所选文本的音频文件,文件名设置为所选文本的前 50 个字符。

(我增加了字符以减少我在工作流程中获得的重复文件名的数量。)

@regulus6633:您的答案更紧凑、更优雅,但我需要了解更多关于 applescript 如何获取它的输入并返回它的结果。再次感谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2013-04-13
    相关资源
    最近更新 更多