Я успешно использовал ffmpeg в Python для преобразования mp3-файлов в wav, чтобы я мог отправлять их в Google Speech-To-Text. Теперь у меня такая же ситуация с файлами 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)
EDIT. Забыл упомянуть, что функция делает в данный момент с webm-файлами. Он создает один пустой wav-файл out000000000.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
EDIT2. Думаю, я все понял правильно, но хотел бы услышать, есть ли лучший способ сделать это.
Сначала я конвертирую файл в моно 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)
EDIT3. Я попробовал предлагаемую функцию 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. Что я могу с этим сделать?