我正在使用 PyAV 对来自相机的视频流进行编码并将其保存到磁盘。这通常是有效的,但我还剩下一个问题:无论我录制多长时间,磁盘上的文件都保持在 0kb。 Onyl 当我关闭 output_stream 时,它会保存到磁盘。 由于我想要进行长达一小时的流,因此我需要定期将流刷新到磁盘。另外,如果我的程序崩溃,该文件需要有效。 这是我的记录器类代码,我用“test.mkv”作为输出文件来调用它。
class Recorder:
def __init__(self) -> None:
recorder_instances.append(self)
self.frame_count = 0
def start(self, output_file, width, height, fps):
self.output_container = av.open(output_file, mode="w")
self.output_stream = self.output_container.add_stream("libvpx-vp9", rate=fps)
self.output_stream.width = width
self.output_stream.height = height
self.output_stream.options = {
# Add more options as needed
}
def recieved_frame(self, frame):
for packet in self.output_stream.encode(frame):
self.output_container.mux(packet)
def stop(self):
# Flush any remaining packets
for packet in self.output_stream.encode(None):
self.output_container.mux(packet)
# Close the output container
self.output_container.close()
我已经尝试使用
# Flush any remaining packets
for packet in self.output_stream.encode(None):
self.output_container.mux(packet)
在 receive_frame 方法内,但这给了我一个错误:接收下一个包时“文件结束”。 将不胜感激任何帮助:-)
您的磁盘上的文件不是 0 字节。
这只是 Windows 资源管理器在显示文件大小方面滞后。
按 F5 使其更新文件大小的显示。