在 Python 中使用 MoviePy 保存处理后的视频和 CSV 时出现问题

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

我遇到一个问题,即使用 MoviePy 创建的处理视频的长度比基于 Mediapipe 的视频处理脚本生成的相应 CSV 文件短。具体来说,视频有时会长达 30 秒,而 CSV 文件记录的事件长达 45 秒。 CSV 文件正确记录了时间戳和状态,我已经验证了这一点。此外,CSV 文件末尾的摘要行未按预期显示。

这是我的代码的相关部分:

import csv
from tkinter import messagebox
from moviepy.editor import ImageSequenceClip

# ... [rest of the code]

def process_video(self, camera, perclos_thresh, roll_thresh, pitch_thresh, yaw_thresh,
                  ear_time_thresh, mar_time_thresh, gaze_time_thresh, pose_time_thresh,
                  csv_filename, video_filename):
    # ... [processing code]
    frames_to_video = []  # List to store frames for the video

    # Initializing CSV
    with open(csv_filename, mode='w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(['Timestamp', 'Cansado', 'Dormindo', 'Olhando Fora', 'Distraído', 'Bocejando'])

        # ... [rest of the processing loop]
        
        # Finalizing CSV
        with open(csv_filename, mode='a', newline='') as file_append:
            writer_append = csv.writer(file_append)
            # Calculate final durations for active states
            # ... [write summary lines]

    # Create the video from the list of frames using moviepy
    try:
        video_clip = ImageSequenceClip(frames_to_video, fps=real_fps)
        video_clip.write_videofile(video_filename, codec='libx264')
    except Exception as e:
        messagebox.showerror("Erro ao salvar o vídeo", f"Ocorreu um erro ao salvar o vídeo: {e}")

if __name__ == "__main__":
    app = VideoProcessingApp()
    app.mainloop()

问题:

视频持续时间有时比 CSV 文件持续时间短。 最终摘要行不会出现在 CSV 文件中。 我尝试过的:

我已确保 CSV 文件正确记录时间戳和状态。

问题:任何人都可以帮助确定为什么视频持续时间可能比 CSV 文件短以及为什么 CSV 文件中缺少摘要行吗?帧的收集和保存方式或 CSV 文件的最终确定方式是否存在潜在问题?

python video-processing moviepy
1个回答
0
投票

您可以添加打印语句来检查向

frames_to_video
添加了多少帧,并确保该数字与 CSV 文件中的时间戳匹配。它还有助于打印收集最后一帧的时间,并将其与 CSV 中的时间戳进行比较,看看它们是否对齐。此外,在将摘要行写入 CSV 文件的代码部分中包含打印语句或错误处理。这将有助于确认该部分是否按预期运行。

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