반응형

ffmpeg은 그야말로 만능 비디오/오디오 처리 도구다.

수많은 프로젝트들이 ffmpeg을 사용해서 만들어졌으며, 소스가 공개되어 다양한 커스텀 버전도 존재한다.

 

오히려 너무 기능이 방대해서 오히려 불편을 겪을 때가 있을 정도다.

예를 들면, MainConcept의 HEVC 인코더는 ffmpeg 플러그인 형태로 배포 되는데, 이게 순정품(?)과 꽤 차이가 있다.

커스텀 버전의 ffmpeg을 사용해야만 인코딩을 할 수 있는데, 이게 순정품(?)의 기능 중 없는 게 있다.

AVS 입력이 완벽하지 않기도 하고, 정확히 어떤 모듈까지 사용됐는지 일일이 찾기도 번거롭다.

 

이런 경우는 누구의 잘못도 아니지만, 여튼 사용하는 입장에서 불편한 건 사실[각주:1]이다.

이럴 때 손쉽게 쓸 수 있는 방법은 ffmpeg 두 버전 간에 비디오 데이터를 파이프로 넘기는 것이다.

 

영상 입력 및 처리와 인코딩을 별도의 ffmpeg이 처리하는 예제

 

인터넷을 뒤져보면 대략 아래와 같은 형태로 사용하라는 글들이 많이 보인다.

 

ffmpeg.exe -i jureka.mp4 -an -vcodec rawvideo - | "c:\program files\MainConcept\FFmpeg-PlugIns\bin\ffmpeg.exe" -i - -c:v omx_enc_hevc -omx_core omxil_core.dll -omx_name OMX.MainConcept.enchevc.video test.mkv

 

하지만, 이렇게 하면 정상적으로 동작하지 않는다.

ffmpeg 간에 데이터를 파이프로 넘길 때는 반드시 컨테이너 포맷을 명시해야 한다.

여기에 mkv나 mp4 등을 명시할 수도 있지만, 권장되는 포맷은 nut 이다.

 

이렇게 하면 완벽하게 비디오 데이터를 두 개의 ffmpeg에서 역할을 나눠 처리할 수 있다.

 

ffmpeg.exe -i jureka.mp4 -an -f nut -vcodec rawvideo - | "c:\program files\MainConcept\FFmpeg-PlugIns\bin\ffmpeg.exe" -i - -c:v omx_enc_hevc -omx_core omxil_core.dll -omx_name OMX.MainConcept.enchevc.video test.mkv

 

그런데, 명령행을 보다 보면 뭔가 눈에 거슬린다.

두 개의 ffmpeg에서 서로 다른 진도율을 같은 자리에 계속 표시해서 뭔가 혼란스럽다.

 

이럴 때는 앞의 ffmpeg의 loglevel을 거의 출력하지 않도록 수정하면 깔끔하다.

 

ffmpeg.exe -i jureka.mp4 -an -f nut -vcodec rawvideo - -loglevel panic | "c:\program files\MainConcept\FFmpeg-PlugIns\bin\ffmpeg.exe" -i - -c:v omx_enc_hevc -omx_core omxil_core.dll -omx_name OMX.MainConcept.enchevc.video test.mkv

 

 

  1. 권장되는 방법은 직접 컴파일해서 쓰는 것인데, 이건 또 다른 거대한 불편함을 낳음 [본문으로]
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band