ffmpeg - stream audio/video encoder/conveter
개요
패브리스 밸라드 가 개발한 오픈소스 비디오/오디오 변환기 및 레코더.
대부분의 플레이어가 사용하고 있으며 라이선스는 LGPL 이나 일부 모듈이 GPL 을 사용하고 있음.
ffmpeg 를 사용하여 개발시 LGPL 을 만족하려면 https://www.ffmpeg.org/legal.html 에 따라 작업해야 함.
Linux Build
개발 툴 설치
sudo yum install yasm gcc
- Source download
LGPL 로 사용하려면 --enable-gpl --enable-nonfree 2개의 옵션을 절대 사용하면 안 됨.
./configure --enable-gpl --enable-nonfree
configure 로 빌드 환경 구성
./configure --enable-shared
빌드
make
Command line 에서 사용
ffmpeg 주요 옵션
사용 예제
ffmpeg -i source_media.mp4 -y -c:v libx264 -subq 5 -flags global_header -trellis 0 -refs 1 -level 30 -coder 0 -bf 0 -weightp 0 -threads 12 -b:v 1007k -c:a aac -ab 128k -ac 2 outout.mp4
동영상 포맷 변경
mov to mp4
ffmpeg -i movie.mov -vcodec copy -acodec copy out.mp4
폴더내 모든 mov 를 mp4 로 변경
for i in *.mov; do f=`basename "$i" .mov`;ffmpeg -i "$i" -vcodec copy -acodec copy "$f.mp4";done
m4v
ffmpeg -i input.m4v out.mp4
개발 언어에서 사용
ffmpeg 는 C 언어로 된 SDK 를 제공하며 다양한 언어에 바인딩 되어 있음.
PHP
ffmpeg C library 를 바인딩한 것은 아니며 fork() 로 ffmpeg 프로세스 호출
go
go 는 ffmpeg Library 를 직접 binding 한 제품이 많으므로 fork 방식의 php 라이브러리보다는 성능이 훨등히 우수할 것으로 판단되며 fork 방식을 사용하더라도 backend 에 적합한 go 의 특성상 go 로 제작하는 것이 좋음
Ref
- https://ffmpeg.org/ffmpeg.html
- https://www.ostechnix.com/20-ffmpeg-commands-beginners/
- https://www.catswhocode.com/blog/19-ffmpeg-commands-for-all-needs
- https://www.tecmint.com/ffmpeg-commands-for-video-audio-and-image-conversion-in-linux/