FFmpeg는 비디오, 오디오 등의 멀티미디어 파일을 처리할 수 있는 프로그램입니다. 이 프로그램으로 할 수 있는게 너무 많아서 공식 웹사이트의 설명에는 '오디오와 비디오를 기록하고(record), 변환하고(convert), 스트리밍(stream)하는 완전한 크로스 플랫폼 솔루션이다' 라고 합니다.
프로그래밍 적으로 ffmpeg는 오픈소스 라이브러리(프레임워크)로 동영상 플레이어를 만들거나 멀티미디어 콘텐츠를 다루는 앱개발에서 유용하게 사용할 수 있습니다. (영상 관련 개발에는 필수적으로 알아둬야 하는 라이브러리) ffmpeg C++ 관련 강의나 튜토리얼은 별로 많지 않아서 나중에 시간이 있을 때 한번 다뤄보면 어떨까 싶습니다. 물론 이 포스팅은 프로그래밍이 아니라 FFmpeg를 설치하고 사용하는 내용입니다.
FFmpeg 는 공식 웹사이트에서 다운로드 받을 수 있습니다. 리눅스, 윈도우, MacOS 의 패키지를 선택할 수 있습니다.
윈도우라면 Scoop을 사용하는 것도 괜찮습니다.
윈도우 패키지 매니저 Scoop 설치와 사용법 (tistory.com)
scoop.sh에서 검색해보면 main 버킷에 있습니다.
scoop install ffmpeg
설치가 완료되면 버전을 체크해봅니다. 윈도우용은 MSYS의 gcc로 빌드된거네요.
ffmpeg -version
우분투는 다음의 명령어로 설치가능합니다.
sudo apt update
sudo apt install ffmpeg
사용가능한 코덱을 출력합니다. -endcoders 가 엔코더이고 -decoders가 디코더입니다. 엔코딩은 파일을 코딩(암호화)시키는 기능이고 디코딩은 암호화된 파일을 푸는 기능입니다. 출력해보면 상당히 많은 종류의 엔코더와 디코더가 들어있습니다. 인터넷이 발전 과정에서 많이 사용되었던 웬만한 포맷들은 대략 다 들어 있는데요. 코덱은 특허가 있기 때문에 유료 코덱을 이용한 동영상의 변환 등을 할 때는 라이센스에 대해 체크하도록 주의합니다.
ffmpeg -encoders
간단한 mp3 변환부터 시작해 보겠습니다. 샘플 mp3 영상을 다운로드 받아서 ogg 파일로 변환합니다. -i는 인풋파일을 말하고 뒤에 나오는 ogg 파일은 아웃풋 파일입니다. -hide_banner는 좀 더 깔끔하게 결과를 볼 수 있도록 합니다.
ffmpeg -i sample2.mp3 sample.ogg -hide_banner
파일 포맷(엔코더)을 지정하지 않아도 ffmpeg가 알아서 파일 확장자를 기반으로 변환합니다.
마찬가지로 간단한 명령어로 mp4에서 다른 포맷으로 변환할 수 있습니다. 요즘은 avi를 점점 안 쓰지만 한때 동영상 확장자에 avi 많이 봤었지요. 코덱과 상세사항을 지정하지 않고 avi로 변환하면 화질이 좀 떨어지는 대신 용량이 줄어들게 됩니다.
ffmpeg -i sample_4min.mp4 output.avi
핸드폰으로 촬영한 영상을 코덱을 지정해 변환해봤습니다. -c:v는 비디오 엔코더 -c:a는 오디오 엔코더를 넣습니다. 엔코더는 위의 내용처럼 -encoders 옵션에서 볼 수 있습니다.
ffmpeg -i sample_4min.mp4 -c:v mpeg4 -c:a ac3 output.mp4
h264 코덱이 mpeg4로 매핑됩니다. 560메가에 4분짜리 영상이 110메가 정도로 압축되더군요. (영상에 따라 압축률이 다름) 해상도는 그대로지만 화질은 약간 손실이 있는 것 같았습니다. 아무래도 압축률이 높으면 흐릿해지는 부분이 생겨납니다. 하지만 용량대비 가성비가 좋네요.
출력 파일을 확인해보면 코덱이 바뀌었습니다.
여기까지 기본 변환 방법이고 디테일한 내용은 ffmpeg 문서를 참고합니다.