Python extract wav из видеофайла
по теме:
Как извлечь аудиофайл из видеофайла с помощью 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()
Ответы
Ответ 1
Это очень простая задача, использующая ffmpeg с подпроцессом python, и есть причина, по которой люди указывают на это решение в качестве хорошего решения.
Это основная команда, извлекающая звук из данного видеофайла. Файл:
ffmpeg -i test.mp4 -ab 160k -ac 2 -ar 44100 -vn audio.wav
Код Python просто завершает эту команду:
import subprocess
command = "ffmpeg -i C:/test.mp4 -ab 160k -ac 2 -ar 44100 -vn audio.wav"
subprocess.call(command, shell=True)
Вы должны убедиться, что ffmpeg - это известная задача, поэтому в переменных вашей системной среды, в пути, следует указать путь к ffmpeg.exe или вы можете просто использовать полный путь к exe в вашем коде python.
Ответ 2
это может быть лучше и проще в использовании, чем ffmpeg, он называется конвертером python-video и может использоваться для извлечения аудио из видео, https://github.com/senko/python-video-converter, его можно использовать в сочетании с mpg123 следующим образом
from converter import Converter
import os
c = Converter()
clip = 'clip.avi'
conv = c.convert(clip, 'audio.mp3', {'format':'mp3','audio':{'codec': 'mp3','bitrate':'22050','channels':1}})
for timecode in conv:
pass
os.system("mpg123 -w audio.wav audio.mp3")
модуль конвертера извлекает аудио из видео и сохраняет его как mp3 файл, а mpg123 преобразует mp3 файл в mp4,
существует другое решение:
с использованием видеоплеера в python https://github.com/Zulko/moviepy
import moviepy.editor as mp
clip = mp.VideoFileClip("video.avi").subclip(0,20)
clip.audio.write_audiofile("theaudio.mp3")
числа в подклипичной функции указывают начало и конец звука в секундах. вы можете использовать mpg123 для изменения звука в любом другом формате
Ответ 3
Аудиоклипы могут быть созданы из аудиофайла или из саундтрека видеофайла
from moviepy.editor import *
audioclip = AudioFileClip("some_audiofile.mp3")
audioclip = AudioFileClip("some_video.avi")
https://zulko.github.io/moviepy/getting_started/audioclips.html
Ответ 4
FFmpeg - одна из самых известных мультимедийных платформ, широко используемая для обработки видео. Чтобы кодировать видео, необходимо использовать видеокодер. для получения дополнительной информации используйте это: http://machinelearninguru.com/computer_vision/video_processing/ffmpeg_extract_audio/ffmpeg_audio_extract.html