如何高效地将长视频分割成多个短视频?

如何高效地将长视频分割成多个短视频?

使用 ffmpeg,我可以指定每个片段的开始时间和持续时间。例如,我写了

ffmpeg -i "originalvideo.mp4" -ss 00:00 -t 2:34 -vcodec copy -acodec copy "smallervideo1.mp4"

我有一个电子表格,其中有 3 列:小视频的名称、开始时间和结束时间。我可以为每个视频分别创建每个命令,但这需要一些时间,因为我要将源文件拆分成近 100 个小视频。

有没有一种方法可以将电子表格中的值传递到 ffmpeg 并自动以适当的名称输出每个视频?

答案1

这可以通过一个简单的 shell 脚本来完成,在本例中是一个 Bash 脚本。如果您有一个空格分隔的文件作为输入,其中包含输出文件名、开始时间戳和结束时间戳,例如:

$ cat cuts.txt
foo.mp4 00:00:00 00:00:01
bar.mp4 00:01:20 00:02:00

然后用一个简单的循环读取它并构建你的 ffmpeg 命令:

while read -r filename start end; do
  ffmpeg -i "input.mp4" -ss "$start" -to "$end" -c copy "$filename"
done < cuts.txt

这只会剪切比特流而不进行编码 –-c copy是 的简写-vcodec copy -acodec copy(并且它还会复制字幕)。您可以指定视频编码器(例如-c:v libx264)和音频编码器(例如-c:a aac -b:a 192k)来重新编码视频。

使用 Python 3 的更便携但更基础的版本:

#!/usr/bin/env python3
import subprocess
with open("cuts.txt") as f:
  for line in f.readlines():
    filename, start, end = line.strip().split(' ')
    cmd = ["ffmpeg", "-i", "input.mp4", "-ss", start, "-to", end, "-c", "copy", filename]
    subprocess.run(cmd, stderr=subprocess.STDOUT)

注意:如果在 Windows 上运行此程序,则应将 ffmpeg 添加到您的 PATH,或者指定其完整路径,如C:/Program Files/ffmpeg/bin/ffmpeg.exe

相关内容