首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python从视频文件中提取wav

Python从视频文件中提取wav
EN

Stack Overflow用户
提问于 2014-11-04 17:16:20
回答 4查看 77.6K关注 0票数 36

相关信息:

How to extract audio from a video file using python?

Extract audio from video as wav

How to rip the audio from a video?

我的问题是如何从视频文件中提取wav音频轨道,比如video.avi?我读过很多文章,在任何地方都有人建议使用(来自python的) ffmpeg作为子进程(因为没有可靠的-唯一的希望是PyFFmpeg,但我现在发现它是不可维护的)。我不知道这是否是正确的解决方案,我正在寻找一个好的解决方案。

我看了一下gstreamer,发现它很不错,但无法满足我的需要--我找到的通过命令行实现这一目标的唯一方法如下所示

代码语言:javascript
复制
 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要好得多:

代码语言:javascript
复制
avconv  -i foo.mp4  -ab 160k -ac 1 -ar 16000 -vn ffaudio.wav

但是我无法从python (不是命令行子进程)启动它。请您指出从python作为命令行实用工具启动ffmpeg的利弊吗?(我指的是使用python multiprocessing模块或类似的东西)。

和第二个问题.

有什么简单的方法可以把长wav文件切成碎片,这样我就不会打断任何单词?我指的是在句子/单词的停顿过程中有开始和结束的10-20秒长的片段?

我知道如何在任意的碎片上打破它们:

代码语言:javascript
复制
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()
EN

回答 4

Stack Overflow用户

发布于 2014-11-04 17:29:42

这是一个非常容易的任务,使用ffmpegpython子进程,这是人们将此解决方案作为一个好解决方案的原因。

这是从给定的视频文件中提取音频的基本命令:

-i test.mp4 -ab 160 k -ac 2 -ar 44100 -vn audio.wav

Python代码只是包装这个命令:

代码语言:javascript
复制
import subprocess

command = "ffmpeg -i C:/test.mp4 -ab 160k -ac 2 -ar 44100 -vn audio.wav"

subprocess.call(command, shell=True)

您必须确保ffmpeg是一个已知的任务,因此在您的系统环境变量中,在path下,应该列出通往ffmpeg.exe的路径,或者您可以在您的python代码中使用到exe的完整路径。

票数 54
EN

Stack Overflow用户

发布于 2015-10-31 15:45:27

这可能比ffmpeg更好、更容易使用,它被称为python-视频转换器,并且可以用于从视频https://github.com/senko/python-video-converter中提取音频,它可以与mpg123一起使用,如下所示

代码语言:javascript
复制
    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中使用different模块

代码语言:javascript
复制
    import moviepy.editor as mp
    clip = mp.VideoFileClip("video.avi").subclip(0,20)
    clip.audio.write_audiofile("theaudio.mp3")

子剪辑函数中的数字指定音频的开始和结束,以秒为单位。然后可以使用mpg123将音频更改为任何其他格式。

票数 11
EN

Stack Overflow用户

发布于 2017-07-22 16:24:00

音频剪辑可以从音频文件或视频文件的原声带创建。

代码语言:javascript
复制
from moviepy.editor import *
audioclip = AudioFileClip("some_audiofile.mp3")
audioclip = AudioFileClip("some_video.avi")

started/audioclips.html

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26741116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档