如何使用此 ffmpeg python 脚本正确剪切视频

How to cut video properly with this ffmpeg python script

我正在尝试编写一个 python 脚本,将视频分成每个小于 64 MB 的块。这是我的 for 循环,用于转换每一块破碎的视频:

for part in range(parts):
    print(start, end)
    subprocess.run(f"ffmpeg -i {filename} -vcodec copy -acodec copy -ss {start} -t {end} {newfile}\OutputPart{part}.mp4", shell=True)
    start = end
    end += partlength

我原来定义的start是0,end marker是每部分的长度

例如,如果视频文件是 139 mb 和 20 分钟长,它将大小除以 64 [2.171875] 将其变成整数 加 1 以便在最后一个 64 mb 标记之后为任意数量的视频添加第三部分。然后,它将 部分 的数量除以视频的长度(在我们的例子中是 20 分钟 = 1200 秒)除以部分的数量(之前设置为 parts) 这将使我们得到(1200 秒除以 3 个部分 =)400,这是每个部分的长度(partlength)。现在,运行是一个片段数的循环,将一段视频的起点(在ffmpeg命令中表示为-ss)原为0,终点(-t), 最初是 1 part 的长度(在我们的例子中是 400)。在第一个 运行 通过后,为了确保起点和终点正确,它打印起点和终点。所有 运行 均表示正确的起点和终点 (0-400;400-800;800-1200)。第一个和第三个文件转换完美,而三个文件中的第二个文件有 400-1200(它包括第三个文件)。

它不能复制正确的段是否有原因?

第一个和第三个文件转换完美,而三个文件中的第二个文件有 400-1200(包括第三个文件)。

-t 是持续时间,不是最终时间戳。所以,-ss 400 -t 800 告诉 ffmpeg 从 t=400 开始复制 800 秒。使用 -to 而不是 -t.