FFmpeg命令全解析:三步完成视频合并、精准裁剪、英伟达显卡加速

一、裁剪

常规裁剪

根据时长裁剪,常规的裁剪
-c copy 表示直接复制流(不重新编码),速度极快,但要求切割时间必须是关键帧。否则裁剪下来的画面开头/结尾 会模糊花屏

ffmpeg -i input.mp4 -ss 00:00:30 -to 00:01:00 -c copy output.mp4

精确裁剪

(重新编码确保精度)

-c:v libx264 需要重新编码,时间上会比较耗时

ffmpeg -i input.mp4 -ss 00:00:30 -t 30 -c:v libx264 -c:a aac output.mp4

批量裁剪

遇到大量的精确裁剪,单个单个裁剪,明显比较耗时,需要更高效命令。对同一个源文件,裁剪出不同时间段的视频分段,耗时跟单个视频裁剪差不多,但不建议,一下搞太多,容易导致系统资源爆满 ,通常5~10个即可

ffmpeg -y -i source.mp4 -threads 10 -filter_complex [0:v]trim=start=0.00:end=6.42,setpts=PTS-STARTPTS[v0];[0:a]atrim=start=0.00:end=6.42,asetpts=PTS-STARTPTS[a0];[0:v]trim=start=6.42:end=13.02,setpts=PTS-STARTPTS[v1];[0:a]atrim=start=6.42:end=13.02,asetpts=PTS-STARTPTS[a1];[0:v]trim=start=13.02:end=14.05,setpts=PTS-STARTPTS[v2];[0:a]atrim=start=13.02:end=14.05,asetpts=PTS-STARTPTS[a2]

-map [v0] -map [a0] -c:v libx264 -preset fast -c:a aac source_0_6420.ts -map [v1] -map [a1] -c:v libx264 -preset fast -c:a aac source_6420_13020.mp4 -map [v2] -map [a2] -c:v libx264 -preset fast -c:a aac source_13020_14050.mp4

显卡加速

在这基础上,还能继续提速,使用英伟达\AMD显卡继续加速

英伟达加速

-c:v libx264 换成 -c:v h264_nvenc

-preset fast 换成 -preset p6

再追加 -cq 26
ffmpeg -y -i source.mp4 -threads 10 -filter_complex [0:v]trim=start=0.00:end=6.42,setpts=PTS-STARTPTS[v0];[0:a]atrim=start=0.00:end=6.42,asetpts=PTS-STARTPTS[a0];[0:v]trim=start=6.42:end=13.02,setpts=PTS-STARTPTS[v1];[0:a]atrim=start=6.42:end=13.02,asetpts=PTS-STARTPTS[a1];[0:v]trim=start=13.02:end=14.05,setpts=PTS-STARTPTS[v2];[0:a]atrim=start=13.02:end=14.05,asetpts=PTS-STARTPTS[a2] -map [v0] -map [a0] -c:v h264_nvenc -preset p6 -cq 26 -c:a aac source_0_6420.ts -map [v1] -map [a1] -c:v h264_nvenc -preset p6 -cq 26 -c:a aac source_6420_13020.mp4 -map [v2] -map [a2] -c:v h264_nvenc -preset p6 -cq 26 -c:a aac source_13020_14050.mp4
AMD加速

-c:v libx264 换成 -c:v h264_amf

-preset fast 换成 -quality quality

再追加 -rc cqb
ffmpeg -y -i source.mp4 -threads 10 -filter_complex [0:v]trim=start=0.00:end=6.42,setpts=PTS-STARTPTS[v0];[0:a]atrim=start=0.00:end=6.42,asetpts=PTS-STARTPTS[a0];[0:v]trim=start=6.42:end=13.02,setpts=PTS-STARTPTS[v1];[0:a]atrim=start=6.42:end=13.02,asetpts=PTS-STARTPTS[a1];[0:v]trim=start=13.02:end=14.05,setpts=PTS-STARTPTS[v2];[0:a]atrim=start=13.02:end=14.05,asetpts=PTS-STARTPTS[a2] -map [v0] -map [a0] -c:v h264_nvenc -quality quality -rc cqb -c:a aac source_0_6420.ts -map [v1] -map [a1] -c:v h264_nvenc -quality quality -rc cqb -c:a aac source_6420_13020.mp4 -map [v2] -map [a2] -c:v h264_nvenc -quality quality -rc cqb -c:a aac source_13020_14050.mp4

二、合并

常规合并

简单视频合并命令,不大推荐使用

ffmpeg -i "concat:video1.mp4|video2.mp4|video3.mp4" -c copy output.mp4

批量合并

ffmpeg -y -i video1.mp4 -i video2.mp4 -filter_complex [0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][a] -map [v] -map [a] -c:v libx264 -crf 23 -preset fast -threads 10 合并视频.mp4

显卡加速

英伟达

ffmpeg -y -i video1.mp4 -i video2.mp4 -filter_complex [0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][a] -map [v] -map [a] -c:v h264_nvenc -preset p6 -cq 26 -threads 10 合并视频.mp4

AMD

ffmpeg -y -i video1.mp4 -i video2.mp4 -filter_complex [0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][a] -map [v] -map [a] -c:v h264_amf -quality quality -rc cqb -threads 10 合并视频.mp4

相关推荐
GeniuswongAir2 小时前
苹果电脑上启动一个 RTSP 推流,用来做测试
ffmpeg
Benny的老巢5 小时前
n8n工作流通过Execute Command用FFmpeg处理音频,报错 stderr maxBuffer length exceeded的解决方案
ffmpeg·音频合成·n8n·n8n工作流·execute command
七夜zippoe2 天前
Spring Data JPA原理与实战 Repository接口的魔法揭秘
java·ffmpeg·事务·jpa·repository
Benny的老巢2 天前
n8n工作流中FFmpeg 视频截取失败排查:文件路径和参数顺序错误解决方案
chrome·ffmpeg·音视频
RockWang.2 天前
【配置】FFmpeg配置环境ubuntu踩坑记录。
ffmpeg
王者鳜錸3 天前
Java使用FFmpeg获取音频文件时长:完整实现与原理详解
java·开发语言·ffmpeg·音频时长
桃杬3 天前
用现代 C++ 封装 FFmpeg:从摄像头采集到 H.264 编码的完整实践
c++·ffmpeg·h.264
cvcode_study3 天前
FFmpeg 工具基础
ffmpeg
1nv1s1ble3 天前
记录一个`ffmpeg`的`swscale`库crash的例子
ffmpeg
CodeOfCC3 天前
C++ 实现ffmpeg解析hls fmp4 EXT-X-DISCONTINUITY并支持定位
开发语言·c++·ffmpeg·音视频