이 가이드에서는 Weave 트레이스에서 비디오 데이터를 로깅하고 추적하여 Weave UI에서 직접 비디오를 검토, 재생, 분석하는 방법을 설명합니다. 이 문서는 트레이스된 함수의 비디오 입력과 출력을 자동으로 캡처하려는 비디오 처리 애플리케이션을 구축하는 개발자를 대상으로 합니다.
Weave는 moviepy를 사용해 비디오를 자동으로 로깅합니다. 트레이스된 함수에 비디오 입력과 출력을 전달할 수 있으며, Weave가 비디오 데이터의 업로드와 저장을 자동으로 처리합니다.
비디오 지원은 Python에서만 사용 가능합니다.
Weave로 비디오를 로깅하기 전에 다음 사전 요구 사항을 완료하세요:
weave 및 moviepy==1.0.3를 설치합니다.
- W&B 계정을 생성합니다.
Weave는 moviepy 클립의 유형에 따라 서로 다르게 처리합니다. 어떤 유형을 다루고 있는지 알면 Weave가 비디오 데이터를 어떻게 업로드하고 저장하는지 이해하는 데 도움이 됩니다.
Weave는 다음과 같은 moviepy 비디오 클립 객체를 인식합니다.
- 비디오 파일에서 로드된
VideoFileClip 객체
ImageClip, ColorClip, TextClip과 같은 메모리 내 클립
클립이 VideoFileClip이고 지원되는 확장자의 유효한 파일명을 가지고 있으면 Weave가 해당 파일을 직접 업로드합니다.
지원되는 파일 확장자:
비디오 객체가 메모리에만 있고(디스크에 파일이 없는 경우), Weave가 이를 .mp4 파일로 인코딩한 뒤 업로드를 자동으로 처리합니다. 이는 다음 유형의 클립에 적용됩니다.
ImageClip
ColorClip
TextClip
다음 코드 예제는 Weave에서 비디오 처리 함수를 트레이스하는 방법을 보여줍니다. 이 코드 예제는 다음 작업을 수행합니다.
- Weave 프로젝트
video-test를 초기화합니다.
- 로드된
VideoFileClip에서 1초 길이의 서브클립을 VideoClip으로 추출하는 get_video 함수를 weave.op로 추적되도록 정의합니다.
- 클립을 Weave에 업로드하고 트래킹합니다.
- 비디오가 없으면 자리표시자 MP4 비디오를 자동으로 생성합니다.
스레드 안전성 문제를 방지하려면 VideoFileClip 객체를 Weave op 외부에서 생성하지 말고, 항상 파일 경로를 전달하세요.
다음 코드 스니펫을 사용하기 전에 사용 사전 요구 사항을 완료하세요.
import os
import weave
from moviepy.editor import VideoFileClip, ColorClip, VideoClip
# 프로젝트 이름으로 업데이트하거나, 'video-test'라는 새 프로젝트를 생성하세요
weave.init('video-test')
@weave.op
def get_video(clip: VideoFileClip) -> VideoClip:
"""Process a video by path rather than by passing the clip directly.
This ensures that the VideoFileClip is created and managed within the
Weave op's thread context, avoiding thread-safety issues.
"""
new_clip = clip.subclip(0, 1)
return new_clip
if __name__ == "__main__":
os.makedirs("videos", exist_ok=True)
# MP4 파일 경로로 업데이트하세요
video_path = './videos/example.mp4'
# 파일이 없으면 더미 비디오를 생성합니다
# 더미 비디오 내용: 5초 동안 표시되는 빨간색 사각형
if not os.path.isfile(video_path):
print("No video found. Creating dummy video...")
dummy_clip = ColorClip(size=(640, 480), color=(255, 0, 0), duration=5)
dummy_clip.write_videofile(video_path, fps=24)
clip = VideoFileClip(video_path, has_mask=False, audio=True)
get_video(clip)
코드 샘플이 성공적으로 실행되면 프로젝트의 트레이스 테이블에서 링크를 클릭해 비디오를 볼 수 있습니다.