* ffmpeg 다운로드(빌드된 버전 Windows 용)
소스 : https://ffmpeg.org/download.html
- ffmpeg.exe 파일 단독으로 모든 기능
- 상용프로그램(WonderShare Video converter) 보다 더 동영상 인코딩 속도가 빠르고 화질 좋음
//-----------------------------------------------------------------------------
- 빌드된 바이너리 실행파일 다운로드
https://www.gyan.dev/ffmpeg/builds/
https://github.com/BtbN/FFmpeg-Builds/releases
https://www.videohelp.com/software/ffmpeg
//-------------------------------------
* essential 버전과 full 버전 차이
- v4.4.1 파일 크기 :
essential = 73M (13M),
full =104M (32M)
- 지원하는 코덱과 포맷 차이
- 지원 코덱 확인방법
ffmpeg -codecs
ffmpeg -formats
//-------------------------------------
* GPL , LGPL 라이센스 차이
- ffmpeg 파일 크기 차이(v4.4)
GPL = 88.6M
LGPL = 62.3M (기능 적음)
GPL : 이용하면 무조건 소스 오픈
- 제한이 많은 대신 사용할 수 있는 기능이 많음
LGPL : 수정없이 라이브러리로 사용시에는 소스 오픈 안해도 됨
- 제한이 적은 대신 기능이 줄어듬
//-----------------------------------------------------------------------------
일부 파일(세로가 긴 동영상)에서 에러 발생시 해결 방법
- 에러 메시지
Impossible to convert between the formats supported by the filter 'graph 0 input from stream 0:0' and the filter 'auto_scaler_0'
Error reinitializing filters!
Failed to inject frame into filter network: Function not implemented
Error while processing the decoded data for stream #0:0
- 해결방법
정식 release 버전에서 발생(v4.4.1)
master 빌드 버전을 다운로드 받는다. (정식 릴리즈가 아닌 최신 수정된 소스를 빌드한 버전)
//-----------------------------------------------------------------------------
* FFmpeg를 활용한 비디오 유틸
//==========
- 기본 사용 방법
ffmpge '입력 옵션' '입력 파일' '출력 옵션' '출력 파일'
- ffmpeg 옵션(option)
https://ffmpeg.org/ffmpeg.html
- 입력 파일 지정 : -i input.mp4
- 형식 강제 지정 : -f gif
- 시작 위치 : -ss 00:00:02 (2초에서 시작)
- 끝 위키 : -to 00:00:10 (10초에서 끝)
- 읽을 길이 설정(입력) : -t 3 (3초 길이 읽기)
- 코덱 설정 (기본)
-c:v libx264 (H.264)
-c:v libx265 (H.265, HEVC)
- GPU 가속
- 입력
-hwaccel cuvid -c:v h264_cuvid (H.264)
-hwaccel cuvid -c:v hevc_cuvid (H.265, HEVC)
- 출력(인코딩 코덱)
-c:v h264_nvenc (H.264)
-c:v hevc_nvenc (H.265, HEVC)
- bitrate 설정 : -b 2048k
-b:v 1048k (비디오)
-b:a 128k (오디오)
- framerate 설정(fps) : -r 24 (초당 24프레임)
- 크기 조정 : -s 640x480
- 입력부에서 가속을 쓰면 안될수 있음
- 파일 형식 지정 : -f mp4 (mp4 파일)
-y : 묻지도 않고 파일 덮어쓰기
- 오디오 선택
-map 0:v:0 0:a:1 (1번째 비디오, 2번째 오디오 선택)
//그외 옵션
- 양자화 (quantizer scale), 품질
-qp quantization parameter , -1 ~ 51 , 기본 -1
-cq constant quality mode in VBR rate , 0~51, 기본 0 , h264_nvenc 용
-crf constant quality mode ,-1 ~ FLT_MAX(float최대), 기본 -1 , libx264 용
- 인코딩 없이 트랙 복사
-map 0:a -c:a copy (모든 오디오 스트림을 복사)
- 인코딩 없이 일정 구간 자르기
https://trac.ffmpeg.org/wiki/Seeking
ffmpeg -y -i INPUT.MP4 -ss 00:01:00 -to 00:02:00 -map 0:v -c:v copy -map 0:a -c:a copy OUT.MP4
- 1분~2분 구간을 자른다, -ss 를 입력파일 뒤에 놓아야 정확하게 잘린다
- 비디오 파일 정보 보기
ffmpeg -i 파일이름
//-------------------------------------
* 필터 (-filter)
- 비디오 필터 : -filter:v = -vf
- 오디오 필터 : -filter:a = -af
- 비디오 해상도 변경
https://trac.ffmpeg.org/wiki/Scaling
ffmpeg -i input.jpg -vf scale=320:-2 output_320.png
- 오디오 속도 변경
ffmpeg -i t:\2.aac -filter:a "atempo=2" t:\2-(2).aac // 2배 빠르게 변경됨
//-------------------------------------
< 오디오 옵션 >
https://ffmpeg.org/ffmpeg.html#Options
https://trac.ffmpeg.org/wiki/audio%20types
-acodec : 오디오 코덱 (-codec:a 나 -c:a 의 별칭)
- mp3 = libmp3lame
- wav(pcm) = pcm_s16le 기본, (pcm 오디오 코덱 앞에 "pcm_" 을 추가, 예 "pcm_s24le" )
-ar : 샘플링 주파수 (예 44100)
-aq : VBR 오디오 품질 (-q:a의 별칭)
https://trac.ffmpeg.org/wiki/Encode/MP3
- libmp3lame 코덱에서 품질(kbit/s)
- 0 = 240, 4 = 165, 9=65
//------------------
// 참고
-ac : 오디오 채널수 ( 스테레오는 2 )
-sample_fmt : 샘플 포맷(예 s16)
-sample_fmts로 확인 가능
-ab : 고정 품질 bitrate, 코덱에 따라 다름, legacy
-f : 입출력 파일 포맷을 강제로 설정
//-----------------------------------------------------------------------------
< 자막 추출 방법 >
- 자막 스트림 확인 방법
ffmpeg -i input.mkv
- 자막 추출 명령
ffmpeg -i input.mkv -map 0:s:0 subtitles.srt
- 1번째 자막 0:s:0
- 2번째 자막 0:s:1
//-----------------------------------------------------------------------------
//사용예
ffmpeg -ss 00:00:02 -t 3 -i INPUT.mp4 -r 10 -s 640x480 OUTPUT.gif
- 입력 : 2초에서 시작해서 3초동안 읽는다
- 출력 : fps는 10, 해상도 640x480으로 변환
//=====================
// 배치파일
@echo on
setlocal
if "%~1"=="" goto :end1
@echo %TIME%
rem 품질 설정(양자화) %4
set qp=28
if not [%4]==[] ( set /a qp=%4 )
if %qp% geq 50 ( set qp=50)
if %qp% leq 10 ( set qp=10)
echo "%qp%"
rem 오디오 선택 %5 ==> vorbis로 모든 트랙 인코딩
set ch1=0
if not [%5] == [] ( set /a ch1=%5-1 )
if %ch1% geq 1 (
set map1=-map 0:v:0 -map 0:a:%ch1%
echo map1=%map1%
)
rem 출력 파일
set out="%~1"
@echo %out%
set temp1=%out:~-4%
set temp1=%temp1:~0,1%
echo %temp1%
if not "%temp1%" == "." (
set out=%out:~0,-5%-OUT%2%3q%qp%.%out:~-4%
)else (
set out=%out:~0,-4%-OUT%2%3q%qp%.%out:~-3%
)
@echo %out%
rem 입력 옵션 %2
set io=-hwaccel cuvid -c:v h264_cuvid
@rem if "%2" == 4 set io=-hwaccel cuvid -c:v h264_cuvid
if "%2" == "5" set io=-hwaccel cuvid -c:v hevc_cuvid
rem 출력 옵션 %3
set oo=-c:v h264_nvenc
@rem if "%3" == "4" set oo=-c:v h264_nvenc
if "%3" == "5" set oo=-c:v hevc_nvenc
@rem ffmpeg -hwaccel cuvid -c:v h264_cuvid -y -i INPUT.mkv -c:v h264_nvenc -map 0:v -map 0:a -c:a libvorbis OUT.mkv
echo ffmpeg %io% -y -i "%~1" %oo% -qp %qp% -map 0:a -c:a copy %out%
ffmpeg %io% -y -i "%~1" %oo% -qp %qp% -map 0:v -map 0:a -c:a libvorbis %out%
@echo %TIME%
exit /b
:end1
echo fmpg.bat "파일이름" 입력코덱 출력코덱 양자화
echo ex) fmpg.bat "파일이름" 4 5 35
//=====================
//인코딩 속도 비교
- 소프트웨어(기본)
ffmpeg -y -i avatar.2mbps-o.mkv -c:v libx264 avatar.2mbps-4-sw.mkv (속도 = 1.1x)
ffmpeg -y -i avatar.2mbps-o.mkv -c:v libx265 avatar.2mbps-5-sw.mkv (속도 = 0.52x)
ffmpeg -y -i avatar.2mbps-5-q25.mkv -c:v libx264 avatar.2mbps-54-sw.mkv (속도 = 1.11x)
ffmpeg -y -i avatar.2mbps-5-q25.mkv -c:v libx265 avatar.2mbps-55-sw.mkv (속도 = 0.52x)
-하드웨어(GPU 가속)
ffmpeg -y -i avatar.2mbps-o.mkv -c:v h264_nvenc avatar.2mbps-4-hw.mkv (속도 = 10.5x)
ffmpeg -y -i avatar.2mbps-o.mkv -c:v hevc_nvenc avatar.2mbps-5-hw.mkv (속도 = 10.1x)
ffmpeg -hwaccel cuvid -c:v h264_cuvid -y -i avatar.2mbps-o.mkv -c:v h264_nvenc avatar.2mbps-44-hw-in.mkv (속도 = 15.5x)
ffmpeg -hwaccel cuvid -c:v h264_cuvid -y -i avatar.2mbps-o.mkv -c:v hevc_nvenc avatar.2mbps-45-hw-in.mkv (속도 = 11.8x)
기본 -qp (양자와) 값이 40 정도로 예상
ffmpeg -hwaccel cuvid -c:v h264_cuvid -y -i avatar.2mbps-o.mkv -c:v hevc_nvenc -qp 30 avatar.2mbps-5-q30.mkv (속도 = 8.46x)
ffmpeg -hwaccel cuvid -c:v hevc_cuvid -y -i avatar.2mbps-5-q25.mkv -c:v hevc_nvenc avatar.2mbps-54-hw-in.mkv (속도 = 12.1x)
ffmpeg -hwaccel cuvid -c:v hevc_cuvid -y -i avatar.2mbps-5-q25.mkv -c:v hevc_nvenc avatar.2mbps-55-hw-in.mkv (속도 = 11.8x)
//=====================
//양자화별 용량 비교
- 주의! 버전에 따라 양자화 수치에 따른 품질이 다를 수 있다.
- 이전에는 28이 적당했는데 2021년에는 24가 적당(28은 품질 낮음)
-원본 : avatar 508M
- H.264(AVC)
ffmpeg -hwaccel cuvid -c:v h264_cuvid -y -i avatar.2mbps-o.mkv -c:v h264_nvenc -qp 10 avatar.2mbps-4-q10.mkv
기본 : 66
10 : 1860
20 : 637
30 : 221 <== 적당(28)
40 : 81
50 : 36
- H.265(HEVC)
ffmpeg -hwaccel cuvid -c:v h264_cuvid -y -i avatar.2mbps-o.mkv -c:v hevc_nvenc -qp 30 avatar.2mbps-5-q30.mkv
기본 : 66
10 : 1530
20 : 501
30 : 168 <== 적당
40 : 59
50 : 23
'Tips' 카테고리의 다른 글
포토샵 사용 팁 모음 (0) | 2017.02.21 |
---|---|
윈도우 10 '이 앱을 열 수 없습니다' 에러 해결법 (0) | 2017.02.20 |
Windows 10 녹화 기능 사용 방법 (1) | 2017.02.12 |
비디오를 gif로 만들기(FFMPEG 이용) (0) | 2017.02.12 |
MacType - 윈도우 10 폰트를 애플 맥처럼 보이게 하는 유틸 (2) | 2017.02.02 |