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

article/2025/11/4 16:02:02

简 介: 为了能够处理视频中的音频,测试了两种提取视频中的音频方法。一种是利用格式工程软件另外一种利用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” 搜索,可以获得如下一篇博文:

  • 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软件

▲ 图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└─presetslibvpx-1080p.ffpresetlibvpx-1080p50_60.ffpresetlibvpx-360p.ffpresetlibvpx-720p.ffpresetlibvpx-720p50_60.ffpreset

(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软件。


■ 相关文献链接:

  • 格式工厂(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 设置系统的环境变量

http://chatgpt.dhexx.cn/article/lT1S2vwG.shtml

相关文章

如何将音频文件转换为MP3格式?

音频文件有很多种格式&#xff0c;如 WAV、FLAC、AAC 等&#xff0c;其中 MP3 是最为常见的一种格式&#xff0c;因为它具有压缩比高、音质损失少、兼容性强等优点&#xff0c;适合在各种设备上播放。如果你想将一个音频文件转换为 MP3 格式&#xff0c;可以采用以下几种方法&a…

Next() Nextline() hasNext()区别

next类和hasNext方法遇到缓冲区没数据时&#xff0c;会阻塞&#xff0c;等待输入后next类会读取&#xff0c;hasNext会返回true 1&#xff09;nextLine nextLine&#xff08;&#xff09;方法返回的是"\n"之前的所有字符&#xff0c;它是可以得到带空格的字符串的。 …

BNext

又搬来了大神器啊 来自德国HassoPlattner计算机系统工程研究院的NianhuiGuo和HaojinYang等研究者提出了BNext模型&#xff0c;成为第一个在ImageNet数据集上top1分类准确率突破80%的BNN。 两年前&#xff0c;依靠早期 BNN 工作 XNOR-Net 起家的 XNOR.AI 被苹果公司收购&#…

Next.js学习笔记

这是一个用于生产环境的React 框架&#xff0c;Next.js 为您提供生产环境所需的所有功能以及最佳的开发体验&#xff1a;包括静态及服务器端融合渲染、 支持 TypeScript、智能化打包、 路由预取等功能 无需任何配置。 create-next-app 使用 create-next-app创建新的 Next.js …

搭建vue3项目时出现Cannot read property ‘nextSibling‘ of null报错

记录自己学习中&#xff0c;出现的错误 在搭建vue3项目&#xff0c;配置router&#xff0c;vuex,element-ui后&#xff0c;运行项目页面白屏&#xff0c;控制台出现了Cannot read property nextSibling of null的错误 查看main.ts 文件&#xff0c;此时的写法是&#xff1a; …

hasNext、hasNextLine、next、nextLine保姆级详解

目录 前言 hasNext和hasNextLine的区别 hasNext 和 next组合 hasNext 和 NextLine组合 hasNextLine 和 next组合 hasNextLine 和 nextLine组合 验证hasNext、hasNextLine对输入代码的存储寿命 总结 前言 在查阅了大量网上相关资料都没有一个完整的解释&#xff0c;并且我…

细节!关于Java中的next与nextLine

目录 一、发现问题 二、解决问题 &#xff08;1&#xff09;输入连续字符串 &#xff08;2&#xff09;输入不连续字符&#xff08;含有空格等&#xff09; &#xff08;3&#xff09;nextLine()方法在前&#xff0c;next()方法在后 &#xff08;4&#xff09;next()方法在…

NextJs 学习笔记

NextJs 学习笔记 简述 之前使用过 Nuxt3 基于前端框架 Vue3 来开发网站&#xff0c;因为 Nuxt3 很多地方借鉴了基于 React 的 SSR 框架 Next&#xff0c;因此最近抽时间开始学习一下 Next 这个框架。 创建项目 npx create-next-applatest # or yarn create next-app # or p…

next和nextLine的使用

&#xff08;因为最近在学算法&#xff0c;我只讲实际应用方面的区别&#xff0c;不讲理论&#xff09; 一、hasNext()与hasNextLine()的区别&#xff1f; 1、hasNext()方法会判断接下来是否有非空字符.如果有,则返回true,否则返回false 2、hasNextLine() 方法会根据行匹配模式…

nextSibling和nextElementSilbing使用以及解决兼容性问题

nextSibling和nextElementSilbing使用以及解决兼容性问题 1、今天学习了 获取兄弟节点 的方法 – nextSibling&#xff08;获取下一个兄弟节点&#xff09;、previousSibling(获取上一个兄弟节点) Node.nextSibling 是一个只读属性&#xff0c;返回其父节点的 childNodes 列表…

电脑同时连接内网和外网的方法

前提 首先电脑要有两个网卡&#xff0c;比如一个有线一个无线&#xff08;常见&#xff0c;本文以此为例&#xff09;&#xff0c;或者两个无线网卡等等。 不论是有线连接内网&#xff08;外网&#xff09;&#xff0c;还是无线连接内网&#xff08;外网&#xff09;&#xff0…

如何设置内网和外网同时使用

工作中&#xff0c;经常需要电脑连接内网服务&#xff0c;内网服务非公网&#xff0c;如果需要电脑连接公网需要进行切换&#xff0c;特别的麻烦。其实&#xff0c;一个电脑可以同时连接两个网络服务。工作中&#xff0c;经常会遇到网络设置的问题。对于工作&#xff0c;一般都…

如何实现在内网和外网同时使用

我们在办公的时候很多情况会遇到内网办公&#xff0c;但是这时候不能够使用外网&#xff0c;今天介绍一种方法解决这个问题&#xff1a; 操作步骤: 01、查看当前的网络配置 通过ipconfig查看当前内网的网络配置&#xff0c;获取到ip、子网掩码、默认网关等信息。 02、完后进…

内网访问外网和外网访问内网的原理

假如设A 和 B 的局域网 IP 相同&#xff08;192.168.31.11&#xff09;&#xff0c;当他们同时访问百度服务器的时候&#xff0c;百度服务器如何区分哪个是 A&#xff0c;哪个是 B 呢&#xff1f; 解决方案&#xff1a;端口映射 什么是端口映射&#xff1f; 端口映射是 NAT …

[NET]什么是公网、私网、内网、外网?

背景&#xff1a;大家可能对什么是公网、私网、内网、外网有疑惑&#xff0c;今天我们来说下它们之前的区别&#xff0c;已经大家耳熟能详的VPN,SNAT,DNAT的作用。 简单理解公网是相对于私网的&#xff0c;而外网是相对于内网的&#xff1a;

竟然还有人不知道什么是内网、外网?快收藏学习吧!

内网 内网又称局域网&#xff08;Local Area Network&#xff0c;LAN&#xff09;&#xff0c;是指在某一区域内由多台计算机以及网络设备构成的网络&#xff0c;比如校园网、政府网等&#xff0c;一般方圆几公里。 我们常说的内网&#xff0c;从字面意思上来讲是区别于外网的…

如何理解内网和外网?

如何理解内网和外网&#xff1f; 1.感性上认识 判断内网和外网的重要依据是&#xff1a;是否与广阔的外界网络相连。 在有互联网之前&#xff0c;世界上是先有了局域网&#xff0c;一些公司构建了自己的局域网&#xff0c;供自己公司员工之间进行沟通。对于外来人员来说&…

局域网的主机如何连接外网

一、局域网内主机上外网——NAT 1、内网与外网 &#xff08;1&#xff09;内网 即所说的局域网&#xff0c;比如学校的局域网&#xff0c;局域网内每台计算机的 IP 地址在本局域网内具有互异性&#xff0c;是不可重复的。但两个局域网内的内网 IP 可以有相同的。 &#xff08…

内网外网同时使用

在很多网络环境中&#xff0c;为了安全起见&#xff0c;不允许内网、外网同时使用。但很多时 候&#xff08;比如说远程的时候&#xff09;又需要同时使用外网和内网&#xff0c;下面介绍一下外网、内网 同时使用的操作方法。 环境&#xff1a; 1、电脑的本地网卡设置成内网的…

内网和外网之间的通信

对于初学者而已&#xff0c;我们学习的网络编程&#xff08;如TCP,UDP编程&#xff09;&#xff0c;我们通常都是在局域网内进行通信测试&#xff0c;有时候我们或者会想&#xff0c;我们现在写的内网网络数据和外网的网络数据有什么不同&#xff0c;我们内网的数据是如何走出外…