Weave 는 moviepy 를 사용하여 비디오를 자동으로 로그합니다. 이를 통해 추적된 함수에 비디오 입력 및 출력을 전달할 수 있으며, Weave 가 비디오 데이터의 업로드 및 저장을 자동으로 처리합니다.
비디오 지원은 현재 Python 에서만 가능합니다.
사용 전제 조건
weave 및 moviepy==1.0.3 을 설치합니다.
- W&B 계정을 생성합니다.
지원되는 비디오 유형
Weave 는 다음과 같은 moviepy 비디오 클립 오브젝트를 인식합니다:
- 비디오 파일에서 로드된
VideoFileClip
ImageClip, ColorClip, TextClip 과 같은 인메모리 클립
파일 기반 클립의 직접 업로드
클립이 VideoFileClip 이고 지원되는 확장자를 가진 유효한 파일 이름이 있는 경우, Weave 는 파일을 직접 업로드합니다.
지원되는 파일 확장자:
인메모리 클립 지원
비디오 오브젝트가 메모리에 있는 경우 (디스크에 파일이 없는 경우), Weave 는 이를 .mp4 파일로 인코딩하고 업로드를 자동으로 처리합니다. 이는 다음과 같은 유형의 클립에 적용됩니다:
ImageClip
ColorClip
TextClip
예시: 비디오 함수 추적하기
다음 코드 예시는 Weave 에서 비디오 처리 함수를 추적하는 방법을 보여줍니다. 이 코드 예시는 다음을 수행합니다:
video-test 라는 Weave 프로젝트를 초기화합니다.
weave.op 로 추적되는 get_video 함수를 정의합니다. 이 함수는 로드된 VideoFileClip 에서 1초 분량의 서브클립을 VideoClip 으로 추출합니다.
- Weave 에서 클립을 업로드하고 추적합니다.
- 비디오 파일이 없는 경우 더미 MP4 비디오를 자동으로 생성합니다.
스레드 안전성 문제를 피하기 위해, Weave op 외부에서 생성하는 대신 항상 VideoFileClip 오브젝트의 경로를 전달하세요.
다음 코드조각을 사용하기 전에 사용 전제 조건을 완료하세요.
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:
"""클립을 직접 전달하는 대신 경로를 통해 비디오를 처리합니다.
이렇게 하면 VideoFileClip이 Weave op의 스레드 컨텍스트 내에서 생성 및 관리되어
스레드 안전성 문제를 방지할 수 있습니다.
"""
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("비디오를 찾을 수 없습니다. 더미 비디오를 생성 중...")
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)
코드 샘플이 성공적으로 실행되면 프로젝트의 Traces 테이블에서 링크를 클릭하여 비디오를 볼 수 있습니다.