技术标签: 其他
1、转码:
1. ffmpeg -i 1.mp4 -vcodec h264 "output.mp4"
2. ffmpeg -i [input.file] -c:v libx264 output.mp4
2、压缩:
1. ffmpeg -i input.mp4 -r 10 -b:a 32k output.mp4
2. ffmpeg -i "1.wav" -b:a 64k -acodec mp3 -ar 44100 -ac 1 "1.mp3"
命令参数解释: -i "1.wav"
表示输入,后面的文件名必须要用双引号; -b:a 64k
表示音频的码率为64kb/s,即8kB/s; -acodec mp3
表示设定声音编解码器为mp3; -ar 44100
表示设定采样率为44100; "1.mp3"
表示输出保存的文件名。
3、移动moov:
ffmpeg -i input.mp4 -movflags faststart -acodec copy -vcodec copy output.mp4
批量处理:
for /R %v IN (*.mp4) do ( ffmpeg -i %v -vcodec h264 "path\%~nv.mp4")
也可以写一个脚本放到待转码视频的目录中,脚本代码如下,变量v前面比命令行多一个“%”:
for /R %%v IN (*.mp4) do ( ffmpeg -i %%v -vcodec h264 "path\%%~nv.mp4")
3.1 改变分辨率
ffmpeg -i input.mp4 -vf scale=480:-1 output.mp4
4、视频剪辑:
ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi
-ss
代表开始时间 -t
持续时间
5、音频剪辑:
ffmpeg -i source_mp3.mp3 -ss 00:01:12 -t 00:01:42 -acodec copy output_mp3.mp3
6、分离视频流:
ffmpeg -i input_file -vcodec copy -an output_file_video
将视频拿出来,不包含音频
7、分离音频流:
ffmpeg -i input_file -acodec copy -vn output_file_audio
将音频拿出来,不包含视频
8、改变视频速率:
ffmpeg -i input.mkv -filter:v "setpts=0.5*PTS" output.mkv
0.5代表变为原来2倍速度,播放一段视频需要的时间为原来0.5倍。所以当这个值>1时就是减慢视频播放速度。
改变视频中音频sulvffmpeg -i input.mkv -filter:a "atempo=2.0" -vn output.mkv
为原来2倍,这个值在0.5到2之间,可以使用"atempo=2.0,atempo=2.0"
这种串联的形式增加播放速率到4倍
9、获取缩略图:
从指定时间开始,连续对1秒钟的视频进行截图:
ffmpeg -y -i input.mp4 -ss 00:05:25 -t 00:00:01 output_%3d.jpg
只截取一帧:
ffmpeg -ss 01:03:05 -i input -vframes 1 -q:v 2 output.jpg
-vframes 1
指定只截取一帧,-q:v 2
表示输出的图片质量,一般是1到5之间(1 为质量最高)。
10. 覆盖(画中画)
覆盖, 语法:overlay[=x[:y], 所有的参数都是可选,默认值都是0
举例
Logo在左上角: ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay pair1.mp4
右上角: ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay=W-w pair2.mp4
左下角: ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay=0:H-h pair2.mp4
右下角: ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay=W-w:H-h pair2.mp4
删除logo, 语法:-vf delogo=x:y:w:h[:t[:show]]
x:y 离左上角的坐标
w:h logo的宽和高
t: 矩形边缘的厚度默认值4
show:若设置为1有一个绿色的矩形,默认值0.
ffplay -i jidu.mp4 -vf delogo=50:51:60:60:100:0
删除水印:ffmpeg -i 1.png -strict -2 -vf delogo=230:492:165:103:0 "new.png"
添加图片水印: ffmpeg -i inputfile -vf "movie=masklogo,scale= 60: 30[watermask]; [in] [watermask] overlay=30:10 [out]" outfile
参数说明:
marklogo:添加的水印图片;
scale:水印大小,水印长度*水印的高度;
overlay:水印的位置,距离屏幕左侧的距离*距离屏幕上侧的距离;mainW主视频宽度, mainH主视频高度,overlayW水印宽度,overlayH水印高度
11. 添加文本
语法:drawtext=fontfile=font_f:text=text1[:p3=v3[:p4=v4[…]]]
常用的参数值
x:离左上角的横坐标 y: 离左上角的纵坐标 fontcolor:字体颜色 fontsize:字体大小 text:文本内容
textfile:文本文件 t:时间戳,单位秒 n:帧数开始位置为0 draw/enable:控制文件显示,若值为0不显示,1显示,可以使用函数
简单用法
1、在左上角添加Welcome文字
ffplay -f lavfi -i color=c=white -vf drawtext=fontfile=arial.ttf:text=Welcom
2、在中央添加Good day
ffplay -f lavfi -i color=c=white -vf drawtext="fontfile=arial.ttf:text='Goodday':x=(w-tw)/2:y=(h-th)/2"
3、设置字体颜色和大小
ffplay -f lavfi -i color=c=white -vf drawtext="fontfile=arial.ttf:text='Happy Holidays':x=(w-tw)/2:y=(h-th)/2:fontcolor=green:fontsize=30"
动态文本
用 t (时间秒)变量实现动态文本
1、顶部水平滚动
ffplay -i jidu.mp4 -vf drawtext="fontfile=arial.ttf:text='Dynamic RTL text':x=w-t*50:fontcolor=darkorange:fontsize=30"
2、底部水平滚动
ffplay -i jidu.mp4 -vf drawtext="fontfile=arial.ttf:textfile=textfile.txt:x=w-t*50:y=h-th:fontcolor=darkorange:fontsize=30"
3、垂直从下往上滚动
ffplay jidu.mp4 -vf drawtext="textfile=textfile:fontfile=arial.ttf:x=(w-tw)/2:y=h-t*100:fontcolor=white:fontsize=30“
4.实现右上角显示当前时间?
动态文本
在右上角显示当前时间 localtime
ffplay jidu.mp4 -vf drawtext="fontfile=arial.ttf:x=w-tw:fontcolor=white:fontsize=30:text='%{localtime\:%H\\\:%M\\\:%S}'“
每隔3秒显示一次当前时间
ffplay jidu.mp4 -vf drawtext="fontfile=arial.ttf:x=w-tw:fontcolor=white:fontsize=30:text='%{localtime\:%H\\\:%M\\\:%S}':enable=lt(mod(t\,3)\,1)"
12. 图片处理
图片支持: FFmpeg支持绝大多数图片处理, 除LJPEG(无损JPEG)之外,其他都能被解码,除了EXR,PIC,PTX之外,所有的都能被编码。
截取一张图片使用 –ss(seek from start)参数: ffmpeg -ss 01:23:45 -i jidu.mp4 image.jpg
从视频中生成GIF图片: ffmpeg -i jidu.mp4 -t 10 -pix_fmt rgb24 jidu.gif
转换视频为图片(每帧一张图): ffmpeg -i clip.avi frame%4d.jpg
图片转换为视频: ffmpeg -f image2 -i img%4d.jpg -r 25 video.mp4
比如:图片名称全部是自然数, 001, 002, 003这样的3位数字,数字一定要是连续的否则会中断。文件存放在D:\pic下面
ffmpeg -f image2 -i D:\pic\%03d.jpg my.mp4
指定编码格式:
ffmpeg -f image2 -i D:\pic\%03d.jpg -vcodec libx264 my.mp4
指定输出帧率:
ffmpeg -f image2 -i D:\pic\%03d.jpg -vcodec libx264 -r 10 my.mp4
指定码率:
ffmpeg -f image2 -i D:\pic\%03d.jpg -vcodec libx264 -r 10 -b 200k my.mp4
裁剪: ffmpeg -f lavfi -i rgbtestsrc -vf crop=150:150 crop_rg.png
填充: ffmpeg -f lavfi -i smptebars -vf pad=360:280:20:20:orange pad_smpte.jpg
翻转: ffmpeg -i orange.jpg -vf hflip orange_hfilp.jpg
ffmpeg -i orange.jpg -vf vflip orange_vfilp.jpg
旋转: ffmpeg -i image.png -vf transpose=1 image_rotated.png
覆盖: ffmpeg -f lavfi -i rgbtestsrc -s 400x300 rgb .png
ffmpeg -f lavfi -i smptebars smpte.png
ffmpeg -i rgb .png -i smpte.png -filter_complex overlay= (W-w)/2:(H-h)/2 rgb_smpte.png
13.其他高级技巧
屏幕录像
显示设备名称: ffmpeg -list_devices 1 -f dshow -i dummy
调用摄像头: ffplay -f dshow -i video="Integrated Camera"
保存为文件: ffmpeg -y -f dshow -s 320x240 -r 25 -i video="Integrated Camera" -b:v 800K -vcodec mpeg4 new.mp4
添加字幕subtitles: 语法 –vf subtitles=file, ffmpeg -i jidu.mp4 -vf subtitles=rgb.srt output.mp4
视频颤抖: ffplay –i jidu.mp4 -vf crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)
色彩平衡: ffplay -i jidu.mp4 -vf curves=vintage
色彩变幻: fplay -i jidu.mp4 -vf hue="H=2*PI*t: s=sin(2*PI*t)+1“
彩色转换黑白: ffplay -i jidu.mp4 -vf lutyuv="u=128:v=128"
设置音频视频播放速度:
3倍视频播放视频: ffplay -i jidu.mp4 -vf setpts=PTS/3
?速度播放视频: ffplay -i jidu.mp4 -vf setpts=PTS/(3/4)
2倍速度播放音频: ffplay -i speech.mp3 -af atempo=2
截图
每隔一秒截一张图: ffmpeg -i input.flv -f image2 -vf fps=fps=1 out%d.png
每隔20秒截一张图: ffmpeg -i input.flv -f image2 -vf fps=fps=1/20 out%d.png
多张截图合并到一个文件里(2x3) ?每隔一千帧(秒数=1000/fps25)即40s截一张图
ffmpeg? -i jidu.mp4 -frames 3 -vf "select=not(mod(n\,1000)),scale=320:240,tile=2x3" out.png
马赛克视频
用多个输入文件创建一个马赛克视频:
ffmpeg -i jidu.mp4 -i jidu.flv -i "Day By Day SBS.mp4" -i "Dangerous.mp4" -filter_complex "nullsrc=size=640x480 [base]; [0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft]; [1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft]; [3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright]; [base][upperleft] overlay=shortest=1 [tmp1]; [tmp1][upperright] overlay=shortest=1:x=320 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3]; [tmp3][lowerright] overlay=shortest=1:x=320:y=240" -c:v libx264 output.mkv
Logo动态移动
2秒后logo从左到右移动: ffplay -i jidu.mp4 -vf movie=logo.png[logo];[in][logo]overlay=x='if(gte(t\,2)\,((t-2)*80)-w\,NAN)':y=0
2秒后logo从左到右移动后停止在左上角: ffplay -i jidu.mp4 -vf movie=logo.png[logo];[in][logo]overlay=x='if(gte(((t-2)*80)-w\,W)\,0\,((t-2)*80)-w)':y=0
每隔10秒交替出现logo: ffmpeg -y -t 60 -i jidu.mp4 -i logo.png -i logo2.png -filter_complex "overlay=x=if(lt(mod(t\,20)\,10)\,10\,NAN ):y=10,overlay=x=if(gt(mod(t\,20)\,10)\,W-w-10\,NAN ) :y=10" overlay.mp4
FFMpeg合并视频方法
先创建一个文本文件filelist.txt,然后用for循环输出以下内容:
file 'input1.mkv'
file 'input2.mkv'
file 'input3.mkv'
然后:
ffmpeg -f concat -i filelist.txt -c copy output.mkv
注意:使用 FFmpeg concat 分离器时,如果文件名有奇怪的字符,要在 filelist.txt 中转义.
FFmpeg对视频进行切片
切本地文件命令:ffmpeg -i test.ts -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 10 output%03d.ts
切网络地址命令:ffmpeg -i rtmp://127.0.0.1/myapp/test1 -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 10 output%03d.ts
-------------------------------------------MP4Box------------------------------------------
mp4box -dash 5000 -rap -no-frags-default -profile onDemand source.mp4#video source.mp4#audio
处理后可用dash.js播放
分离音频:
mp4box -add input.mp4#audio -new output.aac
分离视频:
mp4box -add input.mp4#video -new output.mp4
合并音视频:
mp4box -add input.mp4 -add input.m4a output.mp4
合并视频:
mp4box -cat input1.mp4 -cat input2.mp4 -new output.mp4
更过MP4Box用法查看官方手册(英文)MP4Box
通过谷歌翻译后(中文)中文翻译
默认环境为windows
第一种方法:直接调用exec 需开启相关权限
下载ffmpeg.exe放在网站根目录,实测不用配置环境变量即可使用
一个截取视频封面的例子
$from = "./Public/media/movie/1.mp4";//视频目录
$name = "1.png";//图片名称
$to = "./Public/media/pic/";//图片存放路径
$str = "ffmpeg -i " . $from . " -y -f mjpeg -ss 10 -t 1 -s 250x160 " . $to . $name;//ffmpeg命令
exec($str, $output);//执行命令
第二种方法:调用PHP-FFMpeg类
文章浏览阅读908次。转载:https://blog.csdn.net/qq_42449963/article/details/105232795_pom.xml servlet apach
文章浏览阅读1.5k次,点赞4次,收藏31次。一、信贷风控简介 信贷风控是数据挖掘算法最成功的应用之一,这在于金融信贷行业的数据量很充足,需求场景清晰及丰富。信贷风控简单来说就是判断一个人借了钱后面(如下个月的还款日)会不会按期还钱。更专业来说,信贷风控是还款能力及还款意愿的综合考量,根据这预先的判断为信任依据进行放贷,以此大大提高了金融业务效率。与其他机器学习的工业场景不同,金融是极其厌恶风险的领域,其特殊性在于非..._建立一个量化风险预测模型。这是某金融机构的普惠贷款以及不良表现的数据
文章浏览阅读98次。在Python中,sorted()函数是一个内置函数。它可以用来对各种类型的数据集合进行排序。sorted()函数根据给定的键或值对数据进行排序,并返回排序后的结果。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。AI职场汇报智能办公文案写作效率提升教程 专注于AI+职场+办公方向。下图是课程的整体。_python的sorted如何提高比较精度
文章浏览阅读2.6w次,点赞3次,收藏12次。前言最近再看犀牛书《JavaScript权威指南》,当中的小例子我发现自己没法调试它zzz,于是就想到把它嵌入到浏览器里面,主要是使用的油猴再加上自己的js脚本环境tampermonkey v4.6 油猴 ubuntu 18 chrome油猴添加脚本 点击这边的添加脚本,然后在界面的脚本页面中输入自己的脚本代码,就可以了。测试代码// ==UserSc..._油猴能篡改js
文章浏览阅读3.9k次。点击下载来源:我的朋友佩德罗(My Friend Pedro)免安装绿色中文破解版我的朋友佩德罗(My Friend Pedro)是由Devolver Digital发行的一款款新颖有趣的第三人称射击游戏,玩家在游戏中获得更加强大的实力,轻松的击杀敌人。游戏开始,你会在香蕉的指引下开始杀手生涯,使用匕首、手枪、机枪等武器,通过跳跃、翻滚、减缓时间等动作,躲避敌人的射击,并将其消灭。整个游戏连贯..._我的朋友佩德罗下载
文章浏览阅读584次。在上一篇文章中 ,我谈到了IoT(物联网)以及将物理对象(“物”)连接到Internet。 我已经讨论了Mongoose OS (一种用于IoT的开源操作系统)如何使新手和专业开发人员都能轻松地使用JavaScript编程微控制器。 您可能想知道为什么使用JavaScript,以及JavaScript引擎如何装入微控制器的有限内存中。 有许多旨在将脚本编写在微控制器上的项目,其中包括其他J..._mjs javascript
文章浏览阅读1.9k次,点赞2次,收藏4次。前言:本文作者@jasmine,是我们“AI产品经理大本营”成员,下面是她分享的第4篇文章,欢迎更多有兴趣“主动输出”的朋友们一起加入、共同进步:) 最近整理了CV方向的一些产品基础知识,我上一篇文章《看AI产品经理如何介绍“计算机视觉”(基于实战经验和案例)》算是这个系列的第一篇;本文是本系列下的第二篇,主要针对人脸识别进行梳理。后续还会有多目标跟踪、OCR等方向的内容。希望大家能从这个系列收获_关于人脸识别,qa质检
文章浏览阅读1.3k次。var result = ['1','2','3'];$.ajax({type: "GET",url:"http://xxxxxxxx",data:{ groups:result, },dataType:'json', success: function (Json) { console.log("success")
文章浏览阅读322次。bitmap算法 --位图算法位图不是像素图片,而是内存中连续的二进制位(bit),用于对大量整型数据做去重和查询例题:给定一块10bit的内存空间,想要依次插入整型数4,2,1,3解法:10bit每一位的的值为0,当插入4时,此时下标 4 的位置,bit值置为1,剩下三个数类似。。。应用:例:一个用户对应多个标签解法:思路逆转。一个标签对应多个用户1、建立用户名和用户ID的映射..._位图算法的实验思路
文章浏览阅读5.8k次,点赞5次,收藏32次。librealsense2及pyrealsense2安装环境:重新安装的Ubuntu16.04,什么都没有 emmmmm1.安装包官方文档:https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md(1)sudo apt-key adv --keyserver keys.gnupg..._ubuntu安装librealsense2
文章浏览阅读2.3w次,点赞2次,收藏3次。可能原因:对BigDecimal对象设置了精度,但是没有设置取舍方式,会报错java.lang.ArithmeticException: Rounding necessary。@Testpublic void testDecimal() { String str = "3.33333"; BigDecimal decimal = new BigDecimal(str); try {..._java.lang.arithmeticexception: rounding necessary
文章浏览阅读1.4k次,点赞3次,收藏11次。百度自动驾驶部门注意力机制在视觉重定位任务中的应用,端到端网络,可用于明显外观变化的场景,cm级精度,优于基于激光雷达的定位方法。本文使用CNN以及注意力机制训练描述子与关键点,与数据库图像做匹配然后解算相机位姿。构建特征金字塔,使用全卷积网络 独立 提取密集特征。构建定位地图: attentive keypoints + features + 3D coordinates, 3D 坐标来自于激光雷达根据先验位姿找到附近的三维点,在先验位姿附近多次采样,根据这些位姿将三维点投影到当前图像中进._predicted iddt per position