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