网站首页 > 编程文章 正文
一、入门:
参考视频链接:
https://www.bilibili.com/video/av40146374/?p=9
# ffmpeg支持很多视频格式,此处用mp4举例
# 显示所有的操作命令,以及介绍
ffmpeg -h
# 播放视频、音频 按esc退出
ffplay example.mp4
# 键盘上的左右可以进行前进后退播放,点击窗口的任意一个位置,可以跳转播放位置
# f键是全屏 p或空格是暂停 double右键是切换显示模式
ffplay example.mp3
# 查看视频的具体信息
ffprobe example.mp4
二、音视频格式转换
# -i是input的缩写,后面接输入文件,之后接输出文件及其格式,这是一条视频文件格式转换命令
ffmpeg -i example.mov output.mp4
# -acodec an audio(音频) codec(编解码器) 这条指令是用来指定音频编解码器
# -ar 设置音频采样率
# -ab 设置音频的比特率 如320k
# -ac 声道 c是channel的缩写,用来设置声道数的指令 1是单声道,2是双声道立体声 默认是使用原音频的声# 道数
# 最后是输出音频的文件名和格式
ffmpeg -i example.flac -acodec libmp3lame -ar 44100 -ab 320k -ac 2 out.mp3
各大视频网站视频封装,编码解码格式
三、音视频选项
1、视频选项
Video options:
-vframes number set the number of video frames to output
-r rate set frame rate (Hz value, fraction or abbreviation)
# 用来缩放视频尺寸
-s size set frame size (WxH or abbreviation)
-aspect aspect set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)
-bits_per_raw_sample number set the number of bits per raw sample
-vn disable video
-vcodec codec force video codec ('copy' to copy stream)
-timecode hh:mm:ss[:;.]ff set initial TimeCode value.
-pass n select the pass number (1 to 3)
-vf filter_graph set video filters
-ab bitrate audio bitrate (please use -b:a)
-b bitrate video bitrate (please use -b:v)
-dn disable data
2、音频选项
Audio options:
-aframes number set the number of audio frames to output
-aq quality set audio quality (codec-specific)
-ar rate set audio sampling rate (in Hz)
-ac channels set number of audio channels
-an disable audio
-acodec codec force audio codec ('copy' to copy stream)
-vol volume change audio volume (256=normal)
-af filter_graph set audio filters
相关学习资料推荐,点击下方链接免费报名,先码住不迷路~】
音视频免费学习地址:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击788280672加群免费领取~
四、视频压制
- 将4k的in.webm压制为1080p的MP4
# -pix_fmt : 此处采用yuv420p,网络视频基本上采用这个格式
# -vcodec : 用来设置视频流的编码器指令,一般使用libx264
# -preset 编码器预设 默认是medium
# -profile:v 用来指定编码器的配置,主要和压缩比有关 实时通信领域一般采用 baseline,
# 流媒体采用 main,制作超清视频使用 high
# -level:v 对编码器的具体规范和限制,压缩比和画质就像鱼和熊掌,一般情况下,1080p的视频就用4.1
# -crf constant rate factor 恒定速率因子模式 适用于对画质有要求,大小无关紧要的情形。
# 范围为0- 51,默认值就是23,数值越小,质量越高,0就是无损的画质
# -r 是30帧
# -b:a 用来设置音频比特率,ffmpeg在这里推荐使用这一种书写方式,目前大多数网站都要求为128k/s或
# 192k/s
ffmpeg -i in.webm -s 1920*1080 -pix_fmt yuv420p -vcodec libx264 -preset medium
-profile:v high -level:v 4.1 -crf 23 -acodec acc -ar 44100 -ac 2 -b:a 128k out.mp4
# YUV、NV、RGB
ffmpeg -pix_fmts
-preset 编码器预设选项 压制视频时一般采用veryslow
视频压制简单代码
# -i 输入
# -r 帧率,即每秒多少帧
# -b:a 32k 用来设置音频比特率,目前大多数网站都要求为128k/s
# 最后为输出
ffmpeg -i "output.avi" -r 10 -b:a 32k 1.mp4
五、ffmpeg的码率控制模式
我们都知道画质越好,要求的码率越高,文件体积也越大,所谓的码率控制,就是在决定为每一个帧画面分配多少比特数,这是在权衡文件体积和画面质量,实际上ffmpeg一共支持三种码率控制模式:-qp,-crf,-b
-qp(constant quantizer):恒定量化器模式,利用特殊算法,将量化器转化为数字,这样一来,每一帧的画面质量都能够通过这些参数来判定,这些量化参数是可以手动测试的,不推荐,让软件自动设置就好了,画质被划分为0-51个级别,0就是无损的画质,用qp压缩视频,每一帧的画面都能达到该级别的质量,画质是最好的,体积也是最大的,大到无法想象,一般不采用这种码率控制模式
# 无损压缩的例子(快速编码)
ffmpeg -i input -vcodec libx264 -preset ultrafast -qp 0 output.mkv
# 无损压缩的例子(高压缩比)
ffmpeg -i input -vcodec libx264 -preset veryslow -qp 0 output.mkv
-crf (constant rate factor) 恒定速率因子模式 实际上就是一个浮动的qp模式,根据人眼调节码率,
将一部分码率用在视觉敏感的画面里,整体码率降低,文件大小也较小
-b (bitrate) 固定目标码率模式,编码器视图,让编码器最后的码率与我们给定的码率相等,视频码率和文件体积都是确定的
他们都是单遍编码
-b bitrate 采用vbr(variable bit rate 动态比特率)的方式来编码
# VBR的例子
ffmpeg -i input -vcodec libx264 -preset veryslow output
- 现在的视频网站一般采用ABR(average bit rate/平均比特率)的方式编码
- CBR(constant bit rate) 恒定比特率 没人用
六、合并,提取音视频
1、提取音视频
# -vcodec copy:保持原编码不变
# -an 静音,实际上是将音频剔除
# 纯粹视频获取
ffmpeg -i in.mp4 -vcodec copy -an v.mp4
# 存粹音频获取
ffmpeg -i in.mp4 -vn -acodec copy a.m4a
有些视频有多个音频流,就只能有针对性的提取,就需要在提取音频中加上 -map 0:3
2、合成音视频
# 将音频和视频合在一起 -c copy 用来维持编码器不变
ffmpeg -i a,m4a -i v.mp4 -c copy out.mp4
六、截取,连接音视频
1、截取
# 记得音视频区别-acodec -vcodec
# 截取音频 -ss,-to要截取的音视频的起始时间和终止时间
ffmpeg -i in.mp3 -ss 00:01:00 -to 00:01:10 -acodec copy out.mp3
# 截取音频 -ss要截取的音视频的起始时间,-t 代表截取时长,此处为10s
ffmpeg -i in.mp3 -ss 00:01:00 -t 10 -acodec copy out.mp3
# 将-ss放在-i之前能够使用关键帧技术,但是这样截取出来的视频起始时间和终止时间不一定准确
ffmpeg -ss 00:01:00 -i in.mp3 -to 00:01:10 -acodec copy out.mp3
# 解决上述问题 -copys 保留时间戳
ffmpeg -ss 00:01:00 -i in.mp3 -to 00:01:10 -acodec copy -copys out.mp3
2、连接
# concat:concatenate 串联 串联视频
ffmpeg -i "concat:01.mp4|02.mp4|03.mp4" -c copy out.mp4
七、提取关键帧
ffmpeg -i video_name.mp4 -vf select='eq(pict_type\,I)' -vsync 2 -s 1920*1080 -f image2 core-%02d.jpeg
# 各个参数解释:
# -i :输入文件,这里的话其实就是视频,
# -vf:是一个命令行,表示过滤图形的描述, 选择过滤器select会选择帧进行输出:包括过滤器常量
# pict_type和对应的类型:PICT_TYPE_I 表示是I帧,即关键帧。
# -vsync 2:阻止每个关键帧产生多余的拷贝
# -f image2 name_%02d.jpeg:将视频帧写入到图片中,样式的格式一般是:
# “%d” 或者 “%0Nd”
# -s:分辨率,1920*1080
相关资料
Python - FFmpeg - 本文详细讲述了ffmpeg的结构概念,但是对于ffmpeg在python中的应用讲述的不多。
【Python】ffmpeg模块查询视频、音频信息
原文 ffmpeg教程-手把手教你如何简单快捷处理音视屏_miracleo_的博客-CSDN博客
猜你喜欢
- 2024-09-08 技术分享| 如何使用FFmpeg命令处理音视频
- 2024-09-08 ubuntu ffmpeg开发环境搭建(ffmpeg linux开发)
- 2024-09-08 嘉宾博文:OpenCV如何在区块链操作系统中进行交叉编译
- 2024-09-08 想做人工智能的你,OpenCV安装好了吗?AI大神手把手教会你
- 2024-09-08 Kotlin编写一个AudioMerger 在线音视频解析七
- 2024-09-08 FFmpeg中与视频解码相关知识简介(ffmpeg hevc解码)
- 2024-09-08 C++与音视频处理: 处理音频和视频数据的编码和解码
- 2024-09-08 ffmpeg安装大放送,包括编译需要的支持库
- 2024-09-08 ffmpeg推流桌面直播(ffmpeg推流rtsp命令)
- 2024-09-08 FFmpeg基础知识总结(ffmpeg)
你 发表评论:
欢迎- 05-09Spring Boot3 RESTful 接口参数校验,这篇吃透就够了!
- 05-09《Spring6》第02节:基于XML方式搭建Spring6框架开发环境
- 05-09MapStruct架构设计(mapstruct @mapping)
- 05-09分布式微服务架构组件(分布式微服务架构设计)
- 05-09Java Swing组件下的JButton实例(java swing 组件)
- 05-09java基础都在这了,小主们拿去吧(java基础是指什么)
- 05-09AOP的实现落地(拦截过滤),一切都要从Servlet说起
- 05-09【Spring Boot】WebSocket 的 6 种集成方式
- 最近发表
-
- Spring Boot3 RESTful 接口参数校验,这篇吃透就够了!
- 《Spring6》第02节:基于XML方式搭建Spring6框架开发环境
- MapStruct架构设计(mapstruct @mapping)
- 分布式微服务架构组件(分布式微服务架构设计)
- Java Swing组件下的JButton实例(java swing 组件)
- java基础都在这了,小主们拿去吧(java基础是指什么)
- AOP的实现落地(拦截过滤),一切都要从Servlet说起
- 【Spring Boot】WebSocket 的 6 种集成方式
- Java 中五种最常见加密算法:原理、应用与代码实现
- 用注解进行参数校验,spring validation介绍、使用、实现原理分析
- 标签列表
-
- spire.doc (59)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)