5P by GN⁺ 5일전 | ★ favorite | 댓글 1개
  • typed-ffmpeg는 Python에서 FFmpeg를 직관적으로 사용할 수 있도록 하는 최신 래퍼
  • 강력한 타입 지원과 풍부한 문서화 및 IDE 자동완성으로 개발 경험과 코드 안정성 향상 기능 제공
  • 복잡한 필터 그래프 구성을 쉽게 만들고 시각화 및 JSON 직렬화 등 고급 기능을 지원함
  • 설치와 실행이 간편하며, 인터랙티브 플레이그라운드를 통해 브라우저에서도 실험 가능함
  • ffmpeg-python에서 영감을 받아 기존 문제점 보완, 앞으로 더 다양한 FFmpeg 버전과 필터를 지원 예정임

typed-ffmpeg 개요 및 중요성

  • typed-ffmpeg는 FFmpeg를 현대적인 Pythonic 방식으로 제어할 수 있는 오픈소스 패키지임
  • Python 표준 라이브러리만으로 만들어져 의존성이 없고, 높은 보안성과 호환성 제공 특장점이 있음
  • 최대 장점은 풍부한 타입 지원과 간단한 문법, 자동 완성 및 인라인 문서 등으로 복잡한 FFmpeg 필터 작업을 쉽고 안정적으로 코드화할 수 있음
  • 기존 ffmpeg-python의 제한, 특히 IDE 연동 및 타입 부재를 보완하며, JSON 직렬화, 필터 그래프 자동 검증, 시각적 그래프 등 다양한 신규 기능을 지원함
  • 실제 래핑 및 자동화 과정에서 GPT-3와 Copilot이 개발 생산성에 기여했으나, 코드 생성의 핵심은 신뢰성 있는 전통적 코드 생성으로 접근한 점도 특징임

주요 기능(Features)

  • 의존성 없음: Python 표준 라이브러리만 사용함
  • 직관적 인터페이스: Python 코드로 FFmpeg 필터 그래프를 쉽게 구성 가능함
  • 포괄적 필터 지원: 대부분의 FFmpeg 필터와 IDE 자동완성 지원함
  • 통합 문서화: 인라인 docstring으로 외부 문서 참조 필요성 최소화함
  • 견고한 타입 지원: 정적/동적 타입체크로 코드 신뢰성과 디버깅 용이성 강화 기능 제공함
  • 필터 그래프 직렬화: JSON 형식으로 필터 그래프 저장/복원 가능함
  • 그래프 시각화: graphviz를 통한 필터 그래프 도식화 기능 제공함
  • 자동 검증 및 보정: 필터 그래프 내 오류 탐지 및 자동 교정 기능
  • 입출력 옵션 확장: 다양한 codec/포맷 지원으로 FFmpeg 활용 범위 확대
  • 부분 평가 기능: 필터 그래프의 모듈화 및 재사용성 확대 지원

향후 예정 기능

  • FFmpeg 6.0 외 버전에 대한 광범위한 호환성 확대 예정임
  • 더 많은 복잡한 필터 지원 예정이며, 지속적 기능 확장 계획 진행 중임

빠른 예제(Quick Usage)

import ffmpeg  
  
# 비디오 좌우 반전 및 출력  
f = (  
    ffmpeg  
    .input(filename='input.mp4')  
    .hflip()  
    .output(filename='output.mp4')  
)  
f  
  • 복잡한 예시로, 여러 구간을 잘라 overlay 및 drawbox를 추가하는 필터 그래프 표현 가능
import ffmpeg.filters  
import ffmpeg  
  
in_file = ffmpeg.input("input.mp4")  
overlay_file = ffmpeg.input("overlay.png")  
  
f = (  
    ffmpeg.filters  
    .concat(  
        in_file.trim(start_frame=10, end_frame=20),  
        in_file.trim(start_frame=30, end_frame=40),  
    )  
    .video(0)  
    .overlay(overlay_file.hflip())  
    .drawbox(x="50", y="50", width="120", height="120", color="red", thickness="5")  
    .output(filename="out.mp4")  
)  
f  
  • 더 많은 예제와 상세 설명은 문서에서 확인 가능함

인터랙티브 플레이그라운드

  • 브라우저 상에서 FFmpeg 필터 및 명령 실험, 결과 시각화, 다양한 입출력 옵션 테스트, 인터랙티브 예제 학습, 필터 그래프 공유 등이 가능함
  • 로컬 환경 없이도 FFmpeg 필터 체인 프로토타이핑 및 학습에 매우 효과적인 환경임

프로젝트 배경 및 감사

  • GPT-3의 FFmpeg 문서를 기반으로 SDK 자동 생성 아이디어에서 영감받아 시작된 프로젝트임
  • 코어 생성은 신뢰성 확보를 위해 수작업 코드 생성 방식으로 전환함
  • 개발 과정에서 GitHub Copilot과 GPT-3가 개발 효율성 증대에 기여함
  • ffmpeg-python이 API 스타일과 디자인에 영감을 주어 설계에 많은 영향을 줌
  • 프로젝트는 개발자의 자녀 Austin에게 헌정됨

문서 및 참고

  • 더욱 상세한 정보와 심화 기능은 공식 Documentation에서 확인 가능함
  • 단일 패키지 설치 외에, 그래프 시각화 등 추가 기능을 위해서는 별도 옵션을 통해 graphviz 지원 가능함
  • ffmpeg-python과의 호환성을 위해 별도 버전(typed-ffmpeg-compatible) 제공함
Hacker News 의견
  • 모든 커맨드라인 옵션 파서나 툴킷은 각자의 독립적인 전체 구성 언어임을 사람들이 너무 과소평가하는 현실 인식임, 각각의 도구는 그 언어에서 동작하는 개별 프로그램이나 설정으로 인식 필요성 강조임, 유닉스 셸에서 단어 분할 규칙과 겉으로 보이는 비슷한 구문 때문에 실상 엄청난 다양성이 있다는 점을 사람들이 지나치게 균일하다고 오해하는 현상 설명임, 개인적으로 /usr/bin 내 모든 프로그램을 --help, -h 옵션으로 돌려봤을 때 기대한 도움말을 얻지 못한 실패율이 상당히 높았던 경험 공유임, ffmpeg처럼 복잡한 툴에 타입 정보를 도입하면 이런 다양성 문제 인식 및 실질적인 이점도 줄 수 있음을 강조하는 격려 메시지임
    • "man foo"가 "foo --help"나 "foo -h"보다 훨씬 신뢰할 수 있고 유용하다는 경험 공유임
    • 입문자에게 구체적으로 어디에서 충돌이 있었는지, 그 대립 지점이 어디였는지 궁금증 표현임
  • 프로젝트가 활발하게 개발되고 있다는 점이 인상적이지만, ffmpeg-python과 유사한 문제를 일부 갖고 있는 것 같음, 예를 들면 입력 없이 동작하는 "color" 같은 필터 지정 방법이 보이지 않음, GUI 앱에서 CMD 창이 나오는 걸 막기 위한 subprocess.CREATE_NO_WINDOW 같은 Popen 플래그 지정 방식이 없음, ffmpeg.compile() 이후 수동 실행으로 ffmpeg는 해결 가능하지만 ffmpeg.probe()에선 해당 방법이 적용 안되는 점 언급임, 추가로 소스 필터 문제는 ffmpeg.sources.color로 파악했으나, 임의의 소스 필터를 vfilter/afilter처럼 쓰는 방법이 있는지 궁금증 제기임
  • 파이썬으로 스크립트 기반 영상 처리 진행한다면 Vapoursynth 사용을 강력하게 추천함, 영상 처리를 목적으로 처음부터 설계된 툴이고 활발한 유지보수와 커뮤니티, 도구 생태계도 충실함, ffmpeg의 CLI에 얽매이지 않고 자유롭게 사용할 수 있음, Vapoursynth 홈페이지 링크 공유임
  • 정말 멋진 아이디어임, 개인적으로 이 프로젝트의 typescript 버전을 기대하고 있음
    • Jules 프리뷰 도구로 typescript 버전이 어떻게 나올지 간단하게 테스트해봤음, 구현은 꽤 단순하지만 더 읽기 좋은 방식이 떠오름, 아주 짧은 프롬프트에 비하면 결과가 나쁘지 않음, 궁금한 사람 위해 multi-language-codegen 브랜치의 코드 공유함
    • typescript 버전도 출시되면 정말 좋겠다는 의견임
    • typescript를 '신의 언어'로 비유한 유머임
    • typescript 언급이 공식 문서에는 없었다는 지적임
  • ffmpeg 커맨드라인의 형태를 기계가 읽을 수 있도록 기술해서 다양한 언어 코드로 자동 생성되도록 해야 한다는 생각임
  • 비주얼 툴이 특히 인상적임, FFMPEG은 모듈화/비주얼 프로그래밍으로 확실히 접근성이 좋아질 만한 사례로 보임, 모든 기능을 알지 못하는 사용자가 많으므로 이런 방식이 도움되는 사례임, UX에서 DEL 키로 노드/엣지 삭제 기능을 기대했으나 적용되지 않아 아쉬움도 있음, 전반적으로는 훌륭한 경험임
    • 이제야 비로소 MS의 DirectShow GraphEdit과 비슷한 도구가 등장했다는 반가움 표현임
  • 정말 흥미로운 프로젝트라고 생각함, 개별 명령어들 사이에서 프레임을 파이프로 전달하는 기능까지 지원한다면 FFMpeg 활용의 진정한 확장성이 열릴 것이라는 의견임
  • 이 프로젝트가 너무 멋지다고 생각해서, 시각적으로 영상 편집이 가능한 newbeelearn의 비디오 에디터 도구도 함께 소개하고 싶음, 해당 도구 역시 ffmpeg 명령어 자동 생성 가능함
  • 좋은 작업이라는 짧은 응원임
  • 프로젝트가 아주 멋져보인다는 감탄임