scripted_princess.png

*윈도 기준입니다.


ffmpeg등을 이용한 인코더를 사용하는 경우 보통 GUI가 달린 인코더 프로그램을 사용하시게 되지만, 꼭 그럴 필요는 없습니다.

오히려 그래픽 인터페이스가 달리지 않은 순정 ffmpeg로도 설정만 미리 해 두면 클릭 한두번에 간단히 인코딩이 가능합니다.

방법은 간단합니다. 일단 ffmpeg 인코더를 빌드하거나 다운받습니다. 이걸 직접 빌드하실 정도시면 딱히 이 글을 따르실 필요는 없으실테니,빌드 절차는 생략하겠습니다. 윈도용으로 빌드된 바이너리(exe파일)는 이 사이트에서 다운가능합니다.

http://ffmpeg.zeranoe.com/builds/

당연하지만 64비트 OS면 기왕이면 64비트용으로 받으시는 게 좋고, 그냥 다운로드받으신 후 압축파일 안에서 ffmpeg.exe파일을 찾으셔서 꺼내다 인코딩용으로 쓰시면 됩니다.

여기서 제공하는 ffmpeg가 마음에 드시지 않을 경우 아예 기존에 쓰시던 인코더 프로그램에서 ffmpeg를 추출해서 사용하시는 것도 가능합니다. 찾아보면 인코더 프로그램 폴더 안에 아예 ffmpeg.exe 혹은 이의 이름을 바꾼 바이너리 파일이 있는 경우가 있습니다. 이걸 추출해다 사용하시면 됩니다. 물론 개조가 들어갔으면 잘 안될 수도 있지만요.

하지만 이걸 인코딩할때 쓰려면 일일히 쉘을 띄워서 명령어를 입력해야 합니다.귀찮지요. 그러면 어떻게 하면 되는가. 배치파일을 만들어서 자동화 하면 됩니다. 바탕화면 등에 배치파일(.bat확장자 혹은 .cmd확장자)을 만들어 두면 그냥 동영상 파일을 그 배치파일에 드래그 앤 드롭 하는것 만으로 자동으로 인코딩을 시작시킬 수가 있습니다.


scripted_princess_2.png

scripted_princess_3.png

(그냥 이렇게 드래그앤 드롭만 해주면 알아서 인코딩을 합니다. 아예 마우스 오른쪽 버튼 매뉴로 등록시키는 개조도 가능하고요.)


물론 이렇게 하려면 배치스크립트랑 ffmpeg명령어들을 좀 알아야 겠지요?

아쉽게도 저도 배치스크립트나 ffmpeg에 직접 옵션을 주는 것은 썩 익숙하지 않습니다. 따라서 엔하위키를 참고합니다.


scripted_princess_4.png (http://rigvedawiki.net/r1/wiki.php/FFmpeg?action=show&redirect=ffmpeg, CCL By, 엔하위키)


일단 저 한줄만 메모장에 입력하고 ffmpeg위치만 수정한 다음에 배치파일로 저장해도 당장 사용이 가능합니다. 단, 저렇게 하면 한번에 파일 하나밖에 인코딩이 되지 않지요. 그리고 옵션도 원하는 용도에 썩 맞지 않을 수가 있습니다. 예를 들어 저 명령줄은 애니메이션 인코딩에 최적화되었는데, 실제로는 다른 용도로 사용해야 할 수가 있습니다.

정확한 argument 옵션들은 ffmpeg 사이트나 다른 사용자들이 공개한 명령어를 참고해 직접 짜도록 합니다. 가장 귀찮은 부분입니다.(..)

ffmpeg사이트의 문서화 페이지는 이 주소에서 확인 가능합니다.

http://www.ffmpeg.org/ffmpeg.html


참고로 제가 사용하는 명령은 다음과 같습니다.


md enc


C:\Users\piloteer_pax\Desktop\ffmpeg\ffmpeg.exe -y -i "%~1" -threads 0 -sn -vcodec libx264 -preset medium -crf 27 -tune animation -sws_flags lanczos -acodec aac -strict experimental -ac 2 -ab 128k -async 1 -r 23.98 "enc/%~n1.mp4"


엔하위키에 나온 명령을 개조한 것으로, enc라는 디렉터리를 만든 후 그 안에다 인코딩한 파일을 저장합니다. 또한 제 취향에 맞춰 좀 저화질로 인코딩을 진행합니다.

그리고 보시다시피 제 경우 ffmpeg.exe는 절대경로를 사용하고 있습니다.(C:\Users\piloteer_pax\Desktop\ffmpeg\ffmpeg.exe) 상대경로를 쓸 경우 주의하지 않으면 문제가 생길 수 있습니다. 


하지만 이것만으로는 파일이 한번에 하나밖에 인코딩되지 않습니다. 즉,여러개를 넣어도 달랑 하나 인코딩하고 만다는 것입니다.

그러면 어떻게 하나? 제 경우에는 stackoverflow를 참고해 더러운 goto문(..)을 활용해 파일을 전부 처리할때까지 루프가 돌도록 만들어뒀습니다. 말이 좋아서 참고지 복붙수준입니다. 생각하기 귀찮고 딱히 라이센스 걱정도 없을 때엔 그냥 배껴오는 게 편해요.

:again
if "%~1" == "" goto done
(여기에 위에 기술한 ffmpeg 명령어가 들어갑니다.)
shift
goto again

:done

pause


요 부분이 그것입니다. 첫 파일을 처리하면  다음 파일로 넘어가서 다음 파일을 인코딩합니다. 전부 끝날때까지 이것을 반복합니다. 다 끝나면 done으로 점프해서 스크립트가 종료됩니다.

그리고 마지막에 pause를 붙여서 결과창이 꺼지지 않도록 하고 있습니다만, 이것은 필수는 아닙니다.


이것을 다 합치면 다음과 같습니다.


:again
if "%~1" == "" goto done

md enc

C:\Users\piloteer_pax\Desktop\ffmpeg\ffmpeg.exe -y -i "%~1" -threads 0 -sn -vcodec libx264 -preset medium -crf 27 -tune animation -sws_flags lanczos -acodec aac -strict experimental -ac 2 -ab 128k -async 1 -r 23.98 "enc/%~n1.mp4"

shift
goto again

:done
pause


그냥 이걸 메모장에 붙여넣고 ffmpeg 절대경로만 수정하신체 배치파일로 저장하셔서 사용하셔도 동작합니다. 물론 원하는 옵션이 아니라 썩 결과물은 마음에 드시지 않을 듯 합니다만.

원하는 인코딩 옵션을 주시려면 위에 기술한대로 다른 분들의 명령어나 ffmpeg사이트를 참고해서 ffmpeg.exe를 실행하는 줄을 수정하시면 됩니다.

(...사실 md enc가 반복되어 처리되는 버그는 있지만 실제 동작에 영향은 끼치지 않으므로 그대로 두도록 하겠습니다.)


이제 여기까지 끝나셨으면 앞으로는 그냥 인코딩을 하실 때에는 바탕화면에 대상 파일을 드래그&드롭하시는 것으로 자동으로 인코딩이 진행되게 됩니다. 편하지요. 처음엔 손이 많이 가지만 오히려 GUI기반 인코더보다는 편할 수도 있는 방법입니다.


참고로 저 옵션으로 하면 인코딩 시간이 꽤 걸립니다. (..) h264 하이 프로파일에 미디움 프리셋으로 인코딩되기 때문입니다. 시간이 불만이시면 인코딩 옵션을 바꾸시거나 아예 직접 ffmpeg를 빌드하시는 등의 방법을 시도하셔야 할 겁니다.

또한,자막파일같이 엉뚱한 파일을 같이 드래그앤드롭하시면 문제가 발생할 수 있습니다.