FFMPEG: 두 판 사이의 차이
imported>Drake (새 문서: = 설치 = <source lang="bash"> sudo apt install ffmpeg </source> = 이미지 크기변경 = * 320x240으로 변경하기 <source lang="bash"> ffmpeg -i input.avi -vf scale=320:240 ou...) |
imported>Drake 편집 요약 없음 |
||
| 3번째 줄: | 3번째 줄: | ||
sudo apt install ffmpeg | sudo apt install ffmpeg | ||
</source> | </source> | ||
= H264 인코딩 = | |||
== CRF == | |||
* 인코딩되는 파일 크기가 크게 중요하지 않을 경우 품질 위주로 인코딩한다. | |||
* 1패스로 나름 괜찮은 결과를 얻을 수 있다. | |||
* 단점으로는 인코딩하기 전에 파일 크기나 비트레이트를 알 수 없다는 거. | |||
* 스케일 범위는 0부터 51까지. 23이 기본값이다. 일반적으로 18부터 28까지 사용한다. | |||
* CRF는 +6은 비트레이트가 반, -6은 비트레이트가 두배다. | |||
* 정확하게 정해진 기준은 없으므로 본인에게 맞는 값을 선택하는게 좋다. <s>황금눈깔은 알아서 선택하자</s> | |||
* 프리셋은 cpu를 얼마나 써제낄건지 고르는거다. 일반적으로 slow 프리셋을 쓴다. | |||
* tune은 여러가지 형태들 중에 지정해서 최상의 값을 얻어낼 수 있다. film, animation, grain, stillimage, psnr, ssim, fastdecode, zerolatency 중에 고르면 된다. | |||
* 잘 모르겠으면 tune 옵션은 안 써도 된다. | |||
* 다음과 같은 명령어로 프리셋과 tune을 뭘 쓸 수 있는지 볼 수 있다. | |||
<source lang="bash"> | |||
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 | |||
</source> | |||
* CRF는 다음 명령어처럼 사용할 수 있다. 음성은 stream copy | |||
<source lang="bash"> | |||
ffmpeg -i input.avi -c:v libx264 -preset slow -crf 22 -c:a copy output.mkv | |||
</source> | |||
== 2pass == | |||
* 파일 크기가 일정해야 할 경우 사용한다. 10분짜리에 200메가짜리 클립이 필요한 경우 등 | |||
* 200메가 * 8메가 / 600초 = 2730kb/s가 나오게 된다. | |||
* 여기서 오디오도 계산하자면.. 2730-128kb/s = 2602kb/s | |||
* 약 2600k로 잡아서 2pass를 써보자면.. | |||
<source lang="bash"> | |||
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 | |||
</source> | |||
== Lossless == | |||
* -crf 0으로 최대한 무손실로 인코딩이 가능하다고 하지만.. | |||
* 다음 명령어로 사용 | |||
<source lang="bash"> | |||
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 | |||
</source> | |||
* 출력되는 파일은 엄청나게 크다. <s>황금눈깔이 아니면 그다지 쓸 일 없다</s> | |||
== 프리셋 변경 == | |||
* 자신이 굉장한 전문가일 경우 사용하는 옵션. MPEG 그룹에서 엄청난 테스트를 거쳐 나온 프리셋을.. 어쨌든 변경이 가능.. 하다.. | |||
* x264opt라는 옵션은 없어졌고 x264-params로 대체되었다. 다음과 같은 명령어로 사용가능. | |||
<source lang="bash"> | |||
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 | |||
</source> | |||
== 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패스로 비트레이트에 최대한 맞출 수 있다. | |||
<source lang="bash"> | |||
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 | |||
</source> | |||
== 호환성 == | |||
* 오래된 디바이스랑 호환성을 맞추려면 -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으로 변경하기 | * 320x240으로 변경하기 | ||
2017년 5월 30일 (화) 20:04 기준 최신판
설치[편집]
<source lang="bash"> sudo apt install ffmpeg </source>
H264 인코딩[편집]
CRF[편집]
- 인코딩되는 파일 크기가 크게 중요하지 않을 경우 품질 위주로 인코딩한다.
- 1패스로 나름 괜찮은 결과를 얻을 수 있다.
- 단점으로는 인코딩하기 전에 파일 크기나 비트레이트를 알 수 없다는 거.
- 스케일 범위는 0부터 51까지. 23이 기본값이다. 일반적으로 18부터 28까지 사용한다.
- CRF는 +6은 비트레이트가 반, -6은 비트레이트가 두배다.
- 정확하게 정해진 기준은 없으므로 본인에게 맞는 값을 선택하는게 좋다.
황금눈깔은 알아서 선택하자 - 프리셋은 cpu를 얼마나 써제낄건지 고르는거다. 일반적으로 slow 프리셋을 쓴다.
- tune은 여러가지 형태들 중에 지정해서 최상의 값을 얻어낼 수 있다. film, animation, grain, stillimage, psnr, ssim, fastdecode, zerolatency 중에 고르면 된다.
- 잘 모르겠으면 tune 옵션은 안 써도 된다.
- 다음과 같은 명령어로 프리셋과 tune을 뭘 쓸 수 있는지 볼 수 있다.
<source lang="bash"> 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 </source>
- CRF는 다음 명령어처럼 사용할 수 있다. 음성은 stream copy
<source lang="bash"> ffmpeg -i input.avi -c:v libx264 -preset slow -crf 22 -c:a copy output.mkv </source>
2pass[편집]
- 파일 크기가 일정해야 할 경우 사용한다. 10분짜리에 200메가짜리 클립이 필요한 경우 등
- 200메가 * 8메가 / 600초 = 2730kb/s가 나오게 된다.
- 여기서 오디오도 계산하자면.. 2730-128kb/s = 2602kb/s
- 약 2600k로 잡아서 2pass를 써보자면..
<source lang="bash"> 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 </source>
Lossless[편집]
- -crf 0으로 최대한 무손실로 인코딩이 가능하다고 하지만..
- 다음 명령어로 사용
<source lang="bash"> 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 </source>
- 출력되는 파일은 엄청나게 크다.
황금눈깔이 아니면 그다지 쓸 일 없다
프리셋 변경[편집]
- 자신이 굉장한 전문가일 경우 사용하는 옵션. MPEG 그룹에서 엄청난 테스트를 거쳐 나온 프리셋을.. 어쨌든 변경이 가능.. 하다..
- x264opt라는 옵션은 없어졌고 x264-params로 대체되었다. 다음과 같은 명령어로 사용가능.
<source lang="bash"> 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 </source>
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패스로 비트레이트에 최대한 맞출 수 있다.
<source lang="bash"> 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 </source>
호환성[편집]
- 오래된 디바이스랑 호환성을 맞추려면 -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으로 변경하기
<source lang="bash"> ffmpeg -i input.avi -vf scale=320:240 output.avi </source>
- 이미지도 변경 가능하다
<source lang="bash"> ffmpeg -i input.jpg -vf scale=320:240 output.png </source>
- 비율 유지를 하고싶다면
<source lang="bash"> ffmpeg -i input.jpg -vf scale=320:-1 output.png </source>
- 늘이기나 줄이기
- iw는 input의 넓이, ih는 input의 높이
<source lang="bash"> ffmpeg -i input.jpg -vf scale=iw*2:ih output.png ffmpeg -i input.jpg -vf scale=iw*.5:ih*.5 output.png </source>
- 아예 수식을 집어넣을수도 있다.
<source lang="bash"> ffmpeg -i input.jpg -vf scale="'if(gt(a,4/3),320,-1)':'if(gt(a,4/3),-1,240)'" output.png </source>