如何从MP4视频文件中抽取MP3音频?

举报
tsinghuazhuoqing 发表于 2022/02/14 22:48:28 2022/02/14
【摘要】 简 介: 为了能够处理视频中的音频,测试了两种提取视频中的音频方法。一种是利用格式工程软件另外一种利用ffmpeg软件。 关键词: 视频文件,音频文件,mp4,mp3 ...

简 介: 为了能够处理视频中的音频,测试了两种提取视频中的音频方法。一种是利用格式工程软件另外一种利用ffmpeg软件。

关键词 视频文件音频文件mp4mp3

提取音频
目 录
Contents
视频来源
音频提取
利用格式工
厂提取音频
利用moviepy
提取音频
安装ffmpeg
提取总结

 

§01 取音频


1.1 视频来源

  今天在微信中友人给我发送了一段有趣的视频。这段视频演示了清新优雅的弹拨乐来自于饭盒上的九条橡皮筋,令人不禁感慨飞花摘叶皆可伤人,草木竹石均可为剑,诚不我欺也.

▲ 图1  饭盒、筷子、橡皮筋

▲ 图1 饭盒、筷子、橡皮筋

  现在留下一个问题:

  • 这段音乐中各个音符对应的频率是多少?
  • 在一定的假设下,各个橡皮筋对应的振动频率是否满足音乐音节要求?

1.2 音频提取

  为了回答上面的问题,第一步需要从MP4文件中将视频音频提取出来。可以使用 格式工厂(Format Factory) 完成音频数据的提取。

1.2.1 利用格式工厂提取音频

(1)下载格式工程软件

  从 格式工厂(Format Factory) 下载最新版本软件并进行安装。

▲ 图1.2.1 安装Format Factory软件

▲ 图1.2.1 安装Format Factory软件

(2)分离视频文件中音频

  利用软件中的 “ ->MP3” 将MP4文件中的音频分离出来。

▲ 图1.2.2 利用Format Factory分离MP3

▲ 图1.2.2 利用Format Factory分离MP3

(3)音频预处理

  利用 Audacity 软件对分离的MP3 的音频文件进行预处理。

  利用软件中的特效增幅对于原来音频波形进行放大。如下是放大后的音频波形。

▲ 图1.2.3 利用Audacity 对音频文件进行预处理

▲ 图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软件

▲ 图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 官方下载软件

▲ 图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.6 选择Windows EXE 版本

▲ 图1.2.7 选择下载发行版本

▲ 图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)添加环境变量

  将 ffmpegbin 添加在 系统设置 中的 path 变量中。通过编辑可以将 bin目录粘贴在 path 最后。中间使用分号“”隔开。

▲ 图1.2.8 设置系统的环境变量

▲ 图1.2.8 设置系统的环境变量

(4)测试FFMPEG

  利用下面的命令提取视频中的音频:

ffmpeg -i music.mp4 music.wav
ffmpeg -i music.mp4 music.mp3

  上面两个命令可以分别产生 music.wav, music.mp3文件。

 

取总结 ※


  了能够处理视频中的音频,测试了两种提取视频中的音频方法。一种是利用格式工程软件另外一种利用ffmpeg软件。


■ 相关文献链接:

● 相关图表链接:

文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuoqing.blog.csdn.net/article/details/122911261

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。