ffmpeg - stream audio/video encoder/conveter

개요

패브리스 밸라드 가 개발한 오픈소스 비디오/오디오 변환기 및 레코더.

대부분의 플레이어가 사용하고 있으며 라이선스는 LGPL 이나 일부 모듈이 GPL 을 사용하고 있음.

ffmpeg 를 사용하여 개발시 LGPL 을 만족하려면 https://www.ffmpeg.org/legal.html 에 따라 작업해야 함.

Linux Build

  1. 개발 툴 설치

    sudo yum install yasm gcc
  2. Source download
  3. LGPL 로 사용하려면 --enable-gpl --enable-nonfree 2개의 옵션을 절대 사용하면 안 됨.

    ./configure --enable-gpl --enable-nonfree
  4. configure 로 빌드 환경 구성

    ./configure --enable-shared
  5. 빌드

    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


https://stackoverflow.com/questions/27568254/how-to-extract-1-screenshot-for-a-video-with-ffmpeg-at-a-given-time


동영상 포맷 변경

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