FFmpeg 常用命令整理。
查看视频的时长/大小等基本信息
ffmpeg -i d:/a.mp4
可以根据输出信息获得该视频的时长、分辨率信息。
将图片和音频合并为一个视频文件
ffmpeg -r 15 -f image2 -loop 1 -i d:/zzs/mp3/1.jpg -i d:/zzs/mp3/1.mp3 -s 720x480 -pix_fmt yuvj420p -t 567 -vcodec libx264 -y d:/zzs/mp3/1.mp4
ffmpeg -r 15 -f image2 -loop 1 -i d:/zzs/pp/2/index.jpg -i d:/zzs/pp/2/index.mp3 -s 720x480 -pix_fmt yuvj420p -t 567 -vcodec libx264 -y d:/zzs/pp/2/index.mp4
-loop 是循环
-s 是分辨率
-t 是输出的视频时长
将视频转化为m3u8格式
ffmpeg -i d:/a.mp4 -c:v libx264 -c:a aac -strict -2 -f hls d:/a.m3u8
将视频转化为flv格式
ffmpeg -i d:/a.mp4 -y -ab 32 -ar 22050 -qscale 10 -s 640*480 -r 15 d:/a.flv
-qscale 为视频输出质量,值越小文件越大质量越高
-s 为输出文件的分辨率大小
-r 播放帧数
对视频抓取截图
ffmpeg -i d:/a.mp4 -y -f image2 -ss 5 -t 0.001 -s 350x240 d:/aa.jpg
-f 输出格式
-t 截取时长
-ss 开始时间
通过ffmpeg对桌面进行截图抓取
ffmpeg -f gdigrab -i desktop d:/desk.png
使用gdigrab 来抓取
通过ffmpeg抓取桌面某位置的截图
ffmpeg -f gdigrab -framerate 5 -offset_x 10 -offset_y 20 -video_size 640x480 -i desktop d:/desktop.png
从屏幕(x:10,y:20)处开始截图抓取 640x480的屏幕
从视频中生成gif图
ffmpeg -i d:/a.mp4 -t 10 -s 320x240 -pix_fmt rgb24 d:/a.gif
-t 抓取时间
-s 大小
-ss 开始时间
通过ffmpeg 对系统的摄像头进行抓图
ffmpeg -f dshow -i video="Lenovo EasyCamera" d:/abc.png
这里的video ="Lenovo EasyCamera" 是系统使用的摄像头的名称,可以通过以下命令查看(中文会乱码):
ffmpeg -list_devices true -f dshow -i dummy
对视频进行加密切片
ffmpeg -i C:\Users\Administrator\Desktop\hls-enc\test.mp4 -vf "movie=post.png [watermark]; [in][watermark] overlay=10:10 [out]" -hls_time 5 -hls_key_info_file C:\Users\Administrator\Desktop\hls-enc\aa.keyinfo -hls_list_size 0 -f hls C:\Users\Administrator\Desktop\hls-enc\test.m3u8
注意:加水印是通过-vf来增加的,但是后边的图片地址 movie对应的地址不能写盘符?
//右下角
overlay=main_w-overlay_w-10:main_h-overlay_h-10
//为左上角
overlay=10:10
//为右上角
overlay=main_w-overlay_w-10:10
//为左下角
overlay=10:main_h-overlay_h-10
//含义
main_w,main_h : The main input width and height.
overlay_w,overlay_h:The overlay input width and height.
视频剪切
ffmpeg -ss 0:1:30 -t 0:0:20 -i input.mp4 -vcodec copy -acodec copy output.mp4
-ss 开始时间
-t 持续时间
从视频中抓图
ffmpeg -i input.mp4 -r 1 -f image2 image-%3d.jpeg
-r 提取图像的频率
去除水印
ffmpeg -i 源视频路径 -filter_complex "delogo=x=去除水印的x坐标:y=去除水印的y坐标:w=去除的水印宽度:h=去除的水印高度:show=模糊边框的宽度" 目标视频路径
show=0水印位置没有边框,show=1水印位置是一个绿色框覆盖
若有多个静态水印,位置固定,可参考以下:
ffmpeg -i 1.mp4 -vf "delogo=x=%s:y=%s:w=200:h=50:show=0,delogo=x=%s:y=%s:w=200:h=50:show=0" -c:a copy 2.mp4
视频翻转
垂直旋转:
ffmpeg -i 原视频.mp4 -vf vflip -y 左右翻转.mp4
水平左右翻转:
ffmpeg -i 原视频.mp4 -vf hflip -y 左右翻转.mp4
画面顺时针旋转90度:
ffmpeg -i 原视频.mp4 -vf transpose=1 顺90度.mp4
画面逆时针旋转90°:
ffmpeg -i 原视频.mp4 -vf transpose=2 逆90度.mp4
图片的处理方式与视频一致,将对应类型切换为图片即可。
ffmpeg -i 原图.png -vf vflip -y 上下翻转.png
ffmpeg -i 原图.png -vf hflip -y 左右翻转.png
ffmpeg -i 原图.png -vf transpose=1 顺90度.png
ffmpeg -i 原图.png -vf transpose=2 逆90度.png
视频加边框
ffmpeg -i input.mp4 -y -q:v 1 -vf drawbox=x=0:y=0:w=iw:h=ih:c=yellow:t=10 out.mp4
视频加字幕
软字幕:
ffmpeg -i input.mp4 -i input.srt -c copy output.mkv
//添加软字幕的原理和流程就跟给视频添加音频一样,这个过程不需要重新编解码,所以速度非常快。
//软字幕只有部分容器格式比如(mkv)才支持,MP4/MOV等不支持,而且也只有部分播放器支持软字幕或者外挂字幕(如VLC播放器)
硬字幕:
ffmpeg -i input.mkv -vf subtitles=input.srt out.mp4
//ffmpeg最终都会将字幕格式先转换成ass字幕流再将字幕嵌入到视频帧中,这个过程需要重新编解码,所以速度比较慢。
字幕格式转换
ffmpeg -i test_1280x720_3.srt test_1280x720_3_1.vtt
ffmpeg -i test_1280x720_3.srt test_1280x720_3_1.ass
视频叠加
ffmpeg叠加2个视频实现一大一小布局,可指定开始时间,生成视频的总时长:
ffmpeg -ss 00:00:20 -i test3.mp4 -i test2.mp4 -filter_complex "[1:v]scale=320:240[v1];[0:v][v1]overlay=10:10" -s 640x480 -c:v libx264 -preset ultrafast -r 20 -b:v 200k -t 1200 output.mp4
-ss 00:00:20 test3.mp4开始时间
320:240为小视频的宽高
10:10小视频左上角坐标
-t 1200 视频总时长(s)
以上都是简单的几个使用命令,如果想深入学习FFMPEG,那么请看这里。
https://blog.csdn.net/leixiaohua1020/article/details/15811977/.
本文经授权后发布,本文观点不代表立场,文章出自:https://chrunlee.cn/article/ffmpeg-cmd-store.html