Extrato de Python wav do arquivo de vídeo

Palavras-chave:

Como extrair o áudio de um arquivo de vídeo usando python?

Extrair o áudio do vídeo como wav

Como extrair o áudio de um vídeo?

Minha pergunta é como eu poderia extrair a faixa de áudio wav do arquivo de vídeo, digamosvideo.avi? Eu li muitos artigos e em todos os lugares que as pessoas sugerem usar (do Python)ffmpeg como um subprocesso (porque não há ligações python confiáveis ao ffmpeg - a única esperança eraPyFFmpeg mas eu descobri que não há manutenção agora). Não sei se é a solução certa e estou procurando uma boa.
Eu olhei para o gstreamer e achei agradável, mas incapaz de satisfazer minhas necessidades - a única maneira que encontrei para realizar isso na linha de comando parece

 gst-launch-0.10 playbin2 uri=file://`pwd`/ex.mp4  audio-sink='identity single-segment=true ! audioconvert ! audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)16000, channels=(int)1 ! wavenc !  filesink location=foo.wav’ 

Mas não é eficiente, porque eu preciso esperar muito tempo enquanto reproduz o vídeo e simultaneamente grava no arquivo wav.

ffmpeg é muito melhor:

avconv  -i foo.mp4  -ab 160k -ac 1 -ar 16000 -vn ffaudio.wav

Mas eu sou incapaz de iniciá-lo a partir de python (não como um subprocesso de linha de comando). Você poderia me indicar prós e contras do lançamento do ffmpeg a partir do python como um utilitário de linha de comando? (Quero dizer usando pythonmultiprocessing módulo ou algo semelhante).

E segunda pergunta.

O que é uma maneira simples de cortar arquivos WAV longos em pedaços para não quebrar nenhuma palavra? quero dizer partes de 10 a 20 segundos de duração com início e fim durante a pausa em frases / palavras?

Eu sei como quebrá-los em pedaços arbitrários:

import wave


win= wave.open('ffaudio.wav', 'rb')
wout= wave.open('ffsegment.wav', 'wb')

t0, t1= 2418, 2421 # cut audio between 2413, 2422 seconds
s0, s1= int(t0*win.getframerate()), int(t1*win.getframerate())
win.readframes(s0) # discard
frames= win.readframes(s1-s0)

wout.setparams(win.getparams())
wout.writeframes(frames)

win.close()
wout.close()

questionAnswers(5)

yourAnswerToTheQuestion