FFmpeg从视频中提取音频

文章目录

  • FFmpeg从视频中提取音频
    • 流文件基本信息
      • 查看
      • 音频采样率、采样深度和比特率
    • 从视频中提取音频
    • 添加歌曲信息和封面
      • 歌曲信息
      • 封面

FFmpeg从视频中提取音频

参考博客

  • ffmpeg Documentation
  • FFmpeg最全教程
  • FFmpeg 提取视频的音频
  • FFMPEG 提取音频
  • ffmpeg 给音频添加封面,ffmpeg对音视频metadata相关操作

流文件基本信息

查看

使用FFprobe

ffprobe 是一个多媒体流分析工具。它从多媒体流中收集信息,并且以人类和机器可读的形式打印出来。它可以用来检测多媒体流的容器类型,以及每一个多媒体流的格式和类型。它可以作为一个独立的应用来使用,也可以结合文本过滤器执行更复杂的处理。—— FFmpeg最全教程

ffprobe -i .\TMElive.mp4

ffprobe -i .\MUTE.mp3

音频采样率、采样深度和比特率

  1. 采样率/采样频率
  • 采样率是指每秒钟记录的音频样本数。 模拟信号采样为数字信号,一个音频样本只是一个数字,代表在一个特定时间点的测量声波值。
  • 音频采样率和视频帧率是相似的,但在每一个中保证可用性的通常的最低数字是非常不同的。对于视频来说,为了保证运动的准确描述,每秒至少需要24帧。对于音频来说,要明确地表示英语语音,每秒的最小采样数是8000赫兹。

8,000 Hz是电话所用采样率, 对于人的说话已经足够
11,025 Hz是AM调幅广播所用采样率
22,050 Hz和24,000 Hz 是FM调频广播所用采样率
32,000 Hz是miniDV 数码视频 camcorder、DAT (LP mode)所用采样率
44,100 Hz是音频 CD, 也常用于 MPEG-1 音频(VCD, SVCD, MP3)所用采样率 (超过该采样率,人耳很难分辨)
47,250 Hz是商用 PCM 录音机所用采样率
48,000 Hz是miniDV、数字电视、DVD、DAT、电影和专业音频所用的数字声音所用采样率
50,000 Hz是商用数字录音机所用采样率
96,000 或者 192,000 Hz 是DVD-Audio、一些 LPCM DVD 音轨、BD-ROM(蓝光盘)音轨、和 HD-DVD (高清晰度 DVD)音轨所用所用采样率
2.8224 MHz是Direct Stream Digital 的 1 位 sigma-delta modulation 过程所用采样率

  1. 采样深度/采样精度/采样大小

用多大bit(多少位0/1)来表示每个采样点处的振幅。越大把振幅分得越精细,录音听起来越接近原声。电话音频最常见的采样深度是16比特和32比特。—— 《通信原理》信源编码

  1. 比特率
  • 比特率指每秒传输信息的比特数。1B=8b, B=byte(字节), b=bit(位)
  • 音频的比特率公式: 比特率 = 采样率 * 单个的周期音频数据长度 。

如16bit 双声道 48KHz音频的比特率
48KHz * (16 * 2) = 1536kbps = 192 kBps

从视频中提取音频

FFmpeg使用方法 ffmpeg [全局选项] {[输入文件选项] -i ‘输入文件’} … {[输出文件选项] ‘输出文件’} —— FFmpeg最全教程

  • ffmpeg -i .\TMElive.mp4 -ss 01:00:31 -t 00:02:52.0 -vn -b:a 192k -ar 44100 -ac 2 -acodec libmp3lame -y .\Mute_1.mp3

    ffprobe -i .\MUTE_1.mp3
    在这里插入图片描述
  • ffmpeg -i .\TMElive.mp4 -ss 01:00:31 -t 00:02:52.0 -q:a 0 -map a .\Mute.mp3 —— 🔨 FFmpeg 提取视频的音频

    ffprobe -i .\Mute.mp3

主要选项

-f fmt (input/output)’ 
	强制输入或输出文件格式。通常,输入文件的格式是自动检测的,
	输出文件的格式是通过文件扩展名来进行猜测的,所有该选项大
	多数时候不需要。
‘-i filename (input)’ 
	输入文件名
‘-y (global)’ 
	覆盖输出文件而不询问
‘-n (global)’ 
	不覆盖输出文件,如果一个给定的输出文件已经存在,则立即
	退出
‘-t duration (output)’ 
	当到达 duration 时,停止写输出。
	duration 可以是一个数字(),或者使用hh:mm:ss[.xxx]形式。
	-to 和 -t 是互斥的,-t 优先级更高。
‘-to position (output)’ 
	在 position 处停止写输出。
	duration 可以是一个数字(),或者使用hh:mm:ss[.xxx]形式。
	-to 和 -t 是互斥的,-t 优先级更高。
‘-ss position (input/output)当作为输入选项时(-i 之前),在输入文件中跳转到 position。
	需要注意的是,在大多数格式中,不太可能精确的跳转,因此,
	ffmpeg 将跳转到 position 之前最接近的位置。当进行转码
	并且 ‘-accurate_seek’ 打开时(默认),位于跳转点和 position 
	之间的额外部分将被解码并且丢弃。当做流拷贝或者当使用
	‘-noaccurate_seek’时,它将被保留下来。
	当作为输出选项时(在输出文件名前),解码但是丢弃输入,直到
	时间戳到达 position。
	position 可以是秒或者 hh:mm:ss[.xxx] 形式

音频选项

-ar[:stream_specifier] freq (input/output,per-stream)’
	设置音频采样率。
‘-aq q (output)’
	设置音频质量。这是 -q:a 的别名
‘-ac[:stream_specifier] channels (input/output,per-stream)’
	设置音频通道数。
‘-vn (output)’
	禁止视频录制
‘-an (output)’
	禁止音频录制
‘-acodec codec (input/output)’
	设置音频codec。这是-codec:a的别名
‘-sample_fmt[:stream_specifier] sample_fmt (output,per-stream)’
	设置音频采样格式

高级选项

-map [-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]] | [linklabel] (output)’
	指定一个或多个流作为输出文件的源。
	命令行中的第一个 -map 选项,指定输出流0的源,
	第二个 -map 选项,指定输出流1的源,等等。

添加歌曲信息和封面

软件 mp3tag

歌曲信息

  1. 右键 — 属性 — 详细信息 可以添加、更改歌曲信息

  1. 使用-metadata创建ID3 tags 【参考博客】
  • ffmpeg -i .\MUTE.mp3 -metadata data="2022-07-29" .\MUTE_1.mp3
  • 清除音频文件所有tag信息 ffmpeg -i .\MUTE.mp3 -map_metadata -1 .\mute.mp3
    把value置空删除某个标签 ffmpeg -i .\MUTE.mp3 -metadata genre="" .\mute.mp3
  • 创建元数据文本文件 ffmpeg -i .\TMElive\MUTE.mp3 -f ffmetadata mute.txt
  • 把.txt写入元数据中 ffmpeg -i .\TMElive\MUTE.mp3 -i mute.txt -map_metadata 1 -c:a copy -id3v2_version 3 -write_id3v1 1 .\mute.mp3

    -map_metadata 1 代表使用输入顺序为1的文件作为metadata,也就是 metadata.txt。c:a 代表codec audio的意思,这里用的是 copy。id3v2_version 3-write_id3v1 1 是为了对Windows兼容加上的。

;FFMETADATA1
=major_brand
date=2022
title=MUTE
album=TME live 夏日岐遇
album_artist=孟美岐
genre=Pop
artist=孟美岐
encoder=Lavf58.76.100

封面

ffmpeg -i .\TMElive\在他乡.mp3 -i .\TMElive\pic\在他乡.jpg -c copy -map 0:a -map 1:v -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (Front)" .\TMElive\在他乡_cover.mp3 —— 参考官网


拓展

  • 提高音量 ffmpeg -i .\TMElive\一生有你_fin.mp3 -filter:a “volume=5dB” 一生有你.mp3 但是不能损失质量
  • 怎么给音频文件添加歌词信息,并时间上同步起来
  • 实现音乐播放软件中的所有完整的歌曲信息

python + ffmpeg

video_path = 'D:/Users/Admin/Desktop/TMElive/MMQ_TMElive.mp4'
audio_path = 'D:/Users/Admin/Desktop/TMElive/audio/'
pic_path = 'D:/Users/Admin/Desktop/TMElive/pic/'
mdata = 'D:/Users/Admin/Desktop/TMElive/mdata.txt'
music = ["醒", "Miss", "If", "Alone", "重塑", "一生有你"]
start_time = ["00:02:03", "00:05:56", "00:10:06", " 00:33:41", "00:51:18", "01:02:51"]
duration = ["00:03:16.0", "00:04:00.0", "00:02:49.0", "00:03:25.0", "00:03:29.0", "00:02:33.0"]
    
for i,m in enumerate(music):
	ss = start_time[i]
	d = duration[i]
	pic = pic_path + m +".jpg"
	song = audio_path + m + "_1.mp3"
	out = audio_path + m + "_fin.mp3"
	# subprocess.run("ffmpeg -i %s -ss %s -t %s -vn -b:a 192k -ar 44100 -ac 2 -acodec libmp3lame -y %s" %(video_path, ss, d, song))
	# subprocess.run("ffmpeg -i %s -map_metadata -1 -c copy -y %s" %(song, out))
	# subprocess.run("ffmpeg -i %s -i %s -map_metadata 1 -c:a copy -id3v2_version 3 -write_id3v1 1 %s" %(song, mdata, out))
	subprocess.run("ffmpeg -i %s -i %s -c copy -map 0:a -map 1:v -metadata:s:v title=\"Album cover\" -metadata:s:v comment=\"Cover (Front)\" %s" %(song, pic, out))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/19678.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉--图像拼接

图像拼接 单应性变换仿射变换图像扭曲实现图像嵌入(图中图) RANSAC算法算法介绍图片收集无RANSAC优化和有RANSAC优化的代码实现差别 总结 单应性变换 单应性变换是指一个平面上的点通过一个矩阵变换映射到另一个平面上的点,这个变换矩阵是一…

前端网页设计必逛的六个宝藏网站(非常值得收藏)

🎉个人主页:这个昵称我想了20分钟 ✨往期专栏: 【速成之路】jQuery 【SQL server速成之路】 素材网站 ✨iconfont阿里巴巴矢量图标库  ✨美叶  ✨IconPark  ✨pexels  ✨COLOR  ✨Uigradients ✨iconfont阿里巴巴矢量图标库 网站入…

使用Vue+axios+Vuex实现登录后前端数据本地化存储实战

前言 这已经是《Vue + SpringBoot前后端分离项目实战》专栏的前端部分第8篇博客了,服务端部分由天哥(天哥主页)负责,目前专栏目录如下: Vue + SpringBoot前后端分离项目实战 - 前端部分1. 手把手带你做一套毕业设计-征程开启2. 我应该把毕业设计做到什么程度才能过关?3.…

【burpsuite安全练兵场-服务端8】文件上传漏洞-7个实验(全)

前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章)。 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员&…

CTF比赛必备常用工具

文中介绍的所有工具,均在压缩包中,结合本文更便于大家下载使用,快速上手。 CTF常用工具下载 CTF比赛必备常用工具 一、什么是CTF二、比赛中工具的重要性三、常用MISC(杂项)工具1. Audacity (提取莫斯密码辅…

HTML5 <s> 标签、HTML5 <sub> 和 <sup> 标签

HTML5 <s> 标签 定义和用法 <s> 标签定义加删除线的文本。HTML 5 中不再支持这个标签。请使用 CSS 代替。 HTML 4.01 与 HTML 5 之间的差异 在 HTML 4.01 中不赞成使用 <s> 标签。 在 HTML 5 中不支持 <s> 标签。 提示和注释 提示&#xff1a;请…

【Unity3D】材质 Material ( 材质简介 | 创建材质 | 设置材质属性 | 对 3D 物体应用材质 | 资源拖动到 Inspector 检查器中的 Material 属性中 )

文章目录 一、材质 Material 简介二、创建材质三、设置材质属性四、对 3D 物体应用材质五、资源拖动到 Inspector 检查器中的 Material 属性中 一、材质 Material 简介 材质 Material 用于描述 3D 物体的 表面细节 : 颜色 : 物体的颜色金属 : 物体是否是 金属材质光滑度 : 物…

【软考数据库】第十章 系统开发与运行

目录 10.1 系统实施 10.1.1 信息系统生命周期 10.1.2 能力成熟度模型 10.1.3 软件过程开发模型 10.1.4 信息系统开发方法 10.1.5 系统分析与设计 10.1.6 结构化开发 10.2 系统测试 10.2.1 测试原则和方法 10.2.2 测试阶段 10.2.3 测试用例设计 10.2.4 调试 10.2.…

【OAI】部署5GSA独立组网网络切片例程及例程解析

文章目录 摘要引言关键技术介绍5G核心网核心网网元功能 网络切片OAIDocker官方例程详解整体介绍具体详解网络切片架构部署概览与说明1-41.预先准备5.部署OAI 5G核心网6.获取基站仿真docker镜像7.部署基站仿真8.通信测试9.分析结果10. 使用多切片的UE11. 解除部署11.1解除RAN部署…

【Axure教程】中继器表格寻找和标记数据

在系统表格中&#xff0c;我们想在表格中快速找到对应的数据&#xff0c;通常我们会用条件筛选来完成&#xff0c;但是用筛选的方式&#xff0c;其他数据就看不到了&#xff0c;少了两种条件之间的对比。所以如果需要数据对比的情况下&#xff0c;我们更多的是用标记数据的方式…

基于 DDR3 的串口传图帧缓存系统设计实现(fifo2mig_axi )

文章目录 前言一、接口转换模块设计二、fifo2mig_axi 模块二、接口转换模块仿真四、fifo2mig_axi_tb五、仿真展示 前言 结合串口接收模块和 tft 显示屏控制模块&#xff0c;设计一个基于 DDR3 的串口传图帧缓存系统。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面…

电影《银河护卫队3》观后感

上周看了电影《银河护卫队3》&#xff0c;本部电影&#xff0c;主要是围绕着主角团队中的一个队员展开叙事的&#xff0c;在团队中&#xff0c;这名队员叫“火箭”&#xff0c;是一只经过基因改造过的浣熊。 当初进行改造的团队&#xff0c;是一家拥有基因改造技术的团队&…

程序员:面试造飞机,入职拧螺丝?真难···

刚开始工作的时候&#xff0c;我也想不通这个问题&#xff0c;甚至很鄙视这种现象。后面当了面试官&#xff0c;做到了公司中层管理&#xff0c;也会站在公司以及行业角度去重新思考这个问题。 为什么这种现象会越来越普遍呢&#xff1f;尤其在 IT 行业愈加明显。 面试看的是…

命令firewalld和firewall-cmd用法

firewalld命令跟firewall-cmd 1.启动firewalld服务 systemctl start firewalld.service2.关闭firewalld服务 systemctl stop firewalld.service3.重启firewalld服务 systemctl restart firewalld.service4.查看firewalld状态 systemctl status firewalld.service5.开机自启…

chatgpt-4它的未来是什么?该如何应用起来?

在当今快节奏的数字通信世界中&#xff0c;ChatGPT已成为一个强大的在线聊天平台&#xff0c;改变了人们互动和沟通的方式。凭借其先进的AI功能、用户友好的界面和创新技术&#xff0c;ChatGPT已成为个人和企业的热门选择。 然而&#xff0c;ChatGPT的未来有望更加激动人心和具…

Java多线程synchronized Lock volatile,看完这一篇就够了

线程安全问题 一、对线程安全的理解&#xff08;实际上是内存安全&#xff09;二、线程同步的实现方法synchronized实现同步Lock实现同步volatile实现同步JUC的Callable实现同步 三、守护线程四、ThreadLocal原理和使用场景五、Thread类的常用方法&#xff0c;以及线程的状态六…

junit如何在多模块项目中使用

文章目录 前言一、最简单的单元测试二、springboot多模块测试单元1.问题2.解决 总结 前言 相信后端的小伙伴对于junit测试应该不陌生,当我们写好了一些功能之后,由于不太放心是否会出现问题,我们会选择自测; 第一种 通过类似postman之类的,直接走接口测试第二种 由于构造数据…

Spring Boot集成ShardingSphere实现数据加密及数据脱敏 | Spring Cloud 48

一、前言 通过以下系列章节&#xff1a; Spring Boot集成ShardingSphere实现数据分片&#xff08;一&#xff09; | Spring Cloud 40 Spring Boot集成ShardingSphere实现数据分片&#xff08;二&#xff09; | Spring Cloud 41 Spring Boot集成ShardingSphere实现数据分片&…

SoringBoot——pom文件:starter

先来看一看&#xff1a; 这次我们来介绍SpringBoot的pom文件的另一个好玩的地方&#xff1a;starter。 starter的中文含义是启动器&#xff0c;所以有时候我们在Maven仓库找依赖的时候&#xff0c;如果开启了自动翻译就会经常会看见一个奇怪的词叫做某某弹簧启动器&#xff0…

tomcat集群下的session共享和负载均衡(memcache实现)

环境 操作系统&#xff1a;windows tomcat1&#xff1a;Apache Tomcat/7.0.52&#xff08;8085&#xff09; tomcat2&#xff1a;Apache Tomcat/7.0.52&#xff08;8086&#xff09; jdk&#xff1a;1.8.0_251 nginx&#xff1a;nginx-1.20.1&#xff08;8070&#xff09; memc…