SUNT的随手记

闲的时候,做一些对自己有益的事

0%

ffmpeg基本使用

使用 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.mp4part2.mp4 列到一个文本文件中,
创建一个名为 filelist.txt 的文件,内容如下:
注意:windwos下文本格式要设置成 UTF-8

1
2
file 'part1.mp4'
file 'part2.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 包含边框