【问题标题】:Is it possible to get Audio duration with Zapier Code (Python) Step?是否可以使用 Zapier Code (Python) Step 获得音频持续时间?
【发布时间】:2021-08-10 07:48:12
【问题描述】:

是否可以使用 Python 或 Javascript 的 Zapier Code Step 获取音频文件的持续时间?

我已将文件上传到谷歌驱动器,现在我需要文件的持续时间。如果谷歌驱动器文件无法做到这一点。作为替代方案,我可以使用 Dropbox 或 Amazon AWS。

我已尝试使用 Zapier 代码步骤(Python):

import wave
import contextlib
fname = input.get('fileurl')
with contextlib.closing(wave.open(fname,'r')) as f:
    frames = f.getnframes()
    rate = f.getframerate()
    duration = frames / float(rate)
    output = print(duration)

但这不起作用。我收到错误消息:

Traceback (most recent call last):
    File "<string>", line 11, in the_function
    File "/var/lang/lib/python3.7/wave.py", line 510, in open
      return Wave_read(f)

    File "/var/lang/lib/python3.7/wave.py", line 164, in

【问题讨论】:

  • 为什么不在上传文件之前计算一下,并将其作为元数据保存在单独的文件(例如 xml 文件)中。
  • 之前的步骤是使用 Ninjaforms(Wordpress)从带有 fileupload 字段的 Formular 上传音频文件据我所知,ninjaform 直接将文件上传到配置的云(Google 驱动器、Dropbox、Amazon AWS。 ) zap 由“文件夹中的新文件 - Google 驱动器”触发

标签: python audio zapier


【解决方案1】:

这是一个很好的问题!我以为这不可能,但事实证明它是。您的代码不起作用,因为 fileurl 不是文件名,因此库崩溃了(不幸的是,没有出现有用的错误)。

诀窍在于wave.open 需要一个文件名或类似文件的对象。 Code by Zapier 不能真正使用文件系统,但我们可以创建一个内存中的“文件”,我们可以将其输入wave

试试这个:

import wave
from io import BytesIO

# I pulled a file from 
# https://file-examples.com/index.php/sample-audio-files/sample-wav-download/
# but you can use input_data['file_url'] or something instead

file_url = 'https://file-examples-com.github.io/uploads/2017/11/file_example_WAV_1MG.wav'

wave_resp = requests.get(file_url)
wav_file = BytesIO(wave_resp.content)

with wave.open(wav_file) as f:
    frames = f.getnframes()
    rate = f.getframerate()
    duration = frames / float(rate)
    return {'duration': duration}

对于那个测试文件,我得到了 33.529625 中的 duration - 我的浏览器显示它的长度约为 33 秒,所以看起来是正确的!

【讨论】:

    猜你喜欢
    • 2012-06-27
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多