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