FFmpeg의 최신 버전들 살펴보기
FFmpeg이 꾸준히 업데이트되고 있습니다. 최근 릴리스들의 주요 내용을 정리해봤는데요, 특히 GPU 활용과 새로운 코덱 지원이 눈에 띕니다.
FFmpeg 8.1 "Hoare" - 마이너 릴리스
FFmpeg 8.1이 새로 출시되었습니다. 주로 내부 개선 작업과 버그 수정에 중점을 뒀는데요, 향후 진행될 swscale 재작성의 기초 작업이 진행 중입니다.
특히 주목할 만한 점은 Vulkan compute 기반 코덱과 필터들이 더 이상 런타임 GLSL 컴파일에 의존하지 않게 됐다는 것입니다. 덕분에 초기화 속도가 훨씬 빨라졌어요.
Khronos 블로그에서 Vulkan Compute 기반 코덱 구현에 대한 상세한 기술 문서가 공개되었으니, 관심 있으신 분들은 참고하시면 좋을 것 같습니다.
FFmpeg 8.0 "Huffman" - 메이저 릴리스
FFmpeg 8.0은 여러 차례의 지연을 거쳐 나왔는데요, 전체 인프라 현대화 작업 때문에 지금까지의 메이저 릴리스 중 가장 큰 규모가 되었습니다.
새로운 Vulkan Compute 기반 코덱
가장 큰 변화는 순수 Vulkan compute 기반의 새로운 디코더와 인코더 클래스가 추가된 것입니다.
Vulkan은 교차 플랫폼 오픈 표준 API로, GPU를 다양한 방식으로 활용할 수 있게 해줍니다. 화면 그리기부터 계산, 커스텀 하드웨어 가속기를 통한 비디오 디코딩까지 모두 가능하죠.
흥미로운 점은 특정 하드웨어 가속기에 의존하지 않고, Vulkan 1.3 사양을 구현한 어떤 GPU에서든 동작한다는 겁니다. 이는 compute 셰이더 기반이기 때문입니다.
디코더의 경우 기존 hwaccel API와 호환되므로 사용자는 특별한 설정을 할 필요가 없습니다. Vulkan 디코딩을 활성화하면 자동으로 사용되거든요.
인코더의 경우 하드웨어 가속 인코더와 마찬가지로 새로운 인코더를 지정해야 합니다. 예를 들어 ffv1_vulkan 같은 식이죠.
현재 지원되는 코덱은 FFv1(인코딩/디코딩)과 ProRes RAW(디코딩만)입니다. ProRes와 VC-2는 인코딩/디코딩을 모두 지원하는 구현이 완료되어 검토 중이며, 곧 다음 마이너 릴리스에 포함될 예정입니다.
모든 코덱을 이런 식으로 구현할 수 있는 건 아니에요. 병렬화된 디코딩을 위해 설계된 코덱들만 가능합니다. 주류 코덱들은 계획하지 않고 있는데요, 이는 아키텍처 상의 한계 때문입니다.
하드웨어에 따라서는 이 새로운 코덱들이 상당한 성능 향상을 제공할 수 있습니다. 비선형 비디오 편집기나 무손실 화면 녹화/스트리밍 같은 용도에서 새로운 가능성을 열 수 있어서 기대가 됩니다.
인프라 현대화
FFmpeg 프로젝트는 최근 인프라 현대화를 시작했습니다. 메일링 리스트 서버를 완전히 업그레이드했고, code.ffmpeg.org에서 Forgejo 기반의 새로운 Forge를 통해 기여를 받기 시작했습니다.
FFmpeg 7.1 "Péter" - 메이저 릴리스
FFmpeg 7.1이 새로 출시되었습니다. 주요 내용은 다음과 같습니다.
VVC 코덱이 정식 지원으로
7.0 버전에서 실험적으로 병합된 VVC 디코더가 충분히 성숙하고 최적화되어 이제 정식 지원으로 전환되었습니다. 방송 표준화 단체들 사이에서 채택되기 시작하고 있어요.
새로운 오디오 코덱 지원
AAC USAC(xHE-AAC 코딩 시스템의 일부)에 대한 네이티브 디코더가 추가되었습니다. 광범위한 음량 정규화 메타데이터를 지원해서 스트리밍 서비스들이 채택하기 시작했습니다.
3D 영상 지원
MV-HEVC 디코딩이 이제 지원됩니다. 이는 스테레오스코픽 인코딩 기술로, 최신 스마트폰과 VR 헤드셋에서 생성되고 전송되기 시작했어요.
LC-EVC 디코딩도 외부 라이브러리를 통해 지원되기 시작했습니다. 이는 다른 코덱의 품질을 개선하기 위한 enhancement 메타데이터 계층입니다.
Vulkan 인코딩 지원
H.264와 HEVC에 대한 Vulkan 인코딩 지원이 병합되었습니다. 이제 완전히 Vulkan 기반의 디코딩-필터링-인코딩 파이프라인을 구성할 수 있게 되었어요. Vulkan 프레임을 다운로드하거나 표시하는 것 외에 다른 용도로도 사용할 수 있게 된 거죠.
이 인코더들은 VAAPI 구현과 동등한 기능을 제공합니다. Khronos는 곧 Vulkan에서 AV1 인코딩도 지원될 것이라고 발표했으며, FFmpeg은 첫날부터 지원할 계획입니다.
색상 범위(Color Range) 처리 개선
이 릴리스에서 가장 눈에 띄는 내부 개선 작업은 전체 범위 이미지에 대한 색상 범위 처리입니다.
이전에는 색상 범위 데이터가 두 개의 경로를 가지고 있었고 협상 메커니즘이 없었어요. 필터, 인코더, 먹서(muxer)로 전달될 때도 신뢰할 수 없었습니다.
10년 전부터 시스템 정리 작업이 시작되었지만, 시스템이 너무 취약해서 기존 동작 방식을 깨뜨릴 수 없었기 때문에 진행이 더뎠는데요. 이번에 새로운 시스템으로 완전히 개선되었습니다. 이제 색상 범위가 필요한 모든 곳에서 올바르고 일관되게 전달되며, 더 고급 형태의 협상도 가능해졌어요.
메타데이터 지원 확대
Matroska와 MP4 형식에 크롭 메타데이터 지원이 추가되었습니다. 이 메타데이터는 아카이빙에 중요할 뿐 아니라, AV1의 경우 하드웨어 인코더에서 신호 전송을 요구하기 때문에 더욱 중요합니다.
이전과 마찬가지로 사용자, 배포자, 시스템 통합자들은 현재 git master를 사용 중이 아니라면 업그레이드할 것을 권장합니다.