Raveler/ffmpeg-cpp

A clean, easy-to-use C++ wrapper around the ffmpeg libraries

개요

ffmpeg-cpp는 FFmpeg 라이브러리를 감싸는 C++ 라이브러리로, 일반적인 비디오/오디오 작업(미디어 파일 읽기, 필터링, 인코딩, 쓰기 등)을 위한 깔끔하고 사용하기 쉬운 인터페이스를 제공합니다. FFmpeg 명령줄 도구를 실행하는 대신 C++ 함수를 직접 호출합니다. 또한 DllImport를 통해 C# 프로젝트에서 호출할 수 있는 간소화된 인터페이스도 포함되어 있습니다.

기능

단 몇 줄의 C++ 코드만으로 비디오 파일을 로드하고, 필터(크기 조정이나 회전 등)를 적용하며, 새 파일로 저장할 수 있습니다. README에는 디멀티플렉싱(컨테이너 읽기), 디코딩, 필터링, 인코딩, 멀티플렉싱(파일 쓰기)으로 이어지는 전체 파이프라인 예제가 나와 있습니다.

설치 방법

  • 플랫폼: 현재는 Windows와 Visual Studio만 공식 지원합니다. 작성자에 따르면 코드는 플랫폼 독립적이지만, CMake/Linux 경험 부족으로 인해 아직 Linux 빌드는 제공되지 않습니다.
  • 설치: 저장소를 복제하고, Zeranoe에서 적절한 FFmpeg dev(헤더 및 임포트 라이브러리용) 및 shared(DLL용) 빌드(FFmpeg 4.1에서 테스트됨)를 다운로드하여 ffmpeg 폴더에 압축을 푼 다음, Visual Studio 솔루션을 열어 빌드합니다. 이렇게 하면 자신의 프로젝트에서 사용할 수 있는 .lib 및 include 폴더가 생성됩니다.

사용 방법

C++에서

Muxer, VideoCodec, VideoEncoder, Filter, Demuxer와 같은 객체를 생성하여 처리 파이프라인을 구축합니다. README에는 다음 단계를 수행하는 전체 예제가 나와 있습니다:

  1. 출력 파일을 위한 muxer를 생성합니다.
  2. 코덱(예: MPEG‑2)과 인코더를 생성합니다.
  3. 필터(예: scale=640:150,transpose=cclock,vignette)를 생성하고 인코더를 연결합니다.
  4. demuxer로 입력 파일을 로드하고 최적의 비디오 스트림을 필터로 보냅니다.
  5. 파이프라인을 준비하고, 완료될 때까지 프레임을 단계별로 처리한 후 muxer를 닫아 마무리합니다.

복잡성을 낮춘 간소화된 인터페이스도 제공됩니다. 핸들을 생성하고 비디오/오디오 스트림과 필터를 추가한 뒤 ffmpegCppGenerate를 호출하기만 하면 됩니다. 이 인터페이스 덕분에 C#과의 상호 운용이 쉬워집니다.

C#에서

간소화된 인터페이스는 C 스타일 함수를 포함하는 DLL(simple_interface.dll)로 노출됩니다. README에는 [DllImport]를 사용하여 ffmpegCppCreate, ffmpegCppAddVideoStream, ffmpegCppAddVideoFilter, ffmpegCppGenerate 등의 함수를 호출하는 전체 C# 예제가 나와 있습니다. 오류 확인은 ffmpegCppIsError 및 ffmpegCppGetError를 통해 수행됩니다.

존재 이유

작성자는 FFmpeg 실행 파일을 별도의 프로세스로 실행하지 않고 프로그램에 통합해야 했습니다. 외부 실행 파일을 시작하면 백신 소프트웨어에 의해 차단되거나 다른 문제가 발생할 수 있기 때문입니다. FFmpeg 라이브러리를 직접 링크함으로써 기능이 애플리케이션 내부에 포함됩니다.

제한 사항 및 향후 계획

  • 플랫폼 지원: 현재는 Windows만 지원합니다. 로드맵에는 Linux/Mac 빌드 지원 추가가 언급되어 있습니다.
  • 테스트: 일반적인 기능은 테스트되었지만, 적절한 단위 테스트는 아직 마련되지 않았습니다.
  • 코덱/컨테이너 범위: 일부 코덱과 컨테이너로 테스트되었으나, 로드맵에서는 더 많은 코덱과 컨테이너에 대한 테스트를 계획하고 있습니다.

라이선스

이 라이브러리는 LGPL 라이선스를 따릅니다. 그러나 FFmpeg 자체는 빌드 방식에 따라 LGPL 또는 GPL이 될 수 있습니다. GPL 버전의 FFmpeg를 사용하는 경우, ffmpeg-cpp를 사용하는 프로젝트도 GPL을 따라야 합니다.


위의 모든 정보는 프로젝트의 README에서 직접 가져온 것입니다. 다른 내용은 추가하거나 추론하지 않았습니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트