【Python】ffmpeg模块处理视频、音频信息

多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。
这里主要介绍一下FFmpeg的一些常用参数,并且主要功能:截取视频、视频格式转换、视频分辨率转换、视频合并、提取视频、提取音频、提取图片、视频水印处理等。

ffmpeg参数:

一、公共参数:
-i 设定输入流 
-y 表示如果输出文件已存在则覆盖
-f 设定输出格式  指定文件格式(ffmpeg -formats可以列举支持的format)
-b 指定视频和音频加起来的码率
-q:v表示存储jpeg的图像质量,一般2是高质量。 格式:-q:v 2 -f image2
-ss 开始时间                                                         格式:00:00:02或者2.00
-t 表示截取多长的时间(持续时间)
-to 截到视频的哪个时间点结束(时间点)
-async 多少桢同步
-max_muxing_queue_size  增大容器封装队列大小(视频处理出现报错时) 格式:-max_muxing_queue_size 1024

二、视频参数
-re 根据文件真实的帧率来读取文件,生成实时刷新的直播流  格式:-re
-r 设定帧速率,单位为Hz,默认为25                  格式:-r 29(表示每一秒几帧)
-s 设定画面的宽与高(帧尺寸)                        格式:-s 720x1280

"coded_height":1280, "coded_width":720,

–b:v 表示视频平均码率(更改码率的速度最慢)       格式:–b:v 1500k
-bufsize 用于设置码率控制缓冲器的大小             格式:-bufsize 1500k 
-maxrate 码率波动,不要超过一个阈值               格式:-maxrate 1800k
-minrate 码率波动,不要低于一个阈值               格式:-minrate 1300k
-aspect 设定画面的比例                                      格式:-aspect 16:9 或者-aspect 1.7777

"display_aspect_ratio":"16:9"

-sar 设定画面的比例                                      格式:-sar 1:1

"sample_aspect_ratio":"1:1"

-vf scale=iw*0.9:ih*0.9或者-vf scale=720:1280或者scale=720:-1     -vf是调用video filter,这里用了scale filter来改变分辨率进行转码

-vf是-filter:v的简写,-filter指定过滤器,:v是流选择器,表示对视频流应用过滤器。scale=后面的参数是w:h
格式:-vf scale=320:240        设置具体的宽度和高度
格式:-vf scale=360:-1         固定高度
格式:-vf scale=-2:720         固定宽度
格式:-vf scale=iw*0.9:ih*0.9  原来宽的0.9倍,高的0.9倍
-vf crop=width:height:x:y      视频裁剪(其中 width和height表示裁剪后的尺寸,x:y 表示裁剪区域的左上角坐标)
-vf transpose=2                旋转视频(transpose默认0-逆时针和垂直翻转,1-顺时针旋转90度,2-逆时针旋转90度,3-顺时针和垂直翻转)
-filter_complex [0][1]hstack   水平拼接两个视频
-filter_complex [0][1]vstack   垂直拼接两个视频
-qp 23                         编码质量(值越大,压缩率越大,质量越低)
-crf 23                        编码质量(0-无损编码,可用值是0~51;x264默认值是23(推荐 17~ 28))
-strict -2                     之前是实验参数表示aac音频编码(使用FFmpeg自带的aac音频编码要带上-strict -2 参数就可以了)
-- 图片+音频合并成视频
ffmpeg -r 15 -f image2 -loop 1 -i 输入图片.png -i 输入音频.mp3 -s 1920x1080 -pix_fmt yuvj420p -t 278 -vcodec libx264 输出.mp4
-pix_fmt:指定图片输入格式(有yuv420,yuv444等各种格式)
-loop 1 :因为只有一张图片所以必须加入这个参数
-t:这个是图片转换成视频后持续的时间长度,必须指定,单位为秒,不然会无限制生成视频时间长度;

-metadata:s:v:0 rotate=90

-vn 不处理视频 
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器  -c:v效果一样
-vcodec copy 表示使用跟原视频一样的视频编解码器。
-c:v libx264 表示对原视频进行libx264重新编码
-pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率  格式:-pass 1
-bsf:v h264_mp4toannexb=-vbsf h264_mp4toannexb   把mp4格式转换为ts格式

三、音频参数
–ar 表示音频采样率,单位为Hz;               格式:–ar 44100
–ab 音频数据流量 位速                       格式:–ab 128k
-ac 设定声音的Channel数 
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器  -c:a效果一样
-acodec copy表示使用跟原视频一样的音频编解码器。
-an 不处理音频
-vol 200%的音量              格式:-vol 200

注意一个问题,ffmpeg 在切割视频的时候无法做到时间绝对准确,因为视频编码中关键帧(I帧)和跟随它的B帧、P帧是无法分割开的,否则就需要进行重新帧内编码,会让视频体积增大。所以,如果切割的位置刚好在两个关键帧中间,那么 ffmpeg 会向前/向后切割,所以最后切割出的 chunk 长度总是会大于等于应有的长度。

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

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

相关文章

【探索测试篇】探索无界,BUG无限,让程序猿头疼的测试技术

探索无界,BUG无限 一、修改系统时间 当功能模块中存在倒计时、计时器、时间,与时间有关系时,尝试修改系统时间,测试系统时间是否参与计算,修改系统时间是否会影响到倒计时、计时、时间等与时间有关系的模块 例&#…

【数据库】Mysql函数DATE_ADD() 增加日期/时间

有这样一个场景:数据库还款计划表有到期还款日字段,正常是每月2日。但这个字段有些是每月1日,现需要统一改成2日,可以用到DATE_ADD函数,但是执行时需要注意:只能执行一次 DATE_ADD(date,INTERVAL expr type…

python 时间函数小总结

时间戳:从1970年1月1日00:00:00开始按秒计算的偏移量。举个例子,现在是2017年6月11的下午16:54:32,那么print(time.time())输出的值是1497171320.99就代表现在的时间戳。 元组(struct_time):struct_time元组…

【数据库】Mysql函数DATE_FORMAT() 显示日期/时间

上一篇文章介绍了Mysql函数DATE_ADD(),这篇文章主要是为了解决上次遗留的问题: 把问题变得更复杂一点:假设有两个借款,其中一个借款1的到期还款日为2日,借款2的到期还款日为10日。这个字段loan_pmt_due_date日期有多个…

fiddler抓包工具使用技巧

一、快速找所有post、get、Result code200请求 1、所有post请求的图标都是带有向右的小箭头的那种,如果能让所有向右的小箭头都高亮显示就好了解决方案:输入命令:post 然后点击enter键回车,可以看到所有的post请求都是以蓝色的底…

python文件操作小总结

os.getcwd() 方法用于返回当前工作目录 os.path.getatime(file) 输出文件访问时间 os.path.getctime(file) 输出文件的创建时间 os.path.getmtime(file) 输出文件最近修改时间

【数据库】Mysql的CONCAT()函数拼接字符串

mysql CONCAT()函数用于将多个字符串连接成一个字符串,是最重要的mysql函数之一: mysql CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。 回到上一篇文章的问题:假设有两个借款…

Jmeter中JDBC Connection Configuration实现MySQL JDBC Request数据库处理

一、JDBC Connection Configuration数据库配置元件 线程组-添加-配置元件-JDBC Connection Configuration Name:元件命名空间,请随意 Comments:注释,请随意 Variable Name:数据库连接池的名称,因为一个测试计划可以有多个JDBC Connection …

【数据库】Mysql的REPLACE()函数替换字符串

mysql中replace函数直接替换mysql数据库中某字段中的特定字符串,用起来非常的方便。 REPLACE(str,from_str,to_str) 第一个字符串str中,将from_str替换为to_str 回到上一篇文章的问题:假设有两个借款,其中一个借款…

python 根据时间间隔删除文件夹内修改时间比较早的文件

import os import time import datetime def fileremove(filename, timedifference):#getmtime获取文件的修改时间date_wintime datetime.datetime.fromtimestamp(os.path.getmtime(filename))date_unixtimeos.path.getmtime(filename)now_wintime datetime.datetime.now()no…

百度智能云文档汇总

百度智能云文档汇总目录: 一、百度语音-->https://cloud.baidu.com/doc/SPEECH/index.html 百度语音提供对自然语言文本的解析服务。自然语言文本是用户意图的表述,意图解析的目的就是将文本解析成意图表示。 二、文字识别-->https://cloud.baidu…

位、字,字节与KB的关系

位b:我们常说的bit,位就是传说中提到的计算机中的最小数据单位:说白了就是0或者1;计算机内存中的存储都是01这两个东西。 字节B:英文单词:(byte),byte是存储空间的基本计…

Python单元测试框架之unittest+requests+ddt+excel接口自动化测试

unitetest是python里单元测试框架,是基于 java 的 junit 测试框架 相当于是一个 python 版的 junit,除了 unittest,还有一个 pytest 框架 unittest.TestCase:TestCase类,所有测试用例类继承的基本类 一个TestCase的实例就是一个…

python datetime

datetime是Python处理日期和时间的标准库。 获取当前日期和时间 我们先看如何获取当前日期和时间: >>> from datetime import datetime >>> now datetime.now() # 获取当前datetime >>> print(now) 2015-05-18 16:28:07.198690 >…

高效精准分析定位系统BUG,让你无所不能

项目版本上线发版后,经常会收到领导、产品、研发、业务、用户等反馈过来各种各样BUG,令人心惊胆战,措手不及 这时领导会第一时间找你沟通,让其定位排查原因,解决处理 很多测试人员第一反应: 需求没说这样&#xff1f…

B KB MB

1字节8位8bit 名称缩写大小1千字节 KB 2^10 1,024 字节1 兆字节 MB 2^20 1,048,576 字节1 千兆字节 GB 2^30 1,073,741,824 字节1 T字节 TB 2^40 1,099,511,627,776 字节

【业务篇】史上最全经验版用例之IOS和Android版APP版本更新、IOS版规避审核?

一、IOS app设置苹果审核 为了app提交苹果能快速审核通过,故需设置app审核状态,隐藏部分敏感功能 1、线上app版本1.0.0,新版本app2.0.0测试通过,设置2.0.0版本app审核状态,隐藏2.0.0版本部分敏感功能,提交…

python 根据文件夹大小删除修改时间比较早的文件

根据文件夹大小定时删除文件夹部分比较旧的数据 import os import time import datetime FILE_DIR E:/Djangocode/RSMDSys/static/imagedata/ 计算文件夹容量 单位为MB def fileCapacity(FILE_DIR):s0for root, dirs, files in os.walk(FILE_DIR):for f in files:ssos.path.ge…

Python之Pymysql模块操作MySQL增删改查

Python3 MySQL 数据库连接 - PyMySQL 驱动 PyMySQL 连接数据库,实现增删改查 什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API v2.0 规范&#x…

python计算程序运行时间

import time if __name__ __main__:time_starttime.time()#程序位置time_endtime.time()print(花费时间,time_end-time_start) #此处单位为秒