[英]Issue using moviepy package (Python)
我正在使用 moviepy 中的 ffmpeg_extract_subclip 函数来处理视频文件。 但是,我得到的视频剪辑与我设置的开始时间和结束时间的长度不同。 例如,写:
from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
clip=clip_filename
cutclip="cutvideo.avi"
ffmpeg_extract_subclip(clip_filename, 0, 10, targetname=cutclip)
我得到一个长度为 10,03 或类似的视频(在帧数方面,我得到 602 帧而不是 600)。 有没有办法获得更准确的输出?
嗯...我会合并这个答案和ffmpeg_extract_subclip
( https://zulko.github.io/moviepy/_modules/moviepy/video/io/ffmpeg_tools.html#ffmpeg_extract_subclip ) 的实际实现:
def ffmpeg_extract_subclip(filename, t1, t2, targetname=None):
""" Makes a new video file playing video file ``filename`` between
the times ``t1`` and ``t2``. """
name, ext = os.path.splitext(filename)
if not targetname:
T1, T2 = [int(1000*t) for t in [t1, t2]]
targetname = "%sSUB%d_%d.%s" % (name, T1, T2, ext)
cmd = [get_setting("FFMPEG_BINARY"),"-y",
"-ss", "%0.2f"%t1,
"-i", filename,
"-t", "%0.2f"%(t2-t1),
"-map", "0", "-vcodec", "copy", "-acodec", "copy", targetname]
subprocess_call(cmd)
因此,如您所见,该库是无状态的,因此可以轻松扩展:
def ffmpeg_extract_subclip_precisely(filename, t1, t2, targetname=None):
""" Makes a new video file playing video file ``filename`` between
the times ``t1`` and ``t2``. """
name, ext = os.path.splitext(filename)
if not targetname:
T1, T2 = [int(1000*t) for t in [t1, t2]]
targetname = "%sSUB%d_%d.%s" % (name, T1, T2, ext)
cmd = [get_setting("FFMPEG_BINARY"), "-i", filename,
"-force_key_frames", "{}:{}".format(t1,t2), "temp_out.mp4"]
subprocess_call(cmd)
cmd = [get_setting("FFMPEG_BINARY"),"-y",
"-ss", "%0.2f"%t1,
"-i", "temp_out.mp4",
"-t", "%0.2f"%(t2-t1),
"-map", "0", "-vcodec", "copy", "-acodec", "copy", targetname]
subprocess_call(cmd)
顺便说一下,我相信您应该尽可能以毫秒的精度指定时间。
请注意,上面的代码未经测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.