如何使用python加速视频而不丢失帧

2024-04-25 18:59:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个1:24分钟长的视频,每秒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)

虽然fps属性已增加到30,但生成的文件仍为1:24分钟长。
我怎样才能做到这一点

注意:所有_loc变量都是包含相应文件位置的字符串。
我不介意安装其他库


Tags: 文件in声音clip视频outaudioloc
1条回答
网友
1楼 · 发布于 2024-04-25 18:59:03

我想我是使用Clip类的set_fps属性找到了解决方案。实际上,set_fpsfunction返回具有修改的FPS计数的剪辑副本。将转换应用于此副本时,最终将获得正确的FP数

由于您没有提供一个可复制的示例,我使用了一个15秒、每秒24帧且没有声音的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

相关问题 更多 >