【问题标题】:How to use ffmpeg in a python function如何在 python 函数中使用 ffmpeg
【发布时间】:2019-02-11 08:26:51
【问题描述】:

我尝试使用 ffmpeg 从视频文件中提取音频,这是我的代码

import io
import os
import subprocess

def extract_audio(video,output):
    command = "ffmpeg -i '{video}' -ac 1  -f flac -vn '{output}'"
    subprocess.call(command,shell=True)

extract_audio('dm.MOV','dm-new.flac')

编译后没有错误。通过这样做,我应该得到一个新文件,即“dm-new.flac”。但是我编译脚本后没有创建这样的flac文件。我认为语法或变量“命令”中的某些东西有问题,我不知道要解决这个问题。我的问题是如何在基于此代码的 python 函数中使用 ffmpeg?

顺便说一句,我知道我可以直接使用 ffmpeg 而无需编写函数。但我真的需要写一个函数。谢谢

【问题讨论】:

  • 如果你把它放在 python 之外的脚本中对你有用吗?
  • 是的,如果我不使用函数,它就可以工作
  • c3 = "ffmpeg -i dm.mov -ac 1 -f flac -vn testdm.flac" subprocess.call(c3, shell=True) 像这样
  • 即便如此,我仍然认为您在脚本字符串中根本不需要引号,而且我怀疑您仍然会得到一个引号,但这只是一个猜测
  • @kevinkayaks command = 'ffmpeg -i {video} -ac 1 -f flac -vn {output}' 这就是我的意思,但它没有用

标签: python audio ffmpeg


【解决方案1】:

试试这个:

import io
import os
import subprocess

def extract_audio(video,output):
    command = "ffmpeg -i {video} -ac 1  -f flac -vn {output}".format(video=video, output=output)
    subprocess.call(command,shell=True)

extract_audio('dm.MOV','dm-new.flac')

我认为您试图在字符串中引用两个变量,但没有告诉 Python 您应该将“视频”和“输出”替换为相应的变量。 .format() 允许您引用您在字符串中引用的变量。

请参阅here 了解更多信息。

【讨论】:

    【解决方案2】:

    我想就是这样。

    import io
    import subprocess
    def extract_audio(video,output):
        command = "ffmpeg -i {} -ac 1  -f flac -vn {}".format(video,output)
        subprocess.call(command,shell=True)
    
    extract_audio('dm.MOV','dm-new.flac')
    

    【讨论】:

    • 有趣...接受了答案,但写在我的两分钟后...赢了一些,输了一些!
    • 不一样!
    • 对我来说很好 - 你测试了吗?
    • 哦,我以为你有额外的引号。好的,赞!
    【解决方案3】:

    我相信这应该可行:

    import io
    import os
    import subprocess
    
    def extract_audio(video,output):
        command = "ffmpeg -i {} -ac 1  -f flac -vn {}".format(video, output)
        subprocess.call(command,shell=True)
    
    extract_audio('dm.MOV','dm-new.flac')
    

    【讨论】:

      【解决方案4】:

      添加一个字符 (f) 来解决它(在 python 3.6 上):

      import subprocess
      def extract_audio(video,output):
          command = f"ffmpeg -i '{video}' -ac 1  -f flac -vn '{output}'"
          subprocess.call(command,shell=True)
      
      extract_audio('dm.MOV','dm-new.flac')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-18
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 2021-12-18
        • 2021-11-12
        相关资源
        最近更新 更多