Python PyAV 如何定期刷新到磁盘

问题描述 投票:0回答:1

我正在使用 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 方法内,但这给了我一个错误:接收下一个包时“文件结束”。 将不胜感激任何帮助:-)

python ffmpeg video-processing pyav
1个回答
0
投票

您的磁盘上的文件不是 0 字节。

这只是 Windows 资源管理器在显示文件大小方面滞后。

按 F5 使其更新文件大小的显示。

© www.soinside.com 2019 - 2024. All rights reserved.