Python3.5中的FFMPEG命令实际上并不创建音频文件

Python3.5中的FFMPEG命令实际上并不创建音频文件,python,audio,ffmpeg,Python,Audio,Ffmpeg,我有一个Django web应用程序,它接受用户上传的视频/音频,并将它们保存到文件夹“。/WebAppDirectory/media/recordings”中 然后我使用一个语音到文本API来获得音频的粗略转录。这对于.wav和.mp4文件来说效果很好,但web应用程序也接受视频(.MOV),我想先将其转换为.wav,然后再传递到API 像这样从我的命令行使用ffmpeg ffmpeg -i C:\Users\Nathan\Desktop\MeetingRecorderWebAPP\media

我有一个Django web应用程序,它接受用户上传的视频/音频,并将它们保存到文件夹“。/WebAppDirectory/media/recordings”中

然后我使用一个语音到文本API来获得音频的粗略转录。这对于.wav和.mp4文件来说效果很好,但web应用程序也接受视频(.MOV),我想先将其转换为.wav,然后再传递到API

像这样从我的命令行使用ffmpeg

ffmpeg -i C:\Users\Nathan\Desktop\MeetingRecorderWebAPP\media\recordings\upload_sample.MOV -ab 160k -ac 2 -ar 44100 -vn upload_sample.wav
从原始.MOV正确创建.wav文件

但是,当我从python运行此命令时

subprocess.check_call(command, shell=True)
ffmpeg以

文件“upload_sample.wav”已存在。覆盖?[是/否]

而Python告诉我

FileNotFoundError:[Errno 2]没有这样的文件或目录:“C:\Users\Nathan\Desktop\MeetingRecorderWebAPP\media\recordings\upload\u sample.wav”

还值得注意的是,我在媒体/recordings/目录中没有看到“upload_sample.wav”文件

这让我相信Python和ffmpeg可能在不同的文件夹中查找,但我不确定哪里出错了。当我从subprocess.check_调用打印命令并将其复制/粘贴到cmd中时,文件将按预期创建

希望有人对ffmpeg/Python子流程有一些经验,可以帮助我们了解一些情况!以下是我正在处理的文件:

文件夹结构

DjangoWebApp
|---media
|---|---imgs
|---|---recordings
|---|---|---upload_sample.MOV
|---uploaded_audio_to_text.py
已将音频上传到文本.py

import speech_recognition as sr
from os import path
import os
import subprocess


def speech_to_text(file_name):
    AUDIO_FILE = path.join(path.dirname(path.realpath(__file__)), 'media','recordings', file_name)
    print("Looking at path: ",AUDIO_FILE)
    # get extension
    AUDIO_FILE_EXT = os.path.splitext(AUDIO_FILE)[1]

    if(AUDIO_FILE_EXT == '.MOV'):
        print("File is not .wav: ", AUDIO_FILE_EXT, "found. Converting...")
        # We will use subprocess and ffmpeg to convert this .MOV file to .wav, so we can send to API
        temp_wav = os.path.splitext(file_name)[0] + '.wav'
        print("New audio file will be: ", temp_wav)
        # build CMD ffmpeg command
        command = "ffmpeg -i "
        command += AUDIO_FILE
        command += " -ab 160k -ac 2 -ar 44100 -vn "
        command += temp_wav

        print("Attempting to run this command: \n",command)
        print(subprocess.check_call(command, shell=True))
        print("Past Subprocess.call")
        AUDIO_FILE = path.join(path.dirname(path.realpath(__file__)), 'media','recordings', temp_wav)
        print("AUDIO_FILE now set to: ", AUDIO_FILE)

    else:
        # continue with what we are doing
        pass


    r = sr.Recognizer()
    with sr.AudioFile(AUDIO_FILE) as source:
        audio = r.record(source)  # read the entire audio file
        text_transcription = "Sentinel"
        # recognize speech using Microsoft Bing Voice Recognition
        BING_KEY = "MY_KEY_:)"
        try:
            text_transcription = r.recognize_bing(audio, key=BING_KEY)
        except sr.UnknownValueError:
            print("Microsoft Bing Voice Recognition could not understand audio")
        except sr.RequestError as e:
            print("Could not request results from Microsoft Bing Voice Recognition service; {0}".format(e))

    return text_transcription


#my tests
my_relative_file_path = "upload_sample.MOV"
print(speech_to_text(my_relative_file_path))
控制台输出(回溯和我的打印())

查看路径:C:\Users\Nathan\Desktop\MeetingRecorderWebAPP\media\recordings\upload\u sample.MOV 未找到文件.wav:.MOV。转换。。。 新音频文件将为:upload_sample.wav试图运行此命令: ffmpeg-IC:\Users\Nathan\Desktop\MeetingRecorderWebAPP\media\recordings\upload_sample.MOV-ab 160k-ac 2-ar 44100-vn upload_sample.wav ffmpeg版本git-2017-12-18-74f408c版权所有(c)2000-2017 ffmpeg开发人员使用gcc 7.2.0(gcc)构建 ----为了简洁起见,删除了一些FFMPEG输出---- 文件“upload_sample.wav”已存在。覆盖?[y/N]y 流映射:流#0:1->#0:0(aac(本机)->pcm#u s16le(本机))按[q]停止,按[?]获取帮助输出#0,wav,到“上载#u sample.wav”:元数据: 主要品牌:qt 次要版本:0 兼容品牌:qt com.apple.quicktime.creationdate:2017-12-19T16:06:10-0500 com.apple.quicktime.make:苹果 com.apple.quicktime.model:iphone6 com.apple.quicktime.software:10.3.3 ISFT:Lavf58.3.100 流#0:0(und):音频:pcm#u s16le([1][0][0][0]/0x0001),44100 Hz,立体声,s161411 kb/s(默认) 元数据: 创建时间:2017-12-19T21:06:11.000000Z 处理器名称:核心媒体数据处理器 编码器:Lavc58.8.100 pcm_s16le大小=1036kB时间=00:00:06.01比特率=1411.3KB/s速度=N/A视频:0kB音频:1036kB字幕:0kB其他流:0kB全局头:0kB多路复用开销:0.007352% 0 回溯(最近的最后一次调用):过去的Subprocess.call 文件“C:\Users\Nathan\Desktop\MeetingRecorderWebAPP\Upload_audio_to_text.py”,第53行,在中 音频文件现在设置为:C:\Users\Nathan\Desktop\MeetingRecorderWebAPP\media\recordings\upload\u sample.wav 打印(语音到文本(我的相对文件路径)) 文件“C:\Users\Nathan\Desktop\MeetingRecorderWebAPP\Upload_audio_to_text.py”,第36行,在speech_to_text中 以sr.AudioFile(AUDIO_文件)作为源: 文件“C:\Users\Nathan\AppData\Local\Programs\Python\Python36-32\lib\site packages\speech\u recognition\uuuuuu init\uuuuu.py”,第203行,输入__ self.audio\u reader=wave.open(self.filename\u或\u fileobject,“rb”) 文件“C:\Users\Nathan\AppData\Local\Programs\Python\Python36-32\lib\wave.py”,第499行,处于打开状态 返回波读数(f) 文件“C:\Users\Nathan\AppData\Local\Programs\Python\Python36-32\lib\wave.py”,第159行,在\uuu init中__ f=内置。打开(f,‘rb’) FileNotFoundError:[Errno 2]没有这样的文件或目录:“C:\\Users\\Nathan\\Desktop\\MeetingRecorderWebAPP\\media\\recordings\\upload\u sample.wav” 进程已完成,退出代码为1
根据建议的正确答案。我需要设置输出文件的绝对路径

更改命令

ffmpeg -i C:\Users\Nathan\Desktop\MeetingRecorderWebAPP\media\recordings\upload_sample.MOV -ab 160k -ac 2 -ar 44100 -vn upload_sample.wav
新命令

ffmpeg -y -i C:\Users\Nathan\Desktop\MeetingRecorderWebAPP\media\recordings\upload_test_2.MOV -ab 160k -ac 2 -ar 44100 -vn C:\Users\Nathan\Desktop\MeetingRecorderWebAPP\media\recordings\upload_test_2.wav

check_call
cwd=
)中设置正确的工作目录,或者在
ffmpeg
命令中为输出使用绝对路径,就像对输入所做的那样。将
-y
添加到命令中,无需提示即可覆盖现有输出。效果非常好,非常感谢。现在我的命令是:“ffmpeg-y-ic:\Users\Nathan\Desktop\MeetingRecorderWebAPP\media\recordings\upload\u test\u 2.MOV-ab 160k-ac 2-ar 44100-vn C:\Users\Nathan\Desktop\MeetingRecorderWebAPP\media\recordings\upload\u test\u 2.wav”,您可以删除
-ab 160k
,因为它对wav输出没有任何作用。
ffmpeg -y -i C:\Users\Nathan\Desktop\MeetingRecorderWebAPP\media\recordings\upload_test_2.MOV -ab 160k -ac 2 -ar 44100 -vn C:\Users\Nathan\Desktop\MeetingRecorderWebAPP\media\recordings\upload_test_2.wav