前言

在剪辑视频过程中,遇到一个长达18小时,大小8G的视频。而无论是发布平台还是各类剪辑工具都对视频的长度进行了限制,因此想到了通过FFmpeg的方式进行剪辑。目的便是将这个长达18小时的视频,通过FFmpeg将其裁剪为9个子视频,每个子视频长2小时。(以下为windows教程)

安装FFmpeg

1. 下载FFmpeg

  1. 访问 FFmpeg 官方网站下载FFmpeg
  2. 将下载的安装包解压到任意目录,例如 D:\ffmpeg(注意:解压目录不能含有中文)

2. 配置环境变量

  1. 右键点击“我的电脑”,选择“属性”。
  2. 点击“高级系统设置”。
  3. 点击“环境变量”按钮。
  4. 在“系统变量”区域找到名为“Path”的变量,并点击“编辑”。
  5. 点击“新建”并输入 FFmpeg 的 bin 目录路径(例如:D:\ffmpeg\bin)。
  6. 点击“确定”保存设置。

3. 验证安装

  1. 打开命令提示符(cmd)或 PowerShell。
  2. 输入 ffmpeg -version 命令,查看是否能正确显示 FFmpeg 版本信息。

编写并使用脚本

1. 编写脚本

打开你的文本编辑器,创建一个新的脚本文件,比如叫做split_video.sh,然后输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash  

# 原始视频文件
INPUT="original_video.mp4"

# 开始时间偏移量,初始为0
START=0
# 每个视频的长度(秒),2小时 = 2 * 60 * 60秒
DURATION=7200
# 输出文件的前缀
OUTPUT_PREFIX="part"

# 循环裁剪视频
for (( i=1; i<=9; i++ ))
do
# 计算当前视频片段的结束时间
END=$((START + DURATION - 1))
# 构造输出文件名
OUTPUT="${OUTPUT_PREFIX}${i}.mp4"
# 使用ffmpeg裁剪视频
ffmpeg -ss $START -to $END -i "$INPUT" -c copy "$OUTPUT"
# 更新下一个视频片段的起始时间
START=$((START + DURATION))
done

echo "视频裁剪完成!"

注意:-ss 参数在 -i 前面(如脚本所示)时,ffmpeg会更快地定位到起始位置,因为它不会解码直到达到-ss指定的时间点。然而,这可能导致定位不太精确(尤其是当使用基于关键帧的编解码器时)。如果精确度非常重要,你可能需要将 -ss 移到 -i 参数之后,但这会增加处理时间,因为ffmpeg会先解码整个视频直到达到 -ss 指定的时间点。

2. 编译脚本

导航到脚本所在的目录,并运行以下命令:split_video.sh