音视频开发(一)ffmpeg 简单学习

news2024/12/23 9:21:43

前言

简单音视频处理。

学习自:

小破站FFmpeg最强教学丨入门FFmpeg看这一篇就够了丨从入门到放弃系列_哔哩哔哩_bilibili

01 下载、配置_哔哩哔哩_bilibili

基础知识

音视频处理基本都是:采样-处理得到帧队列-编码得到包队列-封装得到文件。

视频

一帧视频

RGB:各占8位,因此一个像素点是24位=3B。比如一个1280*720像素的图像,其大小为1280*720*3 B.

YUV:Y 是亮度,UV 指代颜色。存储格式主要有 444 422 420 三种:

image-20231020102540785

YUV422 每两个 Y 共用一个 UV 分量。YUV420 每4个 Y 共用一个 UV 分量:

1697769109387

YUV444:8:8:8=3B。

YUV422:8:4:4=2B。

YUV420:8:2:2=1.5B。

传输会通过一些压缩方式处理:

1697769286979

基本概念

码率:kb/s,单位时间内数据流量,和采样率挂钩。

帧率:fps,一秒多少帧。

分辨率:一幅图像包含像素数。

IPB:视频压缩中的压缩算法。I帧体积最大,解压缩的时候不需要参考其他帧仅靠自己就能重构完整图像,可以由编码器选择决定I帧数量;P帧需要向前寻找可以参考的I/P帧来解压缩;B帧则可以向前或向后寻找预测。

音频

计算机用数字信号模拟现实中连续的声音。

基本概念

采样率:采样频率,每秒采样点个数,如 22KHz。

采样精度:y轴能取到的值数量,精度以位数为单位,如16 bit。

通道:声道。

一定时间长度的音频大小:时长*采样率*采样深度*通道。

比特率:每秒传输数据数,= 采样频率 * 采样精度 * 通道数。

码率: 压缩后的音频数据的比特率。= 音频文件大小/时长。数据越大说明压缩率越低,音质越好。

帧长:1帧的播放时间/压缩后一帧的数据长度。

压缩方式:交错方式,如左右声道 LRLRLR…… 非交错模式,如 LLLL RRRR

压缩技术就是去掉音频中的一些冗余部分,人耳无法识别的来降低数据大小。一方面是人耳真的听不到的,20Hz~20kHz 以外的;另一方面有一些效应影响,比如一个强声音和一个弱声音同时出现,弱声音通常不会被我们听到。这就是掩蔽效应,主要表现为频谱掩蔽效应和时域掩蔽效应。

频谱掩蔽效应:某一个频率上出现了强度很大的声音信号,其周围一定范围频率内的信号如果强度相对小一些,则不容易被听到。

image-20231024010209619

时域掩蔽效应:前掩蔽是出现强信号前的一小段时间内弱信号会被掩蔽;同时掩蔽是强弱信号同时出现的时候弱信号被掩蔽;后掩蔽是强信号小时一段时间内弱信号会被掩蔽.

image-20231024010556195

编码:根据心理声学模型来设置阈值、量化、编码。

封装

视频音频按一定格式算法压缩封装便于播放器播放。比如 MP4 MKV。类似拿着肉馅和皮,包饺子还是包包子。

同步

同步包括:

  • DTS:什么时候解码这一帧。
  • PTS:什么时候显示这一帧。

一般出现B帧的时候两者顺序会不相同。

同步方式:AM 视频同步到音频,VM 音频同步到视频,ECM 两者同步到外部时钟,一般 AM 最多,VM 最不常见。

ffmpeg

基于 MPEG 编码标准的 “Fast Forward” 开源多媒体处理程序。

基本概念

ffmpeg:编码器。

ffplay:播放器。

ffprobe:分析器。

首先,播放器是如何处理音视频数据的?

image-20231024225312176

容器:多媒体文件。

媒体流:时间轴上一段连续数据。

数据帧:编解码的最小单元。

复用器:把视频,音频,字幕流组合起来。

解复用器:按一定规则解开。

封装

1698160056600

avformat_alloc_context() 申请一个AVFormatContext 结构的内存,并进行简单初始化

开始学习

基本使用
$ ffmpeg -h # 查看所有提示信息。还可以后跟 full 等。
$ ffplay 视频/音频文件 # 使用 ffplay 开始播放视频/音频。播放时按下 w 键切换播放窗口的显示
$ ffprobe 视频/音频文件 # 使用 ffprobe 分析查看视频/音频具体信息

$ ffmpeg -i 输入文件 预期输出文件 # 转换格式。比如输入文件是 .mp4,期望输出文件是 .mov
编码

改变编码基本是为了调整存储方式节约存储空间;或者牺牲存储空间获得更好的音质画质。

$ ffmpeg -codecs # 查看所有编码方式

几种不同的封装推荐的编码方式(以下几种是 1080p 及以下质量的封装方案):

mp4:h264 + aac。

webm:vp8 + vorbis(youtube 的方案,软硬件支持程度不高但是为了避开专利问题)。

ogg:theora + vorbis(开源)

$ ffmpeg -i in.flac -acodec libmp3lame -ar 44100 -ab 320k -ac 2 out.mp3
# libmp3lame: mp3 的编码器。或者后跟输出文件是.mp3 格式也是一样的效果、
# -ar: 采样率,如果不设置和默认是一样的。一般常用 4800 和 44100
# -ab: 比特率,默认 128k
# -ac: 通道数
$ ffmpeg -i in.webm -s 1920x1080 -pix_fmt yuv420p -vcodec libx264 -preset medium -profile:v high -level:v 4.1 -crf 23 -acodec aac -ar 44100 -ac 2 -b:a 128k out.mp4
# -s: 分辨率大小
# -pix_fmt: 颜色像素空间,可以通过 ffmpeg -pix_fmts 查询。yuv420p 是网络视频常用
# libx264: h264 的软件编码器
# -preset: 编码器预设。精度越高速度越慢体积越小。默认 medium,录制视频一般 veryfast 存储空间换速度,压制视频一般 veryslow
# -profile:v : 画质级别。实时传输常用 baseline,流媒体常用 main,高清视频常用 high。
# -level:v : 压缩视频级别。
# -crf: 恒定速率模式,控制视频质量(不过无法控制具体文件大小)范围0~51,数值越小质量越高。
# -r: 设置帧率。
# 其他和音频的类似, -b:a 和 -ab 一样

转换完成了可以 ffprobe 测一下看看具体数值。

码率控制:有以下三种。-qbp -crf -b`.

-qp:恒定量化器,把画质转化为参数。参数范围也是0~51,0 是无损,体积很大。

能有多大?我作死试试。

试完回来了。7.60MB 变成 23MB了。

image-20231026150512852

-crf:降低一些码率,来保证画质变化不大。

-b:固定码率模式,这样固定码率和文件大小。一般对文件大小有严格要求时才使用。

以上三种都是单遍编码,好像就是扫描一遍完成编码。因此 qp crf 最好搭配 veryslow 预设,使得参数控制更精准。

比特率编码方式:

  • vbr 可变比特率,比如 -preset。
  • abr 平均比特率,-b:v。不过 abr 码率变化过大,以及用户设备/网络不太好的时候容易造成花屏/黑屏。
  • cbr 恒定比特率,在 abr 基础上加一些限定比如 minrate maxrate 来使得比特率相对恒定。
音视频分离合并
$ ffmpeg -i in.mp4 -vcodec copy -an out.mp4
# vcodec 复制原来的。
# -an 静音,也就是把音频分离出来。
# 同理,-vn 是得到音频。
# 如果有多个音频流,需要选定,比如 -map 0:3 选定 0:3 音频流。
$ ffmpeg -i in.mp4 -i in.m4a copy -c out.mp4
# 如此来合并音视频
音视频截取拼接
$ ffmpeg -i in.mp4 -ss 00:01:00 -to 00:05:00 -vcodec copy out.mp4
$ ffmpeg -i in.mp4 -ss 00:01:00 -t 4 -vcodec copy out.mp4 # 持续时长4s
$ ffmpeg -i in.mp4 -sseof -10 -vcodec copy out.mp4 # 末尾截取10s
$ ffmpeg -ss 00:01:00 -i in.mp4 -to 00:05:00 -vcodec copy out.mp4 # 调换数据,关键帧技术加速处理。但是得到的视频时间不一定准确
$ ffmpeg -ss 00:01:00 -i in.mp4 -to 00:05:00 -vcodec copy -copyts out.mp4 # 保留时间戳,更准确
$ ffmpeg -i "concat:01.mp4|02.mp4|03.mp4" -c copy out.mp4 # 合并视频。不建议合并不同类型数据!
# 可以试试 avidemux,基于 ffmpeg 的另一个开源工具,专用与裁剪合并的。ffmpeg 万能但是底层(就像c语言hh),应用的时候可以多尝试上层技术。
视频截图,添加水印,导出 gif
$ ffmpeg -i in.mp4 -ss 00:05:00 -vframes 1 img.jpg # 5s 处截一张图
$ ffmpeg -i in.mp4 -i logo.png -filter_complex "overlay=20:20" out.mp4 # 距离左上角坐标:20 20 的位置添加此图片水印
$ ffmpeg -i in.mp4 -ss 00:01:00 -to 00:05:00 -s 640x320 -r 15 -out.gif # 导出 gif
屏幕录制
$ ffmpeg -f gdigrab -i desktop rec.mp4
# gdigrab 是 windows 下的录屏工具。不过显示比较多,我 win11 录制失败了。
# 录屏以及录制摄像头推荐工具: obs studio
# 推流:
ffmpeg -re -i rec.mp4 按照网站要求编码 -f flv "my rtmp address/my live stream code"

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么设置禁止使用U盘

怎么设置禁止使用U盘 在工作中,数据对企业来说是尤为重要的,一旦企业或机构的数据泄露,就会给企业或机构带来极大的损失,企业为了保护公司数据的安全,往往禁用公司电脑使用U盘,禁用U盘也成为了企业的必要措…

Allegro电商平台:为卖家打开全球市场,为消费者带来无限选择

Allegro电商平台是一个全球性的在线零售平台,为卖家提供了一个广阔的市场,让他们可以在全球范围内销售产品。这个平台以其丰富的产品类别、便捷的购物体验和优质的客户服务而受到卖家和消费者的欢迎。本文将介绍Allegro电商平台的特点,以及卖…

【@胡锡进】大模型量化分析- 潍柴动力 000338.SZ

对于预测股票价格的问题,有许多不同的方法可以尝试。下面我将为你分别使用SARIMA、简单移动平均线、指数加权移动平均线、Bollinger带、相对强弱指标、随机指标、线性回归、随机森林回归、支持向量回归法、自回归移动平均法和长短期记忆模型来预测潍柴动力未来3天的…

NVM 安装及使用

1.安装 我使用的是解压版,免安装 github下载压缩包 下载后放在一个【没有中文】的文件夹下,解压 然后需要配环境变量, 首先添加两个变量,分别是刚刚nvm解压的路径,和当前node安装的路径。 然后编辑path变量&#x…

将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表

将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表 算法思路: 这个其实就是一个归并排序,我们这里两顺序表为升序,要合并成一个升序表 用i和j分别标记顺序表A和顺序表B的元素,然后新表是C 每次从A和…

springboot异步线程池

项目中经常会遇到线程池异步处理一些任务 1.配置信息 # 异步线程配置 # 核心线程数 async:executor:thread:core_pool_size: 10# 最大线程数max_pool_size: 100# 任务队列大小queue_capacity: 20# 线程池中线程的名称前缀name:prefix: kc-async-service-# 缓冲队列中线程的空闲…

玫瑰红葡萄酒的基本知识

在过去的几年里,玫瑰红葡萄酒越来越受欢迎,但是如果你是饮用玫瑰红葡萄酒的新手,你可能想知道它是如何从其他红葡萄酒或白葡萄酒中脱颖而出的。 玫瑰红具有标志性的粉色,很难归类,那它是更适合放在红酒类还是属于白酒…

什么是IGBT测试,igbt动态测试都有哪些指标,纳米软件科普

IGBT测试是指对绝缘栅双极型晶体管(IGBT)的性能进行检测和评估。IGBT是一种复合全控型电压驱动式功率半导体器件,兼有金属氧化物半导体场效应晶体管(MOSFET)的高输入阻抗和电力晶体管(GTR)的低导通压降两方面的优点。 IGBT测试包括电气性能测试、可靠性测试、耐久性…

全能型开源数据库监控平台 - lepus

简 介 Lepus 是一款开源的数据库监控平台,目前已经支持 MySQL、Oracle、SQLserver、MongoDB、Redis 等数据库的基本监控和告警。 Lepus 在监控数据库时,无需在每台数据库服务器上部署脚本或 Agent,只需要在数据库中创建授权账号后&#…

HarmonyOS 自定义抽奖转盘开发(ArkTS)

介绍 本篇 Codelab 是基于画布组件、显式动画,实现的一个自定义抽奖圆形转盘。包含如下功能: 1. 通过画布组件 Canvas,画出抽奖圆形转盘。 2. 通过显式动画启动抽奖功能。 3. 通过自定义弹窗弹出抽中的奖品。 相关概念 ● Stack组件…

业务流程图基本规范要求

再描述业务流程应该如何画之前,需要了解几个概念 BPA(Business Process Automation)是指通过自动化技术来改进和优化企业的业务流程,以提高生产力 和效率。 BPM(Business Process Management)是指对企业…

java数据结构 基本查找,二分查找,分块查找

目录 算法查找基本查找二分查找优化方式 插值查找了解即可斐波那契查找 了解以上总结 分块查找 算法查找 基本查找 又叫顺序查找 从0索引开始挨个往后查找 需求 定义一个方法利用基本查找 查找某个元素是否存在 {132,135,65,86,89,6} public static void main(String[] args) …

java--while循环

1.while循环 2.示例 3.执行的流程&#xff1a; ①循环一开始&#xff0c;执行int i 0一次 ②此时 i0&#xff0c;接着计算机执行循环条件语句&#xff1a;0 < 3 返回true&#xff0c;计算机就进到循环体中执行&#xff0c;输出&#xff1a;"Hello World",然后执…

SpringBoot 源码分析(四) 内置Tomcat分析

一、Tomcat相关知识 1. tomcat目录结构 Tomcat文件的目录结构 2.启动流程 启动一个Tomcat服务是执行的bin目录下的脚本程序&#xff0c;startup.bat和 startup.sh.一个是windows的脚本&#xff0c;一个是Linux下的脚本&#xff0c;同样还可以看到两个停止的脚本 shutdown.ba…

AIGC是什么?一文读懂人工智能生成内容技术!

文章目录 前言一、AIGC是什么&#xff1f;二、AIGC的4个主要特征1、文本生成2、图像生成3、语音生成4、视频生成 三、AIGC如何运作&#xff1f;步骤1&#xff1a;收集数据步骤2&#xff1a;模型训练步骤3&#xff1a;内容生成步骤4&#xff1a;反馈和改进 四、AIGC关键技术能力…

智慧社区燃气管网监测系统

燃气易燃易爆&#xff0c;一旦操作不当或疏忽大意&#xff0c;极易引发燃气安全事故&#xff0c;造成严重后果&#xff0c;2023年10月24日&#xff0c;在吉林某小区&#xff0c;发生了燃气使用不当产生的爆炸导致了1人死亡&#xff0c;1人重伤&#xff0c;15人轻伤&#xff0c;…

网络监控硬盘录像机!

目录 认识录像机以及选购前小知识&#xff01; 1.网络监控摄像头的像素和分辨率对照参考&#xff1a; 2.录像视频的大小主要受摄像头的像素和存储编码影响&#xff0c;这些在设置录像的时候&#xff0c;都是可以改的。 3.关于录像机存储能力咨询 4.关于存储编码简介 认识录…

网页的基本结构

标签的结构 HTML网页是由HTML标签组成的描述性文本&#xff0c;HTML标签可以说明文字&#xff0c;图形、动画、声音、表格、链接等。 一个标签由开始标签&#xff0c;结束标签、标签名、标签属性组成 <div><a href"https://www.creatorblue.com/">创蓝…

酷开科技依托酷开系统推动家庭智能化加速发展

为什么越来越多的人会选择智能家居&#xff1f;因为智能家居的出现&#xff0c;大大方便了我们的生活&#xff0c;为生活提供便利舒适的体验&#xff1b;就如同洗衣机与洗碗机解放了我们的双手是一样的道理&#xff0c;智能家居是在生活的方方面面为我们提供更加便利化的可能性…

C++数据结构X篇_24_归并排序(稳定的排序)

本篇参考十大经典排序算法-归并排序算法详解进行整理和补充。 文章目录 1. 什么是归并排序1.1 概念1.2 算法原理1.3 算法实现 2. 归并排序算法特点2.1 时间复杂度2.2 空间复杂度2.3 稳定性 1. 什么是归并排序 1.1 概念 归并排序&#xff08;Merge sort&#xff09; 是建立在…