FFMPEG

깊이있는 삽질 Ubuntu Korea Community Wiki
이동: 둘러보기, 검색

설치[편집]

sudo apt install ffmpeg

H264 인코딩[편집]

CRF[편집]

  • 인코딩되는 파일 크기가 크게 중요하지 않을 경우 품질 위주로 인코딩한다.
  • 1패스로 나름 괜찮은 결과를 얻을 수 있다.
  • 단점으로는 인코딩하기 전에 파일 크기나 비트레이트를 알 수 없다는 거.
  • 스케일 범위는 0부터 51까지. 23이 기본값이다. 일반적으로 18부터 28까지 사용한다.
  • CRF는 +6은 비트레이트가 반, -6은 비트레이트가 두배다.
  • 정확하게 정해진 기준은 없으므로 본인에게 맞는 값을 선택하는게 좋다. 황금눈깔은 알아서 선택하자
  • 프리셋은 cpu를 얼마나 써제낄건지 고르는거다. 일반적으로 slow 프리셋을 쓴다.
  • tune은 여러가지 형태들 중에 지정해서 최상의 값을 얻어낼 수 있다. film, animation, grain, stillimage, psnr, ssim, fastdecode, zerolatency 중에 고르면 된다.
  • 잘 모르겠으면 tune 옵션은 안 써도 된다.
  • 다음과 같은 명령어로 프리셋과 tune을 뭘 쓸 수 있는지 볼 수 있다.
ffmpeg -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 -   // Mac / Linux
ffmpeg -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 NUL // Windows
  • CRF는 다음 명령어처럼 사용할 수 있다. 음성은 stream copy
ffmpeg -i input.avi -c:v libx264 -preset slow -crf 22 -c:a copy output.mkv

2pass[편집]

  • 파일 크기가 일정해야 할 경우 사용한다. 10분짜리에 200메가짜리 클립이 필요한 경우 등
  • 200메가 * 8메가 / 600초 = 2730kb/s가 나오게 된다.
  • 여기서 오디오도 계산하자면.. 2730-128kb/s = 2602kb/s
  • 약 2600k로 잡아서 2pass를 써보자면..
ffmpeg -y -i input.avi -c:v libx264 -preset medium -b:v 2600k -pass 1 -c:a aac -b:a 128k -f mp4 pass.mp4
ffmpeg -i pass.mp4 -c:v libx264 -preset medium -b:v 2600k -pass 2 -c:a aac -b:a 128k output.mp4

Lossless[편집]

  • -crf 0으로 최대한 무손실로 인코딩이 가능하다고 하지만..
  • 다음 명령어로 사용
ffmpeg -i input.avi -c:v libx264 -preset ultrafast -crf 0 output.mkv
ffmpeg -i input.avi -c:v libx264 -preset veryslow -crf 0 output.mkv
  • 출력되는 파일은 엄청나게 크다. 황금눈깔이 아니면 그다지 쓸 일 없다

프리셋 변경[편집]

  • 자신이 굉장한 전문가일 경우 사용하는 옵션. MPEG 그룹에서 엄청난 테스트를 거쳐 나온 프리셋을.. 어쨌든 변경이 가능.. 하다..
  • x264opt라는 옵션은 없어졌고 x264-params로 대체되었다. 다음과 같은 명령어로 사용가능.
ffmpeg -i input.avi -c:v libx264 -preset slow -crf 22 -x264-params keyint=123:min-keyint=20 -c:a copy output.mkv -c:a copy output.mkv

CBR[편집]

  • 원래 CBR 모드를 지원하지 않는데, ABR을 조정해서 어느정도 확보해 줄 수 있다.

ffmpeg -i input.avi -c:v libx264 -x264-params "nal-hrd=cbr" -b:v 1M -minrate 1M -maxrate 1M -bufsize 2M output.ts

  • 보통 플레이어들 버퍼가 빵빵하지만, 위 명령을 사용할 경우 허용되는 비트레이트에서 최상의 값을 뽑아내려고 노력할거다.
  • 다음 명령어를 이용해서 2패스로 비트레이트에 최대한 맞출 수 있다.
ffmpeg -i input.avi -c:v libx264 -b:v 1M -maxrate 1M -bufsize 2M -pass 1 -f mp4 pass.mp4
ffmpeg -i pass.mp4 -c:v libx264 -b:v 1M -maxrate 1M -bufsize 2M -pass 2 output.mp4

호환성[편집]

  • 오래된 디바이스랑 호환성을 맞추려면 -profile:v baseline -level 3.0 옵션을 주면 된다.
  • 아이폰 3G, 아이팟 터치 2세대 이상을 지원하려면 -profile:v baseline -level 3.1
  • 아이패드, 애플TV 2, 아이폰4 이상을 지원하려면 -profile:v main -level 3.1
  • 애플TV 3, 아이패드2, 아이폰4s 이상을 지원하려면 -profile:v high -level 4.1
  • 아이패드 에어, 아이폰 5s 이상을 지원하려면 -profile:v high -level 4.2

이미지 크기변경[편집]

  • 320x240으로 변경하기
ffmpeg -i input.avi -vf scale=320:240 output.avi
  • 이미지도 변경 가능하다
ffmpeg -i input.jpg -vf scale=320:240 output.png
  • 비율 유지를 하고싶다면
ffmpeg -i input.jpg -vf scale=320:-1 output.png
  • 늘이기나 줄이기
  • iw는 input의 넓이, ih는 input의 높이
ffmpeg -i input.jpg -vf scale=iw*2:ih output.png
ffmpeg -i input.jpg -vf scale=iw*.5:ih*.5 output.png
  • 아예 수식을 집어넣을수도 있다.
ffmpeg -i input.jpg -vf scale="'if(gt(a,4/3),320,-1)':'if(gt(a,4/3),-1,240)'" output.png