FFmpeg 提供了强大的视频剪辑和处理功能,可以精确控制视频的时间范围、片段提取和合并。
视频剪辑
按时间范围剪辑
bash# 从 10 秒开始,剪辑 30 秒 ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:30 -c copy output.mp4 # 从 1 分 30 秒开始,剪辑到 3 分钟 ffmpeg -i input.mp4 -ss 00:01:30 -to 00:03:00 -c copy output.mp4
精确剪辑技巧
使用 -ss 参数时,将其放在 -i 之前可以实现快速定位,但可能不够精确;放在 -i 之后则更精确但速度较慢。
bash# 快速定位(可能不精确) ffmpeg -ss 00:00:10 -i input.mp4 -t 00:00:30 -c copy output.mp4 # 精确定位(速度较慢) ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:30 -c copy output.mp4
视频合并
使用 concat 协议
bash# 创建文件列表 filelist.txt file 'part1.mp4' file 'part2.mp4' file 'part3.mp4' # 合并视频 ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
使用 concat filter
bashffmpeg -i part1.mp4 -i part2.mp4 -i part3.mp4 \ -filter_complex "[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[outv][outa]" \ -map "[outv]" -map "[outa]" output.mp4
视频截图
单帧截图
bash# 在第 5 秒截取一帧 ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 screenshot.jpg # 截取第一帧 ffmpeg -i input.mp4 -vframes 1 first_frame.png
批量截图
bash# 每秒截取一帧 ffmpeg -i input.mp4 -vf fps=1 screenshot_%04d.jpg # 每 5 秒截取一帧 ffmpeg -i input.mp4 -vf fps=1/5 screenshot_%04d.jpg
视频处理
调整分辨率
bash# 缩放到 1280x720 ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4 # 保持宽高比缩放 ffmpeg -i input.mp4 -vf scale=1280:-1 output.mp4
旋转视频
bash# 顺时针旋转 90 度 ffmpeg -i input.mp4 -vf "transpose=1" output.mp4 # 逆时针旋转 90 度 ffmpeg -i input.mp4 -vf "transpose=2" output.mp4
添加水印
bash# 添加图片水印 ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4 # 添加文字水印 ffmpeg -i input.mp4 -vf "drawtext=text='Watermark':fontcolor=white:fontsize=24:x=10:y=10" output.mp4
音视频分离与合并
提取音频
bash# 提取音频流 ffmpeg -i video.mp4 -vn -acodec copy audio.aac # 转换音频格式 ffmpeg -i video.mp4 -vn -acodec libmp3lame -ab 192k audio.mp3
提取视频
bash# 提取视频流(无音频) ffmpeg -i video.mp4 -an -c:v copy video.mp4
合并音视频
bash# 将音频和视频合并 ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -strict experimental output.mp4
视频剪辑和处理时,使用 -c copy 可以避免重新编码,提高处理速度并保持原始质量。