以每秒 60 帧的速度在 Python 中写入视频
Write video in Python at 60 frames per second
我想使用 Python 创建一个每秒 60 帧的视频文件。
我尝试按如下方式制作一个两分钟的视频 (DURATION_SECONDS = 120
),但我得到的视频持续了 4 分 48 秒,而不是 2 分钟。所以帧率似乎是 25,即使我将 60 传递给 FFmpegWriter
。我做错了什么?
FRAMES_PER_SECOND = 60
DURATION_SECONDS = 120
import skvideo
skvideo.setFFmpegPath('C:\ffmpeg\x64')
import skvideo.io
import numpy as np
video_writer = skvideo.io.FFmpegWriter("test.mp4", outputdict={'-r':str(FRAMES_PER_SECOND)})
for i in range(DURATION_SECONDS*FRAMES_PER_SECOND):
video_writer.writeFrame(np.zeros((100,100)))
video_writer.close()
我也得到了同样的结果
outputdict={'-vf':f"fps={FRAMES_PER_SECOND}"}
解决方案是将 inputdict={'-framerate':str(FRAMES_PER_SECOND)}
传递给 FFmpegWriter
而不是 outputdict
和 -r
。
inputdict
和 outputdict
都没有记录在 skvideo
中(没有提到 ffmpeg
文档,没有示例),-framerate
也没有正确记录在the ffmpeg
documentation(它说的是抓取而不是保存,并声称默认是 30000/1001
即使它是 25
),调用 [=23 时甚至没有提到 -framerate
=].
向@Goury 大声疾呼,因为他没有删除 this thread(这对这里有很大帮助),尽管在该线程中从 Whosebug 社区收到了 -3 的负分。
我想使用 Python 创建一个每秒 60 帧的视频文件。
我尝试按如下方式制作一个两分钟的视频 (DURATION_SECONDS = 120
),但我得到的视频持续了 4 分 48 秒,而不是 2 分钟。所以帧率似乎是 25,即使我将 60 传递给 FFmpegWriter
。我做错了什么?
FRAMES_PER_SECOND = 60
DURATION_SECONDS = 120
import skvideo
skvideo.setFFmpegPath('C:\ffmpeg\x64')
import skvideo.io
import numpy as np
video_writer = skvideo.io.FFmpegWriter("test.mp4", outputdict={'-r':str(FRAMES_PER_SECOND)})
for i in range(DURATION_SECONDS*FRAMES_PER_SECOND):
video_writer.writeFrame(np.zeros((100,100)))
video_writer.close()
我也得到了同样的结果
outputdict={'-vf':f"fps={FRAMES_PER_SECOND}"}
解决方案是将 inputdict={'-framerate':str(FRAMES_PER_SECOND)}
传递给 FFmpegWriter
而不是 outputdict
和 -r
。
inputdict
和 outputdict
都没有记录在 skvideo
中(没有提到 ffmpeg
文档,没有示例),-framerate
也没有正确记录在the ffmpeg
documentation(它说的是抓取而不是保存,并声称默认是 30000/1001
即使它是 25
),调用 [=23 时甚至没有提到 -framerate
=].
向@Goury 大声疾呼,因为他没有删除 this thread(这对这里有很大帮助),尽管在该线程中从 Whosebug 社区收到了 -3 的负分。