通过子进程将python的文件类对象传递给ffmpeg

2024-02-27

我有一个 django FileField,用于在 Amazon s3 服务器上存储 wav 文件。我已经设置了 celery 任务来读取该文件并将其转换为 mp3 并将其存储到另一个 FileField。我面临的问题是我无法将输入文件传递给 ffmpeg,因为该文件不是硬盘驱动器上的物理文件。为了避免这种情况,我使用 stdin 将 django 的文件字段提供给文件的输入流。这是示例:

output_file = NamedTemporaryFile(suffix='.mp3')
subprocess.call(['ffmpeg', '-y', '-i', '-', output_file.name], stdin=recording_wav)

其中recording_wav文件是: ,它实际上存储在amazon s3服务器上。 上述子进程调用的错误是:

AttributeError: 'cStringIO.StringO' object has no attribute 'fileno'

我怎样才能做到这一点?先谢谢您的帮助。

Edit:

完整回溯:

[2012-07-03 04:09:50,336: ERROR/MainProcess] Task api.tasks.convert_audio[b7ab4192-2bff-4ea4-9421-b664c8d6ae2e] raised exception: AttributeError("'cStringIO.StringO' object has no attribute 'fileno'",)
Traceback (most recent call last):
  File "/home/tejinder/envs/tmai/local/lib/python2.7/site-packages/celery/execute/trace.py", line 181, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/home/tejinder/projects/tmai/../tmai/apps/api/tasks.py", line 56, in convert_audio
    subprocess.Popen(['ffmpeg', '-y', '-i', '-', output_file.name], stdin=recording_wav)
  File "/usr/lib/python2.7/subprocess.py", line 672, in __init__
    errread, errwrite) = self._get_handles(stdin, stdout, stderr)
  File "/usr/lib/python2.7/subprocess.py", line 1043, in _get_handles
    p2cread = stdin.fileno()
  File "/home/tejinder/envs/tmai/local/lib/python2.7/site-packages/django/core/files/utils.py", line 12, in <lambda>
    fileno = property(lambda self: self.file.fileno)
  File "/home/tejinder/envs/tmai/local/lib/python2.7/site-packages/django/core/files/utils.py", line 12, in <lambda>
    fileno = property(lambda self: self.file.fileno)
AttributeError: 'cStringIO.StringO' object has no attribute 'fileno'

Use subprocess.Popen.communicate http://docs.python.org/library/subprocess.html?highlight=popen.communicate#subprocess.Popen.communicate将输入传递给您的子流程:

command = ['ffmpeg', '-y', '-i', '-', output_file.name]
process = subprocess.Popen(command, stdin=subprocess.PIPE)
process.communicate(recording_wav)

为了获得额外的乐趣,您可以使用 ffmpeg 的输出来避免使用 NamedTemporaryFile:

command = ['ffmpeg', '-y', '-i', '-', '-f', 'mp3', '-']
process = subprocess.Popen(command, stdin=subprocess.PIPE)
recording_mp3, errordata = process.communicate(recording_wav)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过子进程将python的文件类对象传递给ffmpeg 的相关文章

随机推荐

  • Team Foundation Server 合并未合并

    为什么 TFS 不想归还我的旧文件 Dev Branch Main Branch Merging Dev to Main Edit 鉴于下面的第一个答案和更多调查 我相信我正在尝试完成整个分支覆盖 这可能吗 这是一件好事 我认为最好的办法是
  • 编译 SASS 时出现预期换行错误

    我遇到的问题是我的 SASS 无法编译并且它向我显示相同的错误 Expected NewLine topper h3 text align center text decoration underline list group active
  • 在自定义 keras 损失中使用 keras 模型

    我有一个名为的常规 keras 模型e我想比较两者的输出y pred and y true在我的自定义损失函数中 from keras import backend as K def custom loss y true y pred re
  • (iPhone) selectedRange 用于不可编辑的 UITextView (或其他点击处理方法?)

    我正在使用一个UITextView保存静态内容 中文意思是字符都是固定宽度的 我想让用户单击文本中的某个字符并显示该字符的字典信息 我知道所有与缺乏复制和粘贴相关的问题 但我希望有一种方法可以做到这一点 而无需等待 iPhone 3 0 固
  • 是否有可能在源代码中抑制 sonarcloud 的警告?

    我面临一些声纳云警告的问题 这些警告在最近的将来不会得到解决 现在应该被禁用 这些警告是由 sonarcloud 在 CI 构建过程中发出的 没有任何本地分析器 有没有办法在项目 文件 类和 或方法级别上抑制源代码中的某些特定警告 官方文档
  • 在 NativeModules 中添加对象

    我想用https github com dgladkov react native image rotate https github com dgladkov react native image rotate在反应本机项目中 我用它下载
  • Java JTextPane RTF 保存

    我有以下代码尝试将 JTextPane 的内容保存为 RTF 虽然下面的代码创建了一个文件 但它是空的 关于我做错了什么有什么建议吗 像往常一样 不要忘记我是初学者 if option JFileChooser APPROVE OPTION
  • 在python中计算直方图峰值

    在Python中 如何计算直方图的峰值 我试过这个 import numpy as np from scipy signal import argrelextrema data 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 1
  • 如何在Python中将元组转换为多层嵌套字典?

    我有一个以下格式的元组 639283 298290710 1385 639283 298290712 1389 639283 298290715 1395 745310 470212995 2061 745310 470213821 371
  • 将 MySql 从 Windows 服务器迁移到 Linux

    从旧的 Win2003 服务器迁移到新的 VM 服务器 我们选择 Win 或 Linux 如果我们使用 Linux 转换当前表会有任何问题吗 将 MySQL Windows 迁移到相同版本的 MySQL Linux 您可以按如下方式 mys
  • 不可变对象的真正好处是什么

    我总是听到人们说 在使用多个线程时管理不可变对象更容易 因为当一个线程访问不可变对象时 不必担心另一个线程正在更改它 那么 如果我有一个公司所有员工的不可变列表并且雇用了一名新员工 会发生什么情况 在这种情况下 必须复制不可变列表 并且它的
  • 从 T-sql 设置肥皂请求属性

    下面是我用来连接到我的 api 服务器的代码 对于其他调用来说一切正常 但是当涉及到上传图像时 它就不起作用了 如果我将代码复制到 SoapUI 并从那里运行 它确实可以工作 但在 SoapUI 中我必须将请求属性 启用内联文件 更改为 t
  • 如何将 Metal Performance Shader 与 MTLBlitCommandEncoder 同步?

    我试图更好地理解使用时的同步要求Metal Performance Shaders and an MTLBlitCommandEncoder 我有一个MTLCommandBuffer设置如下 Use MTLBlitCommandEncode
  • PHP 在特定字符处剪切字符串

    string aaa bbb ccc ddd eee fff 我想在第三个之后剪切字符串 所以我想从字符串中获取输出 aaa bbb ccc 您可以使用strpos and substr 为了这 看 http php net strpos
  • 反转 3D 旋转,使物体始终面向相机?

    我有很多排列在 3D 空间中的精灵 并且它们的父容器应用了旋转 我如何反转精灵 3D 旋转 使其始终面向相机 Actionscript 3 这是一个测试它的代码 package import flash display Sprite imp
  • 使用 JSFuck 约定访问 RegExp

    我想替换字符串中的一些字符 例如 console log truefalse replace e E 但使用jsfuck https kamil kielczewski github io jsfuck index html约定只允许 6
  • 实体框架保存更改

    只读操作后是否需要保存更改 实体已加载到缓存 但没有任何更改 是否应该在处置之前调用保存更改 From doc DbContext SaveChanges https msdn microsoft com en us library sys
  • Session_End 不触发?

    我想在用户会话超时时注销该用户 因此在 Global asax 中使用了以下代码 protected void Session End object sender EventArgs e FormsAuthentication SignOu
  • 如何在 ASP NET MVC 6 中更新模型?

    场景 如何更新模型 ASP MVC 6 我正在尝试更新模型 为了将模型信息传递给客户端 浏览器 应用程序 我使用 DTO 问题1 为了更新 我应该将整个对象发回吗 问题2 有没有办法可以轻松地只传递更新的信息 如果是 怎么办 问题3 我可以
  • 通过子进程将python的文件类对象传递给ffmpeg

    我有一个 django FileField 用于在 Amazon s3 服务器上存储 wav 文件 我已经设置了 celery 任务来读取该文件并将其转换为 mp3 并将其存储到另一个 FileField 我面临的问题是我无法将输入文件传递