제가 예전에 올려드린 배치파일 내에서 ffmpeg.exe 옵션에 대한 도움말입니다

길이 길어지는걸 방지하기 위해 따로 옮겼습니다

구형 배치파일을 기준으로 작성되었습니다만 신형배치파일과 대동소이합니다


관련글
2011/07/28 - hanrel hansun baros 같은 릴 직접 만들기
2011/07/01 - hdtv 60프레임 인코딩 ffmpeg으로 메구이보다 더 간단하게 인코딩
2011/07/16 - ffmpeg 으로 추노 시티헌터 같은 텔레시네 비디오 역텔레시네 ivtc 하기




배치파일을 수정하시려면

 

이렇게 우클릭해서 편집을 눌러주시면 됩니다




@echo off
for %%i in (%1, %2, %3, %4, %5, %6, %7, %8, %9) do (
ffmpeg.exe -y -i "%%~i" -threads 0 -vcodec libx264 -preset slow -crf 26 -sws_flags lanczos -vf "yadif=1:-1, crop=in_w-2*16:in_h-2*16, scale=1280:720, setsar=1:1" -r 60000/1001 -acodec aac -strict experimental -ab 192k -ac 2 -ar 44100 "%%~ni.720p_60fps.x264_crf26.aac_192k.HQ.mp4"
)


-threads 0

몇 스레드로 인코딩할지 결정

0으로 설정하면 자동선택되나 약간의 버그가 있어서 수동으로 설정해주는게 좋음

cpu자원을 과하게 먹으며 ffmpeg이 잠깐 먹통이 되는 경우가 종종있는데 ffmpeg 자체 문제로 사료됨

자신의 코어수로 설정

하이퍼스레딩을 쓴다면 코어수*2

최근 버전에서는 이문제가 완전히 해결됨

그냥 0으로 쓰는게 최고

아니면 그냥 이옵션을 생략해두됨 그러면 기본값으로 0이 적용됨



-vcodec libx264 -preset medium

x264를 이용해서 medium 프리셋 옵션으로 인코딩을 한다는 뜻

작년부터 x264에서 자체적으로 프리셋(일반적인 용도로 최적화된 옵션세팅)을 넣어서 배포하기 시작했는데

x264를 사용하는 많은 국산외산 인코더들은 이기능을 잘 활용하지않고

인코딩 속도를 위해 엉망인 옵션(me랑 subme를 대폭 낮추면 속도업 화질다운)을 기본설정으로 사용하고있습니다

medium 전단계인 fast만해도 충분히 좋은 화질을 얻을수 있구요

컴터 cpu가 빠방하다면 medium대신 slow나 veryslow를 넣어주시면됩니다

만약 baseline profile만 재생가능한 휴대기기용으로 인코딩을 하시려면
-x264opts cabac=0:bframes=0:ref=1:8x8dct=0:weightp=0
이걸 추가해주시면 baseline profile로 인코딩을 해줍니다
소형기기에서 재생하실테니 해상도도 줄여주시고
60프레임 bob디인터레이싱도 필요없으니 중간에 yadif=1,-1도 yadif=0,-1로 바꿔주시고
60000/1001 이것도 30000/1001로 수정해주시면 됩니다
-crf 26도 abr모드로 바꿔주세요 -b 1000k 이런식으로  

아이패드나 휴대기기용으로 main profile로 인코딩하시려면
-x264opts 8x8dct=0:weightp=0:level=31
이걸 넣어주세요
main은 baseline보다 cpu에 많이 부담이 가는데 high보다는 좀 적게 갑니다


-crf 26

crf모드라고 화질기준 인코딩입니다 2pass보다 낫습니다

2pass는 주어진 비트레이트 내에서 최대효율을 추구한다면

crf는 비트레이트 제한이 없습니다

그래서 이미 손실이 일어난 hdtv영상이 원본인경우 오버슈팅이 발생하기도하는데
다른옵션을 통해 비트레이트 낭비를 막아줄수 있습니다
자세한거는 따로 물어보시고 일반인들은 요부분 패스하셔두됩니다
이글 참고 2010/06/14 - hdtv인코딩 깍두기영상 x264로 crf인코딩할때 용량 줄이는 팁 

더 좋은 화질을 추구하신다면 -crf 25로 숫자를 줄여주시면 됩니다

근데 26만해도 충분하실겁니다 27 28정도로 높여도 hdtv소스가 구린경우는 별로 화질저하가 잘 느껴지지 않습니다 대신 용량은 팍팍 줄어들죠

abr모드로 인코딩을 하고싶으시면 -crf 26을 지우시고 -b 3000k 와같이 용량을 직접 적어주시면됩니다



-sws_flags lanczos

lanczos 알고리즘으로 리사이즈를 합니다 근데 libavfilter로 리사이즈를 처리하는거라서 적용되는건지 확실치 않네요



 -vf "yadif=1:-1, crop=in_w-2*16:in_h-2*16, scale=1280:720, setsar=1:1"

큰따옴표 전체가 ffmpeg에 인코딩들어가기 전에 libavfilter로 처리해주는 부분입니다


yadif=1:-1,

60프레임 bob 디인터레이싱 옵션입니다 움직임이 많은 영상에서는 필수죠

예능같은거 인코딩하실때는 굳이 60프레임으로 하실 필요없습니다

=1:-1 부분을 =0-:1 로 바꿔주시면

30프레임으로 디인터레이싱되서 인코딩 됩니다

더불어 뒤에 나오는 60000/1001 부분도 30000/1001로 수정해주셔야겠죠

그리고 일부 드라마나 hd로 방영되는 영화들은 이방법을 쓰면 안됩니다

그넘들은 원본이 24프레임이라서 텔레시네를 통해 60i로 변환되서 방송되는데

이들을 원래대로 돌리기위해서는 디인터레이싱이 아니라 역텔레시네(ivtc)를 해줘야해요

mplayer필터기능을 통해 ivtc를 해주는 필터(명령어 mp=ivtc)를 사용할수 있는데 현재는 제대로 작동이 안됩니다

아 그리고 소스자체가 프로그레시브인 블루레이나 캠코더영상은 이부분을 완전 빼주세요


crop=in_w-2*16:in_h-2*16 

이건 좌우 위아래서 16픽셀씩 잘라낸다는 뜻입니다

hdtv는 모서리에 블랙바나 잡신호가 끼고 방송국mpeg2인코더 특성상 1088로 출력되기때문에 크롭이 필수입니다

기호에 따라 바꿔주시면 됩니다


 scale=1280:720, setsar=1:1

scale은 화면크기구요 setsar은 그냥 냅두세요

setsar부분을 건드려주시면 아나몰픽 인코딩이 가능합니다




-r 60000/1001

libavfilter에서 60프레임으로 넘겨주기 때문에 60프레임이라고 따로 지정해줘야합니다

30프레임이면 30000/1001 이라고

60대신 60000/1001을 쓰는 이유는 방송규격이 그래서



-acodec libmp3lame -ab 160k

오디오코덱을 mp3로 오디오 비트레이트를 160k로 지정해주는 구문입니다

hdtv방송 출력(보통 192k ac3 일본방송은 aac)을 그대로 넣고 싶다면

이부분 전체를 -acodec copy로 바꿔주시면됩니다

그러면 인코딩없이 원본이 그대로 들어갑니다

aac로 인코딩 하겠다는 분들은

-acodec libmp3lame대신에 -acodec aac -strict experimental 을 넣어주시면됩니다

원래는 외부소스인 faac를 썼었는데 최근에 ffmpeg이랑 결별을 했구요

이제 ffmpeg은 자체적인 aac인코더를 씁니다

근데 faac나 ffmpeg aac나 성능이 nero에서 배포하는 aac인코더보다 못해요 그래서 experimental 옵션을 넣어줘야합니다

예전에는 둘다 완전 쓰레기였는데 요즘에는 그래도 인코더 구실을 합니다

아 그리고 기존 메구이를 이용한 방법에서는 일본방송 ts를 인코딩할때 일본방송은 aac를 써서 에러가 났었는데

ffmpeg을 이용한 방법에서는 에러없이 잘됩니다




"%%~ni.720p_60fps.x264_crf26.aac_192k.HQ.mp4"

컨테이너를 mp4로 지정합니다 mkv를 쓰셔두되구요

근데 왠만하면 avi를 쓰지맙시다 h264코덱이랑 궁합이 안좋아요

특정폴더에 인코딩한걸 출력하길 원하시면 

"c:\원하는폴더\%%~ni.720p_60fps.x264_crf26.aac_192k.HQ.mp4"

이런식으로 바꿔주면 됩니다

.720p_60fps.x264_crf26.aac_192k.HQ

요부분도 원하시는대로 바꾸셔두됨 




=================================================================================
내용추가


start /high /b /wait ffmpeg.exe -y -i "%~1" -threads 0 -vcodec libx264 -preset slow -crf 26 -sws_flags lanczos -vf "yadif=1:-1, crop=in_w-2*16:in_h-2*16, scale=1280:720, setsar=1:1" -r 60000/1001 -acodec libmp3lame -ab 192k -ac 2 -ar 44100 "%~d1%~p1%~n1.720p_60fps.x264_crf26.mp3_192k.HQ.mp4"


신형배치파일 구문에서

start /high /b /wait
시피유 활용 우선순위를 높음으로 ffmpeg.exe를 작동시킵니다

다른작업시 약간 버벅거릴수 있습니다 원치 않으시면 이부분을 빼주세요



"%~d1%~p1%~n1.720p_60fps.x264_crf26.mp3_192k.HQ.mp4"
폴더경로를 다 지정해주게 바꿨습니다

특정폴더에 저장하고 싶으시면 %~d1%~p1 요부분을 바꿔주세요 c:/동영상/ 이렇게 말이죠

 


Posted by 아싸좋구나
,