по теме:
Как извлечь аудиофайл из видеофайла с помощью python?
Извлечь аудио из видео как wav
Мой вопрос: как я могу извлечь звуковую дорожку wav из видеофайла, скажем video.avi
?
Я читал много статей и везде, где люди предлагают использовать (из Python) ffmpeg
как подпроцесс (потому что нет надежных привязок python к ffmpeg - единственная надежда была PyFFmpeg
, но я обнаружил, что теперь он незаметен). Я не знаю, правильно ли это решение, и я ищу хороший.
Я посмотрел на gstreamer и нашел, что это приятно, но не в состоянии удовлетворить мои потребности - единственный способ, который я нашел для этого в командной строке, выглядит как
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’
Но это не эффективно, потому что мне нужно ждать возраста во время воспроизведения видео и одновременно записывать в wav файл.
ffmpeg
намного лучше:
avconv -i foo.mp4 -ab 160k -ac 1 -ar 16000 -vn ffaudio.wav
Но я не могу запустить его из python (а не подпроцесса командной строки). Не могли бы вы указать мне за и против запуска ffmpeg из python в качестве утилиты командной строки? (Я имею в виду использование модуля python multiprocessing
или что-то подобное).
И второй вопрос.
Что такое простой способ вырезать длинный wav файл на куски, чтобы я не сломал никаких слов? я имею в виду куски 10-20 секунд с началом и концом во время паузы в предложениях/словах?
Я знаю, как разбить их на произвольные части:
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()