裁剪视频时间
# 裁剪视频并且重新编码
ffmpeg -ss 0.962 -i input.mp4 -preset slow -to 23.852 -c:v h264_nvenc -preset medium -profile:v high -y output.mp4
# 直接裁剪不进行重新编码(快速剪辑)
ffmpeg -ss 00:19:40 -i input.mp4 -preset slow -to 00:03:30 -c:v copy -c:a copy output.mp4
#裁剪掉末尾n秒可以直接这样写(slow直接写要裁剪掉末尾的秒数),这里加了-an,视频的音频会被去掉,不去掉不加就可以
ffmpeg -i input.mp4 -preset slow (5) -an -c:v h264 -preset medium -profile:v high -y output.mp4
# -ss 开始时间(不填从0秒开始)
# -to 裁剪到的时间(不填裁剪到视频最后)
# -c:v: h264编码器h264_nvenc显卡进行h264编码,copy复制原始数据不重新编码
视频旋转
ffmpeg -i input.mp4 -preset slow -vf transpose=1 -c:v h264 -preset medium -profile:v high -y output.mp4
# transpose 1:旋转90度 2:旋转180度 3:旋转270度
裁剪视频尺寸
ffmpeg -i input.mp4 -preset slow -an -c:v h264 -preset medium -profile:v high -vf crop= iw*0.56 : ih*0.73 : iw*0.07 : ih*0.04 -y output.mp4
# iw *(裁剪完之后视频宽度 / 原视频宽度)
# : ih * (裁剪完之后视频高度 / 原视频高度)
# : iw * (最左边裁剪位置(左边裁剪线)距离原视频左边线长度 / 原视频宽度)
# : ih * (最上边裁剪位置(上边裁剪线)距离原视频上边线的长度 / 原视频高度)
合并视频
# list_path.txt
file 001.ts
file 002.ts
file 003.ts
# shell
ffmpeg -f concat -safe 0 -i list_path.txt -c copy -y output.ts
# 转码成mp4
ffmpeg -i output.ts -preset slow -c:v h264 -preset medium -profile:v high -y new_output.mp4
截取封面
ffmpeg -ss 0 -i input.mp4 -frames:v 1 -y output.jpg
# 指定格式
ffmpeg -ss 0 -i input.mp4 -r 1 -frames:v 1 -an -f mjpeg output.jpg -y
压缩图片
# -q 压缩等级
ffmpeg -i input.jpg -q 10 output.jpg -y
压缩视频
ffmpeg -i .\douyin.mp4 -preset slow -pix_fmt yuv420p -c:v h264 -preset medium -profile:v high -acodec aac -ar 44100 -crf 18 -vf "scale=-1:'min(1280,ih)'" 1280_18.mp4 -y
# 命令行参数-crf 视频质量控制
在优先保证画面质量(也不太在乎转码时间)的情况下,使用-crf参数来控制转码是比较适宜的。这个参数的取值范围为0——51,其中0为无损模式,数值越大,画质越差,生成的文件却越小。从主观上讲,18——28是一个合理的范围。18被认为是视觉无损的(从技术角度上看当然还是有损的),它的输出视频质量和输入视频相当。
-s vga: 指定分辨率, vga 代表 600*480
--修改分辨率 720p
-vf scale=1280:720
-vf scale=1080:-1 修改宽为1080并保持宽高比
# 通过控制比特率来手动降低码率
# ffmpeg -i input.mp4 -preset slow -pix_fmt yuv420p -c:v h264 -preset medium -profile:v high -acodec aac -ar 44100 -b:v 2000k -vf "scale=-1:'min(1280,ih)'" 1280_2000k.mp4 -y
-b:v bitrate:设定视频流的比特率,整数,单位bps。
如果输入分辨率太低,FFmpeg提供了一个巧妙的技巧来防止放大。
ffmpeg -i input.mp4 -vf "scale='min(320,iw)':'min(240,ih)'" output.mp4
在上面的命令行中,执行缩放的最小宽度/高度分别设置为320和240像素。
关于-preset参数
# 编码器预设
-preset ultrafast :编码速度非???,但输出视频质量不高
-preset superfast :编码速度非常快,但输出视频质量比ultrafast略微高一些
-preset veryfast :编码速度比较快,输出视频质量较好
-preset faster :编码速度比较快,输出视频质量比veryfast略微差一些
-preset fast :编码速度适中,输出视频质量较好
-preset medium :编码速度适中,输出视频质量非常好,是默认值
-preset slow :编码速度较慢,但输出视频质量比medium更好
-preset slower :编码速度比slow略微慢一些,但输出视频质量更好
-preset veryslow :编码速度最慢,但输出视频质量最好
关于-profile:v参数
# 编码器配置
baseline:实时通讯
main:流媒体
high 超清视频