我已经成功使用Python中的FFmpeg将MP3文件转换为WAV,以便可以将它们发布到Google语音识别。现在我有同样的情况,但是要处理WebM文件,而我之前使用的旧函数无法工作。它应该将文件转换为WAV并将其分割成15秒的块。我可以直接从WebM文件中进行此操作,还是需要将其先转换为其他格式?
我使用的函数如下:
def convert_and_split(filename):
command = ['ffmpeg', '-i', filename, '-f', 'segment', '-segment_time', '15', '-c', 'copy', 'parts/out%09d.wav']
subprocess.run(command,stdout=subprocess.PIPE,stdin=subprocess.PIPE)
编辑。忘记提到这个函数目前在处理webm文件时的操作。它会生成一个名为out000000000.wav
的空wav文件。在控制台中,我会得到以下错误消息:
[segment @ 0x55970b22fe80] Opening 'parts/out000000000.wav' for writing
[wav @ 0x55970b1ffbc0] opus codec not supported in WAVE format
Could not write header for output file #0 (incorrect codec parameters ?): Function not implemented
编辑2. 我想我做对了,但希望听到是否有更好的方法。
首先将文件转换为单声道WAV格式,然后将其分成块。请随时指出任何错误或问题。
def convert_webm_to_wav(file):
command = ['ffmpeg', '-i', file, '-acodec', 'pcm_s16le', '-ac', '1', '-ar', '16000', '/home/janip/openvidu_files/' + file.name[:-5] + '.wav']
subprocess.run(command,stdout=subprocess.PIPE,stdin=subprocess.PIPE)
def split_audio(filename):
command = ['ffmpeg', '-i', filename, '-f', 'segment', '-segment_time', '15', '-c', 'copy', '/home/janip/work/Holda/Nut_ideas/voice_chat_demos/openvidu-tutorials/openvidu-js-node/python_scripts/parts/out%09d.wav']
subprocess.run(command,stdout=subprocess.PIPE,stdin=subprocess.PIPE)
编辑3. 我尝试了llogan提供的函数,但出现了这个错误:
error:[segment @ 0x55f1c28d2740] Opening 'parts/out000000000.wav' for writing
[segment @ 0x55f1c28d2740] Failed to open segment 'parts/out000000000.wav'
Could not write header for output file #0 (incorrect codec parameters ?): No such file or directory
Error initializing output stream 0:0 --
error:Conversion failed!
当我使用两个单独的功能时它可以工作,但我认为wav格式的音频质量比原始的webm格式差。有什么方法可以改进吗?
ffmpeg
命令,并在问题中添加出现的错误信息。 - Daweo