我正在尝试编写一个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
我最初将开始定义为 0,结束标记是每个部分的长度。
例如,如果视频文件长度为 139 mb 且长度为 20 分钟,则大小除以 64 [2.171875] 将其转换为整数加 1,以便在最后 64 MB 标记之后为任意数量的视频添加第三部分。然后,它取该部分数并将视频的长度(在我们的例子中为 20 分钟 = 1200 秒(除以部分数(之前设置为部分的变量(,这将得到我们(1200 秒除以 3 部分 = ( 400,这是每个部分应该的长度(部分长度(。现在,它运行一个部分数的循环,以转换起点(在ffmpeg
命令中表示为-ss
(最初为 0,终点 (-t
(,最初长度为 1部分(在我们的例子中为 400(。第一次运行后,为了确保起点和终点正确,它会打印起点和终点。所有运行都显示正确的开始和终点(0-400;400-800;800-1200(。 第一个和第三个文件完美转换,而三个文件的第二个文件从 400-1200(它包括第三个文件(。
它不会复制正确的细分有什么原因吗?
第一个和第三个文件转换完美,而三个文件的第二个文件从 400-1200(它包括第三个文件(。
-t
是持续时间,而不是最终时间戳。因此,-ss 400 -t 800
告诉 ffmpeg 复制 800 秒,从 t=400 开始。使用-to
而不是-t
。