使用 FFmpeg 工具剪切、拼接和去除视频水印,可以通过以下步骤来实现。
1. 剪切视频
要使用ffmpeg切割视频,并保持原始的码率和帧率,只改变视频时长,可以使用以下命令:
1 | ffmpeg -i input.mp4 -ss 00:00:00 -t 01:18:00 -c:v copy -c:a copy output.mp4 |
这里的参数含义是:
-i input.mp4
: 指定输入的视频文件。-ss 00:00:00
: 指定从输入视频的哪个时间点开始切割,这里是从开头开始,也可以根据需要修改为其他时间点。-t 01:18:00
: 指定切割的持续时间,这里是切割1小时18分钟的内容。-to 01:18:00
: 指定从输入视频的哪个时间点结束切割,这里是切割1小时18分钟的内容。-c:v copy
: 表示视频流使用原始的视频编解码器进行复制,保持原始的视频码率和帧率。-c:a copy
: 表示音频流使用原始的音频编解码器进行复制,保持原始的音频码率。output.mp4
: 指定输出的文件名。
2. 拼接视频(剪掉第9到第10分钟)
剪切前8分钟:
1 | ffmpeg -i input.mp4 -ss 00:00:00 -t 00:08:00 -c copy part1.mp4 |
剪切第10分钟到结尾:
1 | ffmpeg -i input.mp4 -ss 00:10:00 -c copy part2.mp4 |
拼接视频:
首先,需要将 part1.mp4
和 part2.mp4
列到一个文本文件中,
创建一个名为 filelist.txt
的文件,内容如下:
注意:windwos下文本格式要设置成 UTF-8
1 | file 'part1.mp4' |
然后使用以下命令拼接:
1 | ffmpeg -f concat -safe 0 -i filelist.txt -c copy output_concat.mp4 |
-f concat -safe 0 -i filelist.txt
:使用文件列表来合并视频片段。
3. 去视频水印
先获取需要去除水印视频的一帧图片用来获取水印位置,使用 FFmpeg 截取视频中的一帧图片非常简单。你可以指定时间点,FFmpeg 会从该时间点提取出一帧图像并保存为图片文件。
基本命令
1 | ffmpeg -i input.mp4 -ss 00:01:30 -vframes 1 output.png |
这里的参数解释:
-i input.mp4
:指定输入视频文件input.mp4
。-ss 00:01:30
:指定截取时间点为 1 分 30 秒(可以调整为你想要的时间点)。-vframes 1
:指示只提取 1 帧图像。output.png
:指定输出图片的文件名和格式。
其他选项
提取更高质量的图片:
如果想确保提取的图片是最高质量,可以添加 -q:v 2
,其中 2
是质量参数,值越小质量越高。
1 | ffmpeg -i input.mp4 -ss 00:01:30 -vframes 1 -q:v 2 output.png |
提取任意格式的图片:
FFmpeg 支持输出多种图片格式,你可以将输出文件名的后缀改为 .jpg
, .bmp
, .tiff
等来保存为不同格式的图片。
快速提取:
如果想加快提取速度,可以把 -ss
放在 -i
参数之前,这样 FFmpeg 会先跳到指定时间点再开始处理,从而减少处理时间。
1 | ffmpeg -ss 00:01:30 -i input.mp4 -vframes 1 output.png |
示例
假设你有一个名为 input.mp4
的视频文件,并且你希望在 2 分钟的时间点截取一帧图片并保存为 frame.png
,你可以运行以下命令:
1 | ffmpeg -i input.mp4 -ss 00:02:00 -vframes 1 frame.png |
这个命令将在 2 分钟的时间点提取一帧图像并保存为 frame.png
。
假设水印位于视频的左上角,大小为 100x50 像素( windows 可以使用画图工具获取水印坐标),可以使用 delogo
滤镜去水印:
1 | ffmpeg -i input.mp4 -vf "delogo=x=0:y=0:w=100:h=50" -c:a copy output_no_watermark.mp4 |
x=0:y=0
是水印的左上角位置。w=100:h=50
是水印的宽度和高度。show=0
是水印位置是否包含边框,show=0
不包含边框或者show=1
包含边框