如何使用 python 来加速视频而不丢帧
How can I use python to speed up a video without dropping frames
我有一个视频,时长 1:24 分钟,fps 为 10,没有任何声音。我需要将视频缩短到 28 秒并为其添加声音,而不丢帧,并明显提高 fps。我尝试使用 MoviePy
来完成此操作。
clip = VideoFileClip(in_loc)
final = clip.fx(vfx.speedx, 3)
final.write_videofile(out_loc, audio=audio_loc)
但是当我查看文件的详细信息时,文件仍然是 10 fps。所以这个方法丢帧了。
然后我试了一下,下面的代码。
clip.write_videofile(out_loc, fps=30, audio=audio_loc)
生成的文件仍然 1:24 分钟长,尽管 fps 属性已增加到 30。
我怎样才能做到这一点?
注意:所有 _loc
变量都是包含相应文件位置的字符串。
我不介意安装其他库。
我想我找到了使用 Clip
class 的 set_fps
属性的解决方案。事实上,set_fps
function returns 具有修改的 FPS 计数的剪辑副本。将转换应用于此副本时,您最终会得到正确的 FPS 数。
由于您没有提供可重现的示例,我使用了 15 秒和 24 FPS 且没有声音的 stock video(重命名为 dummy_in.mp4
)。我最终使用此代码得到了 5 秒的剪辑和 72 FPS:
from moviepy.editor import VideoFileClip
import moviepy.video.fx.all as vfx
in_loc = 'dummy_in.mp4'
out_loc = 'dummy_out.mp4'
# Import video clip
clip = VideoFileClip(in_loc)
print("fps: {}".format(clip.fps))
# Modify the FPS
clip = clip.set_fps(clip.fps * 3)
# Apply speed up
final = clip.fx(vfx.speedx, 3)
print("fps: {}".format(final.fps))
# Save video clip
final.write_videofile(out_loc)
它产生这个输出:
fps: 23.976023976023978
fps: 71.92807192807193
Moviepy - Building video dummy_out.mp4.
Moviepy - Writing video dummy_out.mp4
Moviepy - Done !
Moviepy - video ready dummy_out.mp4
我有一个视频,时长 1:24 分钟,fps 为 10,没有任何声音。我需要将视频缩短到 28 秒并为其添加声音,而不丢帧,并明显提高 fps。我尝试使用 MoviePy
来完成此操作。
clip = VideoFileClip(in_loc)
final = clip.fx(vfx.speedx, 3)
final.write_videofile(out_loc, audio=audio_loc)
但是当我查看文件的详细信息时,文件仍然是 10 fps。所以这个方法丢帧了。 然后我试了一下,下面的代码。
clip.write_videofile(out_loc, fps=30, audio=audio_loc)
生成的文件仍然 1:24 分钟长,尽管 fps 属性已增加到 30。
我怎样才能做到这一点?
注意:所有 _loc
变量都是包含相应文件位置的字符串。
我不介意安装其他库。
我想我找到了使用 Clip
class 的 set_fps
属性的解决方案。事实上,set_fps
function returns 具有修改的 FPS 计数的剪辑副本。将转换应用于此副本时,您最终会得到正确的 FPS 数。
由于您没有提供可重现的示例,我使用了 15 秒和 24 FPS 且没有声音的 stock video(重命名为 dummy_in.mp4
)。我最终使用此代码得到了 5 秒的剪辑和 72 FPS:
from moviepy.editor import VideoFileClip
import moviepy.video.fx.all as vfx
in_loc = 'dummy_in.mp4'
out_loc = 'dummy_out.mp4'
# Import video clip
clip = VideoFileClip(in_loc)
print("fps: {}".format(clip.fps))
# Modify the FPS
clip = clip.set_fps(clip.fps * 3)
# Apply speed up
final = clip.fx(vfx.speedx, 3)
print("fps: {}".format(final.fps))
# Save video clip
final.write_videofile(out_loc)
它产生这个输出:
fps: 23.976023976023978
fps: 71.92807192807193
Moviepy - Building video dummy_out.mp4.
Moviepy - Writing video dummy_out.mp4
Moviepy - Done !
Moviepy - video ready dummy_out.mp4