我正在尝试编写一个 python 脚本,将视频分成每个小于 64 mb 的 block 。这是我的 for 循环,用于转换分解视频的每个 block :
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标记为各部分的长度。
例如,如果视频文件大小为 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
。
关于python - 如何使用这个 ffmpeg python 脚本正确剪切视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59279463/