通过ffmpeg把图片转换成视频
FFmpeg命令(一)、使用filter_complex命令拼接视频
FFmpeg 视频处理入门教程给新手的 20 多个 FFmpeg 命令示例
FFmpeg命令行转码
ffmpeg 翻译文档 (ffmpeg-all 包含重要组件)
FFmpeg Filters Documentation
FFmpeg命令行滤镜使用
ffmpeg命令行使用nvidia CUDA scaling高速转分辨率转码(libnpp)
FFmpeg—源码编译
FFmpeg常用命令
Linux上的ffmpeg完全使用指南
视频和视频帧:FFMPEG 硬件解码API介绍
# 更新源
sudo apt update
# 添加源
sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
# 安装ffmpeg
sudo apt-get install ffmpeg
# 查看版本
ffmpeg -version
# 查看编码器和解码器
ffmpeg -encoders
pip install ffmpy==0.2.2 # 需要权限就添加sudo
查看FFmpeg支持的编码器
ffmpeg configure -encoders
查看FFmpeg支持的解码器
ffmpeg configure -decoders
查看FFmpeg支持的通信协议
ffmpeg configure -protocols
查看FFmpeg所支持的音视频编码格式、文件封装格式与流媒体传输协议
ffmpeg configure --help
播放视频
FFmpeg命令行工具学习(二):播放媒体文件的工具ffplay
ffplay input.mp4
# 播放完自动退出
ffplay -autoexit input.mp4
设置视频的屏幕高宽比
ffmpeg -i input.mp4 -aspect 16:9 output.mp4
通常使用的宽高比是:
16:9
4:3
16:10
5:4
2:21:1
2:35:1
2:39:1
编码格式转换
MPEG4编码转成H264编码
ffmpeg -i input.mp4 -strict -2 -vcodec h264 output.mp4
H264编码转成MPEG4编码
ffmpeg -i input.mp4 -strict -2 -vcodec mpeg4 output.mp4
ffmpeg -i 2020.mp4 -vcodec h264 -vf scale=640:-2 -threads 4 2020_conv.mp4
ffmpeg -i 1579251906.mp4 -strict -2 -vcodec h264 1579251906_output.mp4
参数解释:
-i 2020.mp4
输入文件,源文件
2020_conv.mp4
输出文件,目标文件
-vf scale=640:-2
改变视频分辨率,缩放到640px宽,高度的-2是考虑到libx264要求高度是偶数,所以设置成-2,让软件自动计算得出一个接近等比例的偶数高
-threads 4
4核运算
其他参数:
-s 1280x720
设置输出文件的分辨率,w*h。
-b:v
输出文件的码率,一般500k左右即可,人眼看不到明显的闪烁,这个是与视频大小最直接相关的。
-preset
指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。
与 veryslow相比,placebo以极高的编码时间为代价,只换取了大概1%的视频质量提升。这是一种收益递减准则:slow 与 medium相比提升了5%~10%;slower 与 slow相比提升了5%;veryslow 与 slower相比提升了3%。
针对特定类型的源内容(比如电影、动画等),还可以使用-tune参数进行特别的优化。
-an
去除音频流。
-vn
去除视频流。
-c:a
指定音频编码器。
-c:v
指定视频编码器,libx264,libx265,H.262,H.264,H.265。
libx264:最流行的开源 H.264 编码器。
NVENC:基于 NVIDIA GPU 的 H.264 编码器。
libx265:开源的 HEVC 编码器。
libvpx:谷歌的 VP8 和 VP9 编码器。
libaom:AV1 编码器。
-vcodec copy
表示不重新编码,在格式未改变的情况采用。
-re
以源文件固有帧率发送数据。
-minrate 964K -maxrate 3856K -bufsize 2000K
指定码率最小为964K,最大为3856K,缓冲区大小为 2000K。
-y
不经过确认,输出时直接覆盖同名文件。
-crf
参数来控制转码,取值范围为 0~51,其中0为无损模式,18~28是一个合理的范围,数值越大,画质越差。
将4个视频拼接成一个很长的视频(无声音)
ffmpeg -i 0.mp4 -i 1.mp4 -i 2.mp4 -i 3.mp4 -filter_complex '[0:0][1:0] [2:0][3:0] concat=n=4:v=1 [v]' -map '[v]' output.mp4
将4个视频拼接成一个很长的视频(有声音)
ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -filter_complex '[0:0][0:1] [1:0][1:1] [2:0][2:1] concat=n=3:v=1:a=1 [v][a]' -map '[v]' -map '[a]’ output.mp4
参数解释:
[0:0][0:1] [1:0][1:1] [2:0][2:1]
分别表示第1个输入文件的视频、音频,第2个输入文件的视频、音频,第3个输入文件的视频、音频。
concat=n=3:v=1:a=1
表示有3个输入文件,输出一条视频流和一条音频流。
[v][a]
得到的视频流和音频流的名字,注意在 bash 等 shell 中需要用引号,防止通配符扩展。
横向拼接2个视频
ffmpeg -i 0.mp4 -i 1.mp4 -filter_complex "[0:v]pad=iw*2:ih*1[a];[a][1:v]overlay=w" out.mp4
参数解释:
pad
将合成的视频宽高,这里iw代表第1个视频的宽,iw*2代表合成后的视频宽度加倍,ih为第1个视频的高,合成的两个视频最好分辨率一致。
overlay
覆盖,[a][1:v]overlay=w,后面代表是覆盖位置w:0。
竖向拼接2个视频
ffmpeg -i 0.mp4 -i 1.mp4 -filter_complex "[0:v]pad=iw:ih*2[a];[a][1:v]overlay=0:h" out_2.mp4
横向拼接3个视频
ffmpeg -i 0.mp4 -i 1.mp4 -i 2.mp4 -filter_complex "[0:v]pad=iw*3:ih*1[a];[a][1:v]overlay=w[b];[b][2:v]overlay=2.0*w" out_v3.mp4
竖向拼接3个视频
ffmpeg -i 0.mp4 -i 1.mp4 -i 2.mp4 -filter_complex "[0:v]pad=iw:ih*3[a];[a][1:v]overlay=0:h[b];[b][2:v]overlay=0:2.0*h" out_v4.mp4
4个视频2x2方式排列
ffmpeg -i 0.mp4 -i 1.mp4 -i 2.mp4 -i 3.mp4 -filter_complex "[0:v]pad=iw*2:ih*2[a];[a][1:v]overlay=w[b];[b][2:v]overlay=0:h[c];[c][3:v]overlay=w:h" out.mp4
查看每帧的信息
ffprobe -v error -show_frames gemfield.mp4
从pict_type=I可以看出这是个关键帧,然后key_frame=1 表示这是IDR frame,如果key_frame=0表示这是Non-IDR frame。
截取视频中的某一帧
把gemfield.mp4视频的第1分05秒的一帧图像截取出来。
# input seeking
ffmpeg -ss 00:1:05 -i gemfield.mp4 -frames:v 1 out.jpg
# output seeking
ffmpeg -i gemfield.mp4 -ss 00:1:05 -frames:v 1 out1.jpg
参数解释:
-frame:v 1,在video stream上截取1帧。
input seeking使用的是key frames,所以速度很快;而output seeking是逐帧decode,直到1分05秒,所以速度很慢。
重要说明:
ffmpeg截取视频帧有2种 seeking 方式,对应有2种 coding 模式:transcoding 和 stream copying(ffmpeg -c copy)。
transcoding 模式:需要 decoding + encoding 的模式,即先 decoding 再encoding。
stream copying 模式:不需要decoding + encoding的模式,由命令行选项-codec加上参数copy来指定(-c:v copy )。在这种模式下,ffmpeg在video stream上就会忽略 decoding 和 encoding步骤。
查看视频总帧数
ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 gemfield.mp4
查看 key frame 帧数
ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 -skip_frame nokey gemfield.mp4
查看 key frame 所在的时间
ffprobe -v error -skip_frame nokey -select_streams v:0 -show_entries frame=pkt_pts_time -of csv=print_section=0 gemfield.mp4
查看 key frame 分布的情况
ffprobe -v error -show_frames gemfield.mp4 | grep pict_type
查看 key frame 所在的帧数
ffprobe -v error -select_streams v -show_frames -show_entries frame=pict_type -of csv gemfield.mp4 | grep -n I | cut -d ':' -f 1
重新设置 key frame interval
ffmpeg -i gemfield.mp4 -vcodec libx264 -x264-params keyint=1:scenecut=0 -acodec copy out.mp4
查看视频波特率
ffprobe -v error -select_streams v:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 gemfield.mp4
ffmpeg -f image2 -i 'in%6d.jpg' -vcodec libx264 -r 25 -b 200k test.mp4
参数解释:
-r 25 表示每秒播放25帧
-b 200k 指定码率为200k
图片的文件名为"in000000.jpg",从0开始依次递增。
不规则图片名称转视频。
不规则图片名称合成视频文件。
ffmpeg -framerate 10 -pattern_type glob -i '*.jpg' out.mp4
cat *.png | ffmpeg -f image2pipe -i - output.mp4
参数解释:
-framerate 10:视频帧率
-pattern_type glob:Glob pattern 模糊匹配
-f image2pipe:图像管道,模糊匹配得到图片名称
不规则图片名称合成视频文件。
def getTpyeFile(filelist, type):
res = []
for item in filelist:
name, suf = os.path.splitext(item) # 文件名,后缀
if suf == type:
res.append(item)
return res
pwd = os.getcwd() # 返回当前目录的绝对路径
dirs = os.listdir() # 当前目录下所有的文件名组成的数组
typefiles = getTpyeFile(dirs, '.jpg')
for i in range(0,len(typefiles)):
os.rename(typefiles[i],"./%d.jpg" % (i)) #将文件以数字规则命令
ffmpeg -f concat -i files.txt output.mp4
webp转换成jpg
ffmpeg -i in.webp out.jpg
webp转换成png
ffmpeg -i in.webp out.png
jpg转换成png
ffmpeg -i in.jpg out.png
jpg转换成webp
ffmpeg -i in.jpg out.webp
png转换成webp
ffmpeg -i in.png out.webp
png转换成jpg
ffmpeg -i in.png out.jpg
文章浏览阅读719次。pg12新特性,max_wal_senders从max_connections分离_max_wal_senders
文章浏览阅读327次。Apache JMeter是Apache组织开发的基于Java的压力测试工具。JMeter可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。_jmeter.bat
文章浏览阅读724次。转载:http://csrd.aliapp.com/?p=671#more-671由于数据量的巨大,大部分Web应用都需要部署很多个数据库实例。这样,有些用户操作就可能需要去修改多个数据库实例中的数据。传统的解决方法是使用分布式事务保证数据的全局一致性,经典的方法是使用两阶段提交协议。长期以来,分布式事务提供的优雅的全局ACID保证麻醉了应用开发者的心灵,很多人都不敢越雷池一步,想像没有分布式事务的_消息队列和事务
文章浏览阅读3.2w次,点赞16次,收藏70次。1.在没有引入之前,import jieba[显示:No module named 'jieba']2.下载第三方库到自己的电脑,譬如jieba(官方下载地址): https://pypi.org/project/jieba/3.而后通过cmd运行,参考如下:参考网址:https://blog.csdn.net/sanqima/article/details/50965439..._import jieba
文章浏览阅读277次。python3环境变量配置:1.python安装包路径添加到path 2.python安装包里的Scripts路径添加到path(不配这个pip3工具用不了)。Windows下pip和pip3的区别:pip安装库会默认安装到python2-x/site-packages下面,pip3安装库会默认安装到python3-x/site-packages下,如果电脑只安装了python3,那么不管用pi..._日常学习笔记总结示范csdn博客
文章浏览阅读75次。雪碧图即CSS Sprite,也有人叫它CSS精灵,是一种CSS图像合并技术,其作用是:1、减少加载网页图片时对服务器的请求次数;2、提高页面的加载速度;3、减少鼠标滑过的一些bug;4、解决网页设计师在图片命名上的困扰;5、方便更换风格。本文操作环境:Dell G3电脑、Windows7系统。css雪碧图即CSS Sprite,也有人叫它CSS精灵,是一种CSS图像合并技术,该方法是将小图标和背...
文章浏览阅读1.3k次。来源:华为2020年9月24日,在HUAWEI CONNECT 2020期间,华为全面阐述全场景智能联接解决方案,从技术、网络、行业三个层面打造泛在千兆、确定性体验和超自动化的智能联接,..._hc2020 汪涛 全场景智能联接 全文
文章浏览阅读1.2k次。一、匹配目标FullBodyBipedIK1、作用:实现将身体某部位,匹配到某位置。比如手持枪 Idle 动画,原先动画手没有握到枪托,现在我们通过该脚本,使手匹配到枪托位置。2、原动画:原动画手和枪匹配的太好了QAQ,我们就把枪旋转一下吧,忽略右手,做下左手匹配到当前枪的位置。3、实现步骤人物添加 FullBodyBipedIK 。a、在左手要放在武器上的位置,(枪物体下面)创建一个空物体。b、将 FullBodyBipedIK的 左手权重调为1,将空物.._finalik pole
文章浏览阅读325次。真的是气死我了,数据脱敏你都不知道吗?_手机号码、身份证号码等敏感数据,如何处理
文章浏览阅读1.3w次。首先点开Problems栏,查看问题列表。在控制台中点开“Problems”,查看里面的错误,如果是多个项目,可以将其他项目暂时关闭。如果控制台没有Problems可以通过windows--show打开对话框。清理所有的错误信息。对错误先进性清理掉,因为可能有其他项目工程影响,所以清理所有的错误信息,在错误列表上右键--clear all更新错误信息,方便对问题进行定位。重新刷新项目,更新错误信息..._错误: 找不到或无法加载主类 com.lecshop.customerapplication
文章浏览阅读1.2k次。ThinkPHP6 $this->success()、error() 跳转功能_tp6 $this->success
文章浏览阅读402次。Play 2.3.8 -Ebean翻开博客看到之前已经踩过这个坑,上次比较模糊的方式解决了了这个问题,(删除了一些没有使用Model提供的方法的 @entity注解,现在看来那种方法是不可以学的)这次通过查看一些资料,发现 Play在执行 Prod模式的时候,会对每个配置文件中(至少application.conf)数据源的配置做检测,比如你有多个配置文件,即使你线上模式不使用,也..._hibernate has not been enhanced