
简 介: 为了能够处理视频中的音频,测试了两种提取视频中的音频方法。一种是利用格式工程软件另外一种利用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” 搜索,可以获得如下一篇博文:
- How to Extract Audio from Video files (Mp3 From Mp4)
 
  博文中给出了应用 moviepy 来提取视频中的音频数据。
(1)处理软件
from headm import *                 # =from moviepy.editor import *def mp4tomp3(mp4file, mp3file):videoclip = VideoFileClip(mp4file)audioclip = videoclip.audioaudioclip.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)
 
(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_framesself.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 mp4tomp3audioclip.write_audiofile(mp4file)File "<C:\Users\zhuoqing\Anaconda3\lib\site-packages\decorator.py:decorator-gen-45>", line 2, in write_audiofileFile "C:\Users\zhuoqing\Anaconda3\lib\site-packages\moviepy\decorators.py", line 54, in requires_durationreturn f(clip, *a, **k)File "C:\Users\zhuoqing\Anaconda3\lib\site-packages\moviepy\audio\AudioClip.py", line 210, in write_audiofilelogger=logger)File "<C:\Users\zhuoqing\Anaconda3\lib\site-packages\decorator.py:decorator-gen-9>", line 2, in ffmpeg_audiowriteFile "C:\Users\zhuoqing\Anaconda3\lib\site-packages\moviepy\decorators.py", line 54, in requires_durationreturn f(clip, *a, **k)File "C:\Users\zhuoqing\Anaconda3\lib\site-packages\moviepy\audio\io\ffmpeg_audiowriter.py", line 170, in ffmpeg_audiowritewriter.write_frames(chunk)File "C:\Users\zhuoqing\Anaconda3\lib\site-packages\moviepy\audio\io\ffmpeg_audiowriter.py", line 117, in write_framesraise 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 closeself.proc.stdin.close()
OSError: [Errno 22] Invalid argument
 
这说明一个问题,需要软件中正确安装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└─presetslibvpx-1080p.ffpresetlibvpx-1080p50_60.ffpresetlibvpx-360p.ffpresetlibvpx-720p.ffpresetlibvpx-720p50_60.ffpreset
 
(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 设置系统的环境变量
 













![[NET]什么是公网、私网、内网、外网?](https://img-blog.csdnimg.cn/85f5d5027a3f4acea002463d95bb0584.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWmFuYS56aGFuZw==,size_20,color_FFFFFF,t_70,g_se,x_16)



