如何从MP4视频文件中抽取MP3音频?
简 介: 为了能够处理视频中的音频,测试了两种提取视频中的音频方法。一种是利用格式工程软件另外一种利用ffmpeg软件。
关键词
: 视频文件,音频文件,mp4,mp3
§01 提取音频
1.1 视频来源
今天在微信中友人给我发送了一段有趣的视频。这段视频演示了清新优雅的弹拨乐来自于饭盒上的九条橡皮筋,令人不禁感慨飞花摘叶皆可伤人,草木竹石均可为剑,诚不我欺也.
▲ 图1 饭盒、筷子、橡皮筋
现在留下一个问题:
- 这段音乐中各个音符对应的频率是多少?
- 在一定的假设下,各个橡皮筋对应的振动频率是否满足音乐音节要求?
1.2 音频提取
为了回答上面的问题,第一步需要从MP4
文件中将视频音频提取出来。可以使用 格式工厂(Format Factory) 完成音频数据的提取。
1.2.1 利用格式工厂提取音频
(1)下载格式工程软件
从 格式工厂(Format Factory) 下载最新版本软件并进行安装。
▲ 图1.2.1 安装Format Factory软件
(2)分离视频文件中音频
利用软件中的 “ ->MP3” 将MP4
文件中的音频分离出来。
▲ 图1.2.2 利用Format Factory分离MP3
(3)音频预处理
利用 Audacity 软件对分离的MP3
的音频文件进行预处理。
利用软件中的特效中增幅对于原来音频波形进行放大。如下是放大后的音频波形。
▲ 图1.2.3 利用Audacity 对音频文件进行预处理
1.2.2 利用moviepy提取音频
在bing中利用“python extract MP4 sounds” 搜索,可以获得如下一篇博文:
博文中给出了应用 moviepy
来提取视频中的音频数据。
(1)处理软件
from headm import * # =
from moviepy.editor import *
def mp4tomp3(mp4file, mp3file):
videoclip = VideoFileClip(mp4file)
audioclip = videoclip.audio
audioclip.write_audiofile(mp4file)
audioclip.close()
videoclip.close()
mp4filename = r'D:\Temp\WeChat_20220213170345.mp4'
mp3filename = mp4filename.split('.')[0] + '.mp3'
printt(mp4filename|, mp3filename:)
mp4tomp3(mp4filename, mp3filename)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
(2)运行错误
运行之后出现了错误:
---------- [PYTHON INFOR] ----------
MoviePy - Writing audio in D:\Temp\WeChat_20220213170345.mp4
chunk: 0%| | 0/507 [00:00<?, ?it/s, now=None]
chunk: 0%| | 0/507 [00:00<?, ?it/s, now=None]chunk: 4%|▉ | 21/507 [00:00<00:02, 209.99it/s, now=None]Traceback (most recent call last):
File "C:\Users\zhuoqing\Anaconda3\lib\site-packages\moviepy\audio\io\ffmpeg_audiowriter.py", line 74, in write_frames
self.proc.stdin.write(frames_array.tobytes())
BrokenPipeError: [Errno 32] Broken pipe
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\Temp\TEMP0001\test1.PY", line 25, in <module>
mp4tomp3(mp4filename, mp3filename)
File "D:\Temp\TEMP0001\test1.PY", line 15, in mp4tomp3
audioclip.write_audiofile(mp4file)
File "<C:\Users\zhuoqing\Anaconda3\lib\site-packages\decorator.py:decorator-gen-45>", line 2, in write_audiofile
File "C:\Users\zhuoqing\Anaconda3\lib\site-packages\moviepy\decorators.py", line 54, in requires_duration
return f(clip, *a, **k)
File "C:\Users\zhuoqing\Anaconda3\lib\site-packages\moviepy\audio\AudioClip.py", line 210, in write_audiofile
logger=logger)
File "<C:\Users\zhuoqing\Anaconda3\lib\site-packages\decorator.py:decorator-gen-9>", line 2, in ffmpeg_audiowrite
File "C:\Users\zhuoqing\Anaconda3\lib\site-packages\moviepy\decorators.py", line 54, in requires_duration
return f(clip, *a, **k)
File "C:\Users\zhuoqing\Anaconda3\lib\site-packages\moviepy\audio\io\ffmpeg_audiowriter.py", line 170, in ffmpeg_audiowrite
writer.write_frames(chunk)
File "C:\Users\zhuoqing\Anaconda3\lib\site-packages\moviepy\audio\io\ffmpeg_audiowriter.py", line 117, in write_frames
raise IOError(error)
OSError: [Errno 32] Broken pipe
MoviePy error: FFMPEG encountered the following error while writing file D:\Temp\WeChat_20220213170345.mp4:
b"Invalid encoder type 'libx264'\r\n"
In case it helps, make sure you are using a recent version of FFMPEG (the versions in the Ubuntu/Debian repos are deprecated).
Exception ignored in: <function FFMPEG_AudioWriter.__del__ at 0x0000000017880268>
Traceback (most recent call last):
File "C:\Users\zhuoqing\Anaconda3\lib\site-packages\moviepy\audio\io\ffmpeg_audiowriter.py", line 132, in __del__
self.close()
File "C:\Users\zhuoqing\Anaconda3\lib\site-packages\moviepy\audio\io\ffmpeg_audiowriter.py", line 121, in close
self.proc.stdin.close()
OSError: [Errno 22] Invalid argument
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
这说明一个问题,需要软件中正确安装FFMPEG软件。
这个问题在 Python extract wav from video file 也被网友提到过,如何能够避免使用ffmpeg。
My question is how could I extract wav audio track from video file, say video.avi? I read many articles and everywhere people suggest to use (from Python) ffmpeg as a subprocess (because there are no reliable python bindings to ffmpeg - the only hope was PyFFmpeg but i found it is unmaintaned now). I don’t know if it is right solution and i am looking for good one.
I looked to gstreamer and found it nice but unable to satisfy my needs – the only way I found to accomplish this from command line looks like、
这个情况在网友使用过程中都发现必须安装FFMPEGA,比如 一段把mp4中的音频提取并保存在原目录的python脚本 。
▲ 图1.2.4 绕不开的ffmpeg软件
甚至在 Extract MP3 audio from Videos using a Python script 将 ffmpeg又重新包装成函数被调用来获取MP4中的音频数据。
1.2.3 安装ffmpeg
既然绕不开,那么就安装ffmpeg软件。 在 How to Install FFmpeg on Windows 给出了安装ffmpeg的方法。
(1)下载ffmpeg
在 ffmpeg官方网站 : https://ffmpeg.org/download.html 下载所需要的软件版本。
▲ 图1.2.5 FFMPEG 官方下载软件
下面给出了两个Windows EXE files下载链接:
- Windows builds from gyan.dev
- Windows builds by btbN
不清楚这两个版本有什么差别,现在选择第一个:builds from gyan.dev。
▲ 图1.2.6 选择Windows EXE 版本
▲ 图1.2.7 选择下载发行版本
下载后是一个ZIP压缩文件:
- D:\Temp\ffmpeg-5.0-essentials_build.zip
(2)解压缩文件
利用 Windows 版本的 Bandizip 对其进行加压缩。
解压缩有产生ffmpeg目录,其中包含有bin 目录,其中包含有ffmpeg.exe可执行文件。
└─ffmpeg-5.0-essentials_build
│ LICENSE
│ README.txt
├─bin
│ ffmpeg.exe
│ ffplay.exe
│ ffprobe.exe
├─doc
│ bootstrap.min.css
│ default.css
│ developer.html
│ faq.html
│ fate.html
│ ffmpeg-all.html
│ ffmpeg-bitstream-filters.html
│ ffmpeg-codecs.html
│ ffmpeg-devices.html
│ ffmpeg-filters.html
│ ffmpeg-formats.html
│ ffmpeg-protocols.html
│ ffmpeg-resampler.html
│ ffmpeg-scaler.html
│ ffmpeg-utils.html
│ ffmpeg.html
│ ffplay-all.html
│ ffplay.html
│ ffprobe-all.html
│ ffprobe.html
│ general.html
│ git-howto.html
│ libavcodec.html
│ libavdevice.html
│ libavfilter.html
│ libavformat.html
│ libavutil.html
│ libswresample.html
│ libswscale.html
│ mailing-list-faq.html
│ nut.html
│ platform.html
│ style.min.css
└─presets
libvpx-1080p.ffpreset
libvpx-1080p50_60.ffpreset
libvpx-360p.ffpreset
libvpx-720p.ffpreset
libvpx-720p50_60.ffpreset
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
(3)添加环境变量
将 ffmpeg
的bin
添加在 系统设置 中的 path 变量中。通过编辑可以将 bin目录粘贴在 path 最后。中间使用分号“;”隔开。
▲ 图1.2.8 设置系统的环境变量
(4)测试FFMPEG
利用下面的命令提取视频中的音频:
ffmpeg -i music.mp4 music.wav
ffmpeg -i music.mp4 music.mp3
上面两个命令可以分别产生 music.wav, music.mp3文件。
※ 提取总结 ※
为了能够处理视频中的音频,测试了两种提取视频中的音频方法。一种是利用格式工程软件另外一种利用ffmpeg软件。
■ 相关文献链接:
- 格式工厂(Format Factory)
- How to Extract Audio from Video files (Mp3 From Mp4)
- Python extract wav from video file
- 一段把mp4中的音频提取并保存在原目录的python脚本
- Extract MP3 audio from Videos using a Python script
- How to Install FFmpeg on Windows
- ffmpeg官方网站
- Windows 版本的 Bandizip
● 相关图表链接:
- 图1 饭盒、筷子、橡皮筋
- 图1.2.1 安装Format Factory软件
- 图1.2.2 利用Format Factory分离MP3
- 图1.2.3 利用Audacity 对音频文件进行预处理
- 图1.2.4 绕不开的ffmpeg软件
- 图1.2.5 FFMPEG 官方下载软件
- 图1.2.6 选择Windows EXE 版本
- 图1.2.7 选择下载发行版本
- 图1.2.8 设置系统的环境变量
文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。
原文链接:zhuoqing.blog.csdn.net/article/details/122911261
- 点赞
- 收藏
- 关注作者
评论(0)