ffmpeg 裁剪视频的几种方式

2,390 阅读2分钟

使用-ss设置起始时间

格式为HH:MM:SS.MILLISECONDS或者秒数

设置结束时间

-to参数

设置的的endTime, 格式为 HH:MM:SS.MILLISECONDS或者秒数

例如

ffmpege -ss 20 -to 80 -i inputVideo.mp4
ffmpege -ss 01:02:03 -to 02:02:03 -i inputVideo.mp4

-t参数

设置持续时间,单位为s

例如

ffmpege -ss 01:02:03 -t 80 -i inputVideo.mp4

-to -t 同时设置,以-t为准

方法一:re-encoding形式裁剪视频【处理速度慢】

ffmpeg -ss 00:03 -to 00:08  -i inputVideo.mp4 -threads 2 -c:v libx264 -crf 30 trim_opseek_encode.mp4

参数说明

-c:v指定视频的编码格式,若不指定也会以Re-Encoding形式裁剪视频

-crf ****CRF质量更改分辨率

-ss ****指定开始时间

-to ****指定结束时间,不指定时默认为视频结束时间

-therads指定调用的cpu核数,避免ffmpeg将cpu占满,可根据机器实际情况配置

备注

-ss-to 的位置不同代表的意义也不一样

放在-i前代表对输入视频的参数指定

放在-i后代表对输出视频的参数指定

如果我们需要一个更精确的时间,我们可以手动添加关键帧开始和结束的时间

ffmpeg -i my_video.mp4 -force_key_frames 00:00:15,00:00:25 clip.mp4

方法二:以流复制方式裁剪视频【处理速度快】

./ffmpeg -ss 00:17:24  -to 02:19:31 -i inputVideo.mp4 -threads 2 -c:v copy -c:a copy outputVideo.mp4

参数说明

-c:v ****copy 指定以copy方式处理视频流

-c:a ****copy 指定以copy方式处理音频流

-ss ****指定开始时间

-to ****指定结束时间,不指定时默认为视频结束时间

-therads指定调用的cpu核数,避免ffmpeg将cpu占满,可根据机器实际情况配置

处理结果

frame=222065 fps=14206 q=-1.0 Lsize= 1332873kB time=02:02:07.61 bitrate=1490.1kbits/s speed= 469x
video:1239527kB audio:83530kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.741900%

可以看到处理速度speed为469x,还是非常快的

方法三:使用trim过滤命令处理【适用于小视频,1min以内】

ffmpeg -i my_video -vf trim=10:25,setpts=PTS-STARTPTS clip.mp4

参数说明

-vf ****指定视频过滤

trim ****10:25代表 裁切00:00:10~00:00:25这个范围

setpts ****为剪辑中的每一帧设置,表示时间戳,PTS-STARTPTS确保剪辑不会延迟或停止,并且帧是相对于setpts值(即0)进行同步的