moviepy音视频开发:音频剪辑基类AudioClip

Python音视频开发:深入剖析音频剪辑基类AudioClip AudioClip是MoviePy库中的一个音频剪辑基类,继承自Clip。顾名思义,它主要用于对音频进行剪辑操作,比如剪切、拼接、混音等。在MoviePy中,可以使用AudioFileClip将音频文件读取为AudioClip对象,然后再对其进行各种剪辑操作。同时,我们也可以直接使用AudioClip生成音频片段,并对其进行剪辑操作。 阅读详情
☞ ░ 前往老猿Python博文目录 ░

一、背景知识介绍

1.1、声音三要素:
  • 音调:人耳对声音高低的感觉称为音调(也叫音频)。音调主要与声波的频率有关。声波的频率高,则音调也高。
  • 音量:也就是响度。人耳对声音强弱的主观感觉称为响度。响度和声波振动的幅度有关。一般说来,声波振动幅度越大则响度也越大。
  • 音色:也就是音品。音色是人们区别具有同样响度、同样音调的两个声音之所以不同的特性,或者说是人耳对各种频率、各种强度的声波的综合反应。音色与声波的振动波形有关,或者说与声音的频谱结构有关。
    更多关于声音三要素的内容请参考《音频基础知识》。
2.1、数字音频常用概念
  1. 采样率(Sample Rate):每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。一般音乐CD的采样率是44100Hz,所以视频编码中的音频采样率保持在这个级别就完全足够了,通常视频转换器也将这个采样率作为默认设置。常用的音频采样频率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等,采样频率越高音质越好,但资源消耗越高。22.05kHz的采样频率是常用的, 44.1kHz已是CD音质, 超过48kHz或96kHz的采样对人耳已经没有意义
  2. 采样位数(Sample Bits):也称采样精度,有点类似颜色表示的位数,指使用数字表示声音信号的数字的二进制位数,位数越多表示声音的精度越高。1 字节(8bit) 只能表示 256 中声音值,2 字节(16bit) 可以表示 65536 个声音值等。采用位数越高声音精度越高,播放的声音与源音的差距越小,但存储开销越大
  3. 通道数(channel):也称为声道数,即声音通道的数目,分为单声道mono;立体声stereo。声道多,效果好,两个声道,说明只有左右两边有声音传过来,四声道,说明前后左右都有声音传过来。moviepy1.03的版本只支持单声道和双声道。
  4. 帧(frame):帧记录了一个声音单元,其长度为样本长度(采样位数)和通道数的乘积
  5. 码率(Bit Rate):也称为位速或比特率,指视频或音频文件在单位时间内使用的数据流量,针对编码格式,表示压缩编码后每秒的音频数据量大小。计算公式:比特率 = 采样率 x 采样位数 x 通道数,单位kbps,这里的k为1000
  6. 块(chunk):一般的音频都是分为若干个块(chunk)保存,每个chunk块包含音频的数据片段和控制信息,可能包含了块的控制信息如块的大小、声道、采样率、位深等信息以及真正的音频数据流(大小由控制头确认)等,不同格式的文件块的控制信息内容不同。在moviepy中处理音频(如保存音频)时,块就是通用的数据块,没有考虑控制信息,通过设定块大小来读写指定大小的数据。

更多关于音频参数的说明请参考《音频基础知识》、《音频 属性详解(涉及采样率、通道数、位数、比特率、帧等)》。

二、AudioClip简介

AudioClip是一个音频剪辑的基类,其父类是Clip。AudioClip带有make_frame属性,该属性根据时间参数t返回一个形如[f_t]或[f_t1,f_t2]的列表,[f_t]、[f_t1,f_t2]分别对应单声道音频numpy数组和立体声音频numpy数组。这些数组的每个元素都是为-1到1之间的浮点数。

老猿理解AudioClip对应的音频帧数据是一个列表,这个列表有如下特征:
1、列表的长度等于音频的通道数,目前仅支持1和2,即单声道和双声道;
2、列表中的元素为-1到1之间的浮点数,其精度与采样位数相关;
3、列表中元素的大小除了表示音调还表征了音量。

三、构造方法

调用语法:

__init__(self, make_frame=None, duration=None, fps=None)

参数说明:
  • make_frame:帧的构建方法,帧的构建方法用于根据时间构建帧,该方法是get_frame获取帧时调用的方法。帧的构建可以从已有剪辑中获取或变换,也可以代码自己填充;
  • duration:音频剪辑的时长
  • fps:这里的fps可以理解为音频的采用率
功能说明:

构造方法用于使用参数同名的实例变量记录参数传入的make_frame、duration和fps,如果make_frame非空则会通过make_frame获取开始位置的音频帧后获取音频的通道数记录到实例变量nchannels属性,如果duration非空,则会同时更新实例变量duration和end。

四、iter_chunks方法

iter_chunks方法返回一个迭代器,通过这个迭代器可以返回一个包含音频剪辑内容块的数组。

调用语法:

iter_chunks(self, chunksize=None, chunk_duration=None, fps=None,quantize=False, nbytes=2, logger=None)

参数说明:
  • chunksize:块的大小
  • chunk_duration:块包含的音频时长,其值不为None时,则chunksize=chunk_duration*fps向下取整,如果chunksize有值也被计算值覆盖
  • fps:块输出的采样频率,如果为None则等于剪辑的fps属性
  • quantize:是否量化处理,如果为True,则将音频帧对应的音频数据进行如下处理:
  1. 将每个元素的大小超出[-0.99,0.99]这个范围的,则大于0.99的被设置为0.99,小于-0.99的被设置为-0.99
  2. 将每个元素的值乘以2的n次方,n的计算方法为:n=采样位数-1,采用位数=nbytes*8
  3. 取整返回
  • nbytes:音频采用位数,缺省值为2字节即16位
  • logger:是否开启日志,字符串类型,"bar"表示进度条、None 表示不设置、或任何程序日志记录器的名字

返回的迭代器包含的数据块数=(fps*剪辑的时长)/chunksize+1,这个方法可以在需要对音频剪辑进行变换处理时使用。

五、to_soundarray方法

to_soundarray方法将音频片段转换为一个可以使用pygame播放或者使用wav格式保存的数组。

调用语法:

to_soundarray(self, tt=None, fps=None, quantize=False, nbytes=2, buffersize=50000)

参数说明:
  • tt:为时间浮点数或时间浮点数的列表,用于获取对应时间的音频数据
  • fps:采用频率,如果为None则等于剪辑的fps属性
  • quantize:是否量化处理,请参见iter_chunks方法参数说明
  • nbytes:音频采用位数,缺省值为2字节即16位
  • buffersize:缓冲区大小,从剪辑中转换时,该大小即为处理块的大小

返回值为一个音频数据的np一维数组或二维数组,分别对应tt为时间浮点数或时间浮点数的列表两种情况。如果quantize为False,返回数组的元素为【-1,1】之间的浮点数,否则为整数(请参见iter_chunks方法参数说明)。

六、max_volume方法

max_volume方法是取音频剪辑的最大音量,最大音量也就是音频数组元素绝对值的最大值。

调用语法:max_volume(self, stereo=False, chunksize=50000, logger=None)
说明:
  • stereo:是否立体声,该参数为True且剪辑的声道数为2才会在处理时作为立体声处理,否则作为单声道处理

在老猿的验证环境下,max_volume存在两个BUG,详细的情况请参考《moviepy音视频剪辑:AudioClip的max_volume方法报TypeError: bad operand type for abs(): ‘list‘错》、《moviepy AudioClip的max_volume方法报错ValueError: operands could not be broadcast together with shapes(2,)》的介绍。

七、write_audiofile方法

write_audiofile方法用于将音频剪辑的内容输出到指定文件,该方法替换了低版本的to_audiofile方法。

调用语法:write_audiofile(self, filename, fps=None, nbytes=2, buffersize=2000, codec=None, bitrate=None, ffmpeg_params=None, write_logfile=False, verbose=True, logger='bar')
参数说明:
  • filename:文件名,类型包括文件如mp3、wav、ogg、m4a等都可以
  • fps:帧率,与音频采样率含义相同,每秒编码的帧数,如果为None且音频剪辑设置了fps则以剪辑额的fps属性值作为输出,否则以缺省值44100输出
  • nbytes:音频的采用的位数
  • buffersize:输出缓冲区大小,以该大小作为输出时数据读取块的大小
  • bitrate:码率,音频比特率
  • codec:用于音频编码的编解码器,如果没有指定则系统根据输出文件名类型来确认。默认值为“libmp3lame”,除非视频扩展名为“ogv”或“webm”,在这2种情况下,默认值为“libvorbis”。 如果是16位wav音频设置为 ‘pcm_s16le’、32位wav音频则设置为 ‘pcm_s32le’
  • write_logfile:如果为True,将为音频输出记录日志文件。日志文件将以“.log”结尾,包含输出文件的名称
  • verbose:已经废弃使用,留下来是为了兼容性,以前用于打开/关闭消息。现在使用logger=None。
  • ffmpeg_params:需额外传递的其他ffmpeg参数,用列表传递,形如:[’-option1’,‘value1’,’-option2’,‘value2’]
  • logger:字符串类型,"bar"表示进度条、None 表示不设置、或任何程序日志记录器的名字

更多moviepy的介绍请参考《PyQt+moviepy音视频剪辑实战文章目录》或《moviepy音视频开发专栏》。

关于收费专栏

本文为免费专栏文章,本文对应收费专栏文章《moviepy音视频开发:音频剪辑基类AudioClip详解》。与本文章内容对比,收费专栏部分文章内容介绍更深入或案例更多。

老猿的付费专栏《使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏加起来只需要19.9元,都适合有一定Python基础但无相关专利知识的小白读者学习。这2个收费专栏都有对应免费专栏,只是收费专栏的文章介绍更具体、内容更深入、案例更多。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python、学5G!

☞ ░ 前往老猿Python博文目录 ░
Python音视频处理入门:使用write_audiofile加载和输出 write_audiofile函数是由MoviePy库提供的一个功能强大的函数,它可以将音频文件或视频文件加载到内存中,并输出为不同的音频格式或视频格式的文件。与音频处理类似,使用VideoFileClip函数加载视频文件,对视频进行剪切、合并等操作,最终使用write_videofile函数输出为新的视频文件。在进行音视频处理时,我们经常需要用到加载和输出的功能。综上所述,write_audiofile函数是Python中一个非常方便的音视频处理工具,可以帮助我们快速地实现音视频的加载和输出。 阅读详情

相关推荐

MoviePy音视频开发:音频剪辑基类AudioClip Python

MoviePy是一个功能强大的Python库,它提供了许多用于处理音频和视频的工具和功能。类可以轻松地进行音频剪辑的开发。通过加载音频文件、调整音频剪辑的属性和使用各种方法进行剪辑操作,我们可以实现各种音频处理的需求。类还提供了许多其他有用的方法,如音频剪辑的拼接、剪切、混音等。你可以根据具体需求来使用这些方法进行音频剪辑的开发。在这个示例中,我们提取了从第5秒到第10秒的音频。方法来调整音频剪辑的音量。对象,通过指定音频文件的路径来加载音频剪辑。类进行音频剪辑的开发,并提供相应的Python源代码示例。

ByteHackerX的博客 290

使用python的moviepy抽取视频中的音频

使用python的moviepy抽取视频中的音频,合并视频和音频文件生成新的视频

Python视频剪辑-Moviepy音频处理AudioFileClip

本文详细介绍了音频处理的基础方法,包括提取音频、调节音量、音频合成剪辑,以及如何在视频中设置音频。所有的概念都配有实际的Python代码案例和《三国志》游戏中的模拟数据,以帮助初学者或刚入行的读者更容易理解和应用。对于想要深入了解更多音频处理技术和方法的读者,推荐进一步学习和实践,以便更好地应用到实际工作中。

Mr数据杨 1112

moviepy音视频剪辑:使用VideoFileClip、AudioFileClip和write_videofile、write_audiofile进行音视频的加载和输出

专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一、概述 在本地进行音视频处理时,首先要从视频文件进行音视频加载,最后要将处理结果输出到文件。本节介绍moviepy的音视频的加载和输出方法。 二、视频加载 2.1、视频加载方法 要从视频文件中加载视频非常简单,使用VideoFileClip类的构造方法即可完成加载。其构造方法语法如下: __init__(self, filename, has_mask=.

老猿Python 1万+

moviepy音视频开发:音频剪辑基类AudioClip详解

一、音频的参数 采样率(Sample Rate):每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。一般音乐CD的采样率是44100Hz,所以视频编码中的音频采样率保持在这个级别就完全足够了,通常视频转换器也将这个采样率作为默认设置。常用的音频采样频率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等,采样频率越高音质越好,但资源消耗越高。22.05kHz的采样频率是常用的, 44.1kHz已是CD音质, 超过48kHz或96kH

老猿Python 3249

moviepy音视频开发:audio_normalize调整剪辑音量大小到正常

☞ ░ 前往老猿Python博文目录 ░ 概述 audio_normalize函数用于将一个剪辑的音量大小调整到正常,调整的思路就是将剪辑中音频帧数据的最大值取出来,当其值小于1时,表示剪辑的音量偏小。 以1为参考,将所有剪辑帧数据的值都乘以1和剪辑帧数据最大值的比例,即表示音量调整到了正常。 在audio_normalize文档字符串中介绍时,说明当剪辑的最大音量为0db,即可达到的最大音量。这句解释虽然与程序实现无关,但这个概念需要澄清一下。具体原因请参考《音量(DB)为什么都是负值》。 调用语法:

老猿Python 2254

PyQt+moviepy音视频剪辑实战文章目录

本专栏为moviepy音视频开发的免费专栏,基于老猿阅读moviepy1.03版本的源代码以及大量测试验证的基础上,介绍moviepy主要音视频剪辑相关类的方法、以及一些音视频剪辑合成处理的场景化支撑能力和部分剪辑合成实现的案例或工具开发。

老猿Python 7330

moviepy音视频开发:音频拼接函数concatenate_audioclips介绍

☞ ░ 前往老猿Python博文目录 ░ concatenate_audioclips函数用于将多个音频剪辑进行拼接合成一个顺序播放的剪辑。 调用语法: concatenate_audioclips(clips) 说明: clips参数用于存放需要顺序拼接的音频剪辑,合成后 clips参数内保存在前面的剪辑先播放,后面的剪辑后播放; 合成剪辑的时长是所有参与合成剪辑的时长和; 合成剪辑的fps取所有参与合成剪辑的fps的最大值。 该函数进行拼接处理时是调用CompositeAudioClip类进行的,

老猿Python 2603

Python音视频剪辑库MoviePy1.0.3中文教程导览及可执行工具下载

关于moviepy的两个专栏是老猿阅读moviepy库当前最新版本1.0.3的文档、源代码以及大量测试的基础上总结的MoviePy学习教程,本文将两个专栏的核心知识点,包括重要类的相关方法及作用、视频音频剪辑变换方法、场景式的支撑能力进行了导览式介绍,并给出了相关知识点教程的原文链接。 同时介绍了使用PyQt+moviepy实现的图形化视频剪辑工具的开发过程,并提供多视频合成(含顺序拼接和同屏播放)、从视频中选择多时间段范围的视频拼接、将视频转动画或图片文件的工具的win7和win10版本可执行文件下载。

老猿Python 1万+

moviepy音视频开发:audio_fadein、fadeout实现声音淡入淡出

☞ ░ 前往老猿Python博文目录 ░ 一、概述 为了支持一些常规的音频变换处理,moviepy提供了一系列常用的变换函数,开发者可以直接使用这些方法进行变换,这些函数都在moviepy.audio.fx包下,基本上一个函数就是一个文件。 audio_fadein和audio_fadeout函数就是这些函数中的两个,这2个函数为moviepy提供声音渐变处理: audio_fadein函数是在剪辑的开头声音从无逐渐上升到正常,audio_fadeout是在剪辑的结尾声音从正常逐渐变到无声。 这种淡入淡出

老猿Python 3709

moviepy AudioClip帧处理ValueError: The truth value of array with more than one element is ambiguous

☞ ░ 前往老猿Python博文目录 ░ 一、环境 操作系统:win7 64位 moviepy:1.0.3 numpy:1.19.0 Python:3.7.2 二、应用代码及报错信息 程序代码 if __name__ == '__main__': import numpy as np make_frame = lambda t: 2 * [t*(-1) if t<0 else t] clip = AudioClip(make_frame, duration=5,f

老猿Python 1138

MoviePy:超强的 视频处理Python 库

作者:小小明https://xxmdmst.blog.youkuaiyun.com/article/details/134938026阅读本文档的前置说明:本文档用于讲解Python的moviepy库的自带函数的用法,主要目的是讲一下每个函数的每个参数的含义,无需一开始就全部掌握,粗略看一下就行,可以在后面自己开发过程,遇到不会用的函数再回过头来看看本文档,我将在后续的文章中,通过几下实际的案例来理解视频特效...

idol24的博客 2664

使用MoviePy进行音视频剪辑:AudioClip的max_volume方法引发TypeError错误

然而,pydub库在某些情况下可能会返回一个包含音频数据的列表,而不是一个单独的音频剪辑对象。综上所述,当在使用MoviePy库中的AudioClip对象的max_volume方法时遇到TypeError错误时,可能是因为pydub库返回了一个包含音频数据的列表。例如,如果参数为2.0,则音频剪辑的音量将增加到原始音量的两倍。这个错误的原因是在音频剪辑上调用max_volume方法时,出现了一个不合法的操作。通过使用pydub库的这种方法,我们可以避免出现TypeError错误,并成功调整音频剪辑的音量。

TechSavant的博客 259

MoviePy 音频工具模块实战:find_audio_period 周期检测的原理与用法

本文聚焦 MoviePy 的 `moviepy.audio.tools` 音频工具模块,深入讲解其中唯一的公开函数 `find_audio_period`:它通过自相关分析估算音频片段的周期(Period),可用于音乐节拍检测、循环音频的对齐、BGM 节奏分析等场景。读完本文,你将掌握该函数的完整参数语义、底层算法原理(基于 NumPy 的分块能量与自相关),以及如何结合 `AudioClip`、

gitblog_00157的博客 941

MoviePy音视频开发之音频拼接函数concatenate_audioclips详解

MoviePy 是一个基于 Python 的强大音视频处理库,广泛应用于视频剪辑、音频合成、特效添加等多媒体开发场景。其简洁的 API 设计与强大的功能模块,使其成为众多开发者进行音视频自动化处理的首选工具。本章将从 MoviePy 的基本构成讲起,介绍其核心对象如和,并探讨其在现代音视频开发中的实际地位。通过本章学习,读者将建立起对 MoviePy 整体架构的初步认知,为后续深入理解音频拼接函数奠定基础。的主要作用是将一组AudioClip。

weixin_28840811的博客 1333

AudioFile:一个简单的C ++库,用于读写音频文件

音频文件 一个简单的仅用于标头的C ++库,用于读取和写入音频文件。 当前支持的格式: WAV 联合会 作者 AudioFile由Adam Stark编写和维护。 用法 创建一个AudioFile对象: #include "AudioFile.h" AudioFile<double> audioFile; 加载音频文件: audioFile.load ("/path/to/my/audiofile.wav"); 获取有关已加载音频的一些信息: int sampleRate = audioFile.getSampleRate(); int bitDepth = audioFile.getBitDepth(); int numSamples = audioFile.getNumSamplesPerChannel(); double lengthInSeconds = audioF

moviepy音视频剪辑:AudioClip帧处理时报TypeError: only size-1 arrays can be converted to Python scalar错

☞ ░ 前往老猿Python博文目录 ░ 一、环境 操作系统:win7 64位 moviepy:1.0.3 numpy:1.19.0 Python:3.7.2 二、应用代码及报错信息 程序代码 if __name__ == '__main__': import numpy as np make_frame = lambda t: 2*[t**((int(100000*t))%3)*0.99] clip = AudioClip(make_frame, duration=5

老猿Python 1479

配置VS Code使用Linux服务器上的Matlab

0、需求 Linux服务器上安装有Matlab 无图形界面,只能使用命令行工具,编辑文件不方便 1、VS Code插件安装 在扩展商店中搜索matlab,会出现Matlab Extension Pack,里面有整理好的matlab扩展 这里只安装了第一排的三个扩展 2、设置(Windows、Mac的设置类似,只是不同系统的文件路径不同) 安装好扩展,重启VS Code后,进行设置 打开:文件→首选项→设置(或快捷键ctrl+,),搜索matlab,结果如下图所示;直接打开完整json配置文件(图

赵彬的博客 5009
上一篇: moviepy音视频开发:音频剪辑基类AudioClip详解
下一篇: 区块链学习5:智能合约Smart contract原理及发展历程科普知识
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值