乐闻世界logo
搜索文章和话题

如何使用 FFmpeg 进行视频剪辑、合并和截图?有哪些实用技巧?

2月18日 11:07

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

bash
ffmpeg -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 可以避免重新编码,提高处理速度并保持原始质量。

标签:FFmpeg