AVS를 직접 작성해서 인코딩하시는 분이라면 MeGUI를 사용하는 것보다 cmd 창에서 x264 인코딩을 하는 것이 더 편할 수도 있습니다.

저는 예전 싱글코어를 사용할 때 조금이라도 가볍게 해보려고 cmd 창에서 인코딩하기 시작했었는데

명령어를 직접 써넣고 하는 것이 처음엔 어색하고 어려워 보이지만 막상 하다보면 이쪽이 더 편하더군요.

x264에 어느정도 익숙해지면 cmd 창에서 실행하는 다른 프로그램들(ffmpeg, eac3to 등등)도 비교적 쉽게 이해하고 사용할 수가 있습니다.

그리고 배치파일을 이용하면 MeGUI처럼 여러개의 인코딩을 순서대로 또는 동시에 처리할 수도 있습니다.


먼저 cmd 창을 실행해야 하는데 윈도우7 사용자는 아무곳에서나 Shift + 우클릭 하면 아래와 같이 "여기서 명령 창 열기(W)" 라는 메뉴가 뜹니다.


이렇게 Shift + 우클릭을 사용하는 방법도 있고 윈도우 시작 버튼에 cmd.exe를 등록해서 사용하는 방법도 있습니다.

윈도우 시스템 폴더에 있는 cmd.exe 파일을 우클릭해서 "시작 메뉴에 고정(U)" 메뉴를 클릭하면 "명령 프롬프트"라는 이름으로 등록됩니다.

그런데 시작 버튼에서 cmd 창을 실행하면 시스템 폴더 위치에서 시작되기 때문에 시작 위치를 x264.exe 파일이 있는 폴더로 바꿔주면 편합니다.

시작 버튼에 고정된 "명령 프롬프트"를 우클릭해서 "속성" 메뉴를 선택하면 아래와 같은 화면이 뜨는데


저렇게 시작 위치를 x264.exe 파일이 있는 폴더로 바꿔주면 다음부터 명령 프롬프트(cmd)를 실행할 때 해당 위치에서 시작됩니다.

작업 폴더를 하나 만들어 놓고 x264 뿐만 아니라 다른 프로그램들(ffmpeg 등등)도 전부 이곳에 모아놓으면 편하게 사용할 수 있겠죠.

그리고 "글꼴" "레이아웃" 등 cmd 창의 여러가지 속성들도 쓰기 편한대로 바꿔주면 좋습니다.


준비는 이정도로 마무리하고 이제 cmd 창에서 x264의 사용법을 알아보면,

가장 기본적으로 아래와 같이 명령어를 써 주면 됩니다.

x264 --output output.264 input.avs


각각의 옵션들은 빈 칸으로 구분되고 순서는 상관이 없습니다.

--output 옵션은 출력 파일 위치와 포맷을 정해주는데 확장자를 264로 하면 컨테이너에 담지 않은 raw 스트림으로 출력합니다.

mp4, mkv, flv 등으로 확장자를 써 주면 해당 컨테이너에 담아서 출력합니다.

이 외에 직접 적어주지 않은 다른 옵션들은 모두 기본값으로 적용되는데 --output output.264와 input.avs 처럼 아웃풋, 인풋은 꼭 적어줘야 합니다.

인코딩 중에는 아래와 같이 마지막 줄에 [진행 상황 %] 현재 프레임/전체 프레임, 인코딩 속도 fps, 비트레이트 kbps, 남은 시간이 표시됩니다.



다른 옵션들을 더 추가하고 싶으면 앞서 말씀드린대로 순서에 상관없이 직접 입력해 주기만 하면 됩니다.

예를 들어 crf 수치를 바꾸고 싶으면 아래와 같이 원하는 수치를 적어주면 됩니다.

x264 --crf 20 --output test.264 test.avs


순서는 상관이 없기 때문에 아래와 같이 --output 옵션과 --crf 옵션의 순서가 바뀌어도 결과는 똑같습니다.

x264 --output test.264 --crf 20 test.avs


그리고 옵션을 많이 입력하다보면 실수로 똑같은 옵션이 여러번 입력될 때도 있는데 이때는 마지막에 적어준 옵션이 적용됩니다.

아래와 같이 입력하면 가장 마지막에 있는 --crf 30 이 적용되겠죠.

x264 --crf 10 --crf 20 --crf 30 --output test.264 test.avs


기본적인 사용법은 이정도만 알고 있어도 충분할 것 같습니다.

x264는 여러가지 옵션들의 집합을 인코딩 속도와 인풋 영상의 종류에 따라서 분류해놓은 프리셋튜닝 시스템을 제공하기 때문에

굳이 수많은 옵션들을 모두 입력할 필요는 없습니다.

예를 들면 아래와 같이 프리셋, 튜닝을 사용하면 개발자들이 미리 정해놓은 옵션들이 적절하게 사용됩니다.

x264 --preset slower --tune film --crf 20 --output test.264 test.avs


프리셋은 ultrafast 부터 placebo 까지 있지만 주로 사용되는 것은 veryfast - faster - fast - medium - slow - slower - veryslow 등입니다.

프리셋 이름도 외우기 쉽게 잘 만들어 놓았죠. 모든 옵션이 기본값으로 적용되는 medium을 기준으로 빠르고 느린 프리셋을 적절히 사용하면 되겠습니다.

튜닝도 animation, film, grain 등등이 있는데 인풋 영상의 종류에 따라 선택해서 사용하면 됩니다.

프리셋, 튜닝을 포함한 모든 옵션들의 자세한 설명은 x264 --fullhelp 를 입력하면 확인하실 수 있습니다.


마지막으로 x264 의 필터링 옵션 사용법입니다.

x264는 크롭, 리사이즈 등의 기본적인 필터를 내장하고 있고 ffms, lavf 등의 소스필터로 자체 디먹싱, 디코딩이 가능하기 때문에

별도의 프로그램 없이도 대부분의 동영상들을 인코딩할 수 있습니다. 잘만 사용하면 정말 편하게 인코딩할 수 있죠.

예를 들어 1920x1080p 의 mkv 영상을 일부 잘라내고(crop) 1280x720p 로 리사이즈해서 인코딩하려고 한다면 아래와 같이 입력하면 됩니다.

x264 --preset slow --crf 20 --vf crop:2,2,2,0/resize:1280,720,sar=1:1,method=spline --output test.264 test.mkv


여기에서 --vf 가 필터링 옵션입니다. 각각의 필터는 / 로 구분해 줍니다.

필터 별 옵션을 살펴보면

crop:2,2,2,0 은 순서대로 왼쪽,위쪽,오른쪽,아래쪽을 픽셀 단위로 입력합니다.

resize:1280,720 은 리사이즈하려는 해상도를 resize:가로,세로 형식으로 입력합니다.

sar=1:1 은 리사이즈 필터의 옵션인데 사용자가 입력하지 않으면 인풋 영상의 해상도와 리사이즈 후의 해상도를 비교해서 x264가 계산한 값이

자동으로 적용됩니다. 따라서 화면 비율에 상관없이 원하는 해상도로 리사이즈 하려면 1:1을 입력합니다.

method=spline 은 리사이즈 방식을 정해줍니다. spline, lanczos, bicubic 등등을 사용할 수 있습니다.




Posted by 김코덱

댓글을 달아 주세요

  1. 조쿤 2014.02.05 19:52  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 저도 x264 인코딩 하고 있는데 확장자를 .264로 되어 나온 파일을 어떻게 하면 곰플레이어 같은 일반 플레이어에서 재생해볼수 있을까요? vlc로 재생하는것 외엔 방법이 없나요? output을 .avi로 해도 되긴 하던데 특정 설정을 더 주어서 하면 곰플레이어에서 재생을 못하더라구요.. ㅠ

  2. 조쿤 2014.02.06 11:29  댓글주소  수정/삭제  댓글쓰기

    정말 감사합니다. 잘 재생되네여 ㅋㅋ

  3. 2014.07.19 21:57  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 김코덱 2014.07.19 22:49 신고  댓글주소  수정/삭제

      avsp에서는 에러 메시지가 뭐라고 나오나요?
      dss2는 저도 가끔 사용하는 필터라서요..제 쪽에서는 별 문제가 없네요;
      계속 에러가 난다면 그냥 다른 필터를 쓰셔도 되고요

      그 블로그에서 말하는 날림 2패스가 위에서 말씀드린 것처럼 avs 스크립트를 다르게 사용한다는 뜻이죠
      --pass 1 옵션을 쓰면 자동으로 여러가지 옵션들이 낮아지기 때문에
      avs 스크립트만 1, 2패스 다르게 적용하시면 됩니다

  4. 2014.07.21 13:22  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 김코덱 2014.07.21 21:29 신고  댓글주소  수정/삭제

      그러면 프로그램끼리 충돌하는 것 같은데..저도 잘 모르겠네요
      avisynth 버전을 바꿔보거나 사용중인 필터들도 하나씩 확인해보세요

  5. 2014.07.30 18:41  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  6. 2014.08.04 21:35  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 김코덱 2014.08.04 23:27 신고  댓글주소  수정/삭제

      원본이 25fps면 changefps 빼고 그냥 하시면 될 것 같은데요
      꼭 24fps로 만들어야하는 게 아니면 굳이 24fps로 바꿀 필요는 없죠

      재생시간이 8초 짧다는 건가요? 정확히 무슨 뜻인지 잘 모르겠네요;

  7. 2014.08.05 11:21  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 김코덱 2014.08.07 12:40 신고  댓글주소  수정/삭제

      그러면 avisynth 에러인 것 같네요
      원인은 워낙 다양하니까 필터를 하나하나 확인해보시는 수밖에 없습니다
      우선 mt 필터부터 빼고 해보세요
      그리고 avisynth 필터는 스크립트 위에서부터 아래로 진행됩니다
      그러니까 지금 사용하는 스크립트는 샤픈 -> 디노이즈 -> 샤픈 이런식이죠
      의도하신 거라면 상관없지만 아니라면 처음에 있는 샤픈은 별로 필요가 없어보이네요

  8. 2014.08.07 20:32  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 김코덱 2014.08.03 23:41 신고  댓글주소  수정/삭제

      소스가 24p 촬영된 60i 영상인가요? 그러면 yadif 대신 ivtc 필터를 쓰시는 게 좋습니다
      그리고 디인터나 ivtc는 항상 다른 필터들보다 먼저 쓰시는 게 좋고요
      지금처럼 daa, aaa 다음에 디인터를 하면 디인터가 제대로 안 될 겁니다
      소스가 뭔지는 모르겠지만 인터레이스 영상이라면 항상 디인터나 ivtc를 먼저하는 게 보통입니다
      그리고 24p 촬영 영상이면 yadif + changefps 보다는 ivtc가 좋을 겁니다

      800x536 해상도인데 800x1072i로 나오는 걸 보니 소스에 인터레이스 플래그가 있는 것 같습니다
      그래서 x264가 avs 스크립트를 인터레이스 영상으로 판별하고 자동으로 인터레이스 인코딩을 하는 거죠
      해결 방법은 avs 스크립트 마지막에 assumeframebased() 필터를 쓰시거나
      x264 명령줄에 --no-interlaced 옵션을 쓰시면 됩니다.
      배치파일을 만들어 놓으면 cmd 창에서도 편하게 인코딩할 수 있죠

  9. 2014.08.18 17:46  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 김코덱 2014.08.19 22:36 신고  댓글주소  수정/삭제

      영상 프레임 수를 늘려서 다시 인코딩하는 것보다는 자막을 수정하는 게 낫겠네요
      자막 수정하는 건 kmp나 팟플레이어에서도 간단히 하실 수 있습니다

  10. 익명 2015.12.23 01:51  댓글주소  수정/삭제  댓글쓰기

    저 혹시 Encoded date랑 Tagged date를 지우거나 아예 기록 안되게 하는 방법이 있나요?

  11. 스타오션 2016.05.26 04:02  댓글주소  수정/삭제  댓글쓰기

    안녕하세요, CMD 인코딩 초보자입니다.

    고용량 애니 용량을 줄이는 목적으로 아래의 인코딩 옵션을 사용중입니다.

    x264 --level 4.1 --tune animation --vbv-bufsize 78125 --vbv-maxrate 62500 -o %1.8bit.mkv %1

    본래 목적대로 용량을 200~300메가 대로 낮추고, 인코딩 시간도 절약하는데 성공했습니다.

    문제는 화질도 봐줄만한데 캐릭터 윤곽선이나 빠른 장면 전환시 노이즈가 생겨서 좀 아쉽습니다.

    현재 인코딩 옵션에 필터를 많이 추가하지 않고도 이런 현상들을 케어할 수 있다면 어떤 것을 추가해서 개선시킬 수 있을지 조언을 좀 얻고 싶습니다.

    초보인지라 저 공식에 다른 걸 대입시켜볼 엄두가 나지 않아서요 ㅠ.ㅠ.

    참고로 아웃풋 인풋은 기입하지 않는 대신 원본 폴더에 x264 파일과 배치파일만을 넣어 원본 동영상을 드래그하는 심플한 형태로 하고 있습니다.

    그리고 level 4.1만 입력해도 프로파일 high로 인식하더군요.

    • 김코덱 2016.05.27 23:26 신고  댓글주소  수정/삭제

      글쎄요..윤곽선이나 빠른 장면에서 노이즈가 생기는 건 손실압축에서는 별다른 방법이 없을 것 같습니다
      인코딩 옵션을 조금 높여서 --preset 옵션을 slow, slower, veryslow 중 하나로 해보세요
      아니면 비트레이트를 높여야 할 텐데 --crf 수치를 20 정도?로 낮추시면 될 듯 합니다
      개인적인 생각으로는 옵션 높여서 몇시간씩 더 걸리느니..비트레이트를 높이는 게 효과도 확실하고 좋을 것 같네요

  12. 닐기리 2016.05.28 03:51  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 애니메이션 리사이징을 하고 싶은데 질문이 있어서요.

    1. 1920x1080의 고용량 사이즈를 1280x720으로 줄이려고 합니다.
    이때 리사이징 필터는 spline이 좋나요 아니면 lanczos가 좋나요?
    애니메이션 인코딩할 때 선명하게 나오는 쪽이 어느쪽인지 헷갈리네요. (spline이 더 선명하긴 한 것 같은데...)

    2. 일반적인 spline과 spline36, 64는 같은 건가요?
    그리고 찾아보니 spline 옵션이 16/36/64가 있더라구요. 강도의 차이가 있는 것인지요?
    cmd텍스트에 method=64를 추가해보니 실행이 되던데 품질면에서 큰 효과를 볼 수 있을까요?

    • 김코덱 2016.05.28 23:30 신고  댓글주소  수정/삭제

      spline이 좋다는 평도 있긴 하지만 뭐 큰 차이는 아닙니다
      저도 몇번 비교해 본 적이 있지만 큰 차이는 없더군요 ㅎㅎ;
      한번 직접 비교해보시고 좋다 싶은 걸로 사용하시면 될 것 같네요

      avisynth의 spline필터에서 숫자는 보간에 사용되는 픽셀 수를 말한다고 합니다(수가 클수록 정확합니다)
      16은 4개, 36은 6개, 64는 8개인데 픽셀 수가 많아지면 계산도 복잡해지니까 속도는 느려지겠죠
      뭐 저도 자세한 알고리즘은 모르지만 보통은 36정도면 충분하다는 평입니다
      x264의 필터 옵션에서는 숫자를 따로 지정할 수는 없으니까 그냥 method에서 spline만 쓰셔야 합니다
      정확한 이름은 natural bicubic spline 이라고 하는데 ffmpeg에서 가져온 겁니다
      굳이 비교를 하자면 spline36이랑 비슷하다고 하네요

  13. 세스 롤린스 2016.06.14 21:54  댓글주소  수정/삭제  댓글쓰기

    글 잘 봤습니다. 덕분에 이 방법으로 인코딩 잘 하고 있어요 ㅎㅎ

    그런데 예를 들어 44분 30초짜리 영상을 23분 56초에서 자르려고 하는데 설정을 어떻게 해야하나요?

    옵션에 어떻게 추가하는지를 몰라서 말이죠.

    • 김코덱 2016.06.15 20:07 신고  댓글주소  수정/삭제

      예를 들어서 44분 30초짜리 영상의 프레임레이트가 30fps라고 하면요
      23분 56초까지의 총 프레임 수는 1436 * 30 = 43080 이 되겠죠
      23분 56초는 1436초이고 초당 30프레임이 들어간다는 말이니까요

      이때 --frames 43080 이라고 옵션을 추가하면 인코딩이 43080 프레임까지만 진행됩니다
      인코딩해야하는 총 프레임 수를 구해서 이런식으로 추가하시면 됩니다

      추가로 --seek 이라는 옵션도 있는데 이 옵션은 맨처음 인코딩할 프레임 위치를 지정할 수 있습니다
      이 옵션도 마찬가지로 프레임 단위로 지정해줘야 하는데요
      예를 들어 처음 10분은 건너뛰고 인코딩하려고 한다면
      10분은 600초니까 인코딩을 시작할 프레임은 600 * 30 = 18000 번째 프레임이 되고
      --seek 18000 이런식으로 옵션을 추가하면 됩니다

      두 개를 섞어서 --seek 18000 --frames 18000 이런식으로 옵션을 추가해도 됩니다
      이 경우에는 처음 10분을 건너뛰고 10분동안 인코딩이 진행되는 거니까 영상의 타임라인으로 보면
      10분 지점에서 20분 지점까지만 인코딩이 되겠죠

  14. 죠죠 2016.06.24 02:08  댓글주소  수정/삭제  댓글쓰기

    혹시 용량을 정해놓고도 인코딩할수있나요?
    예를들어 500메가짜리를 만들고 싶다고 하면 어떻게 설정하죠?

    그리고 프로파일이 계속 high로 되던데 main으로 하려면 어떻게 해야하나요? 알려주시면 감사하겠습니다.

    • 김코덱 2016.06.25 18:20 신고  댓글주소  수정/삭제

      용량을 정해서 인코딩하려면 비트레이트 계산을 해야합니다
      배치파일 사용하시면 계산해주는 옵션이 있긴 한데 직접 계산하려면 좀 어렵고요
      링크처럼 비트레이트만 따로 계산해주는 프로그램도 있으니까 사용해보세요

      https://tcmsblog.wordpress.com/

      프로파일 main으로 하려면 옵션에 --profile main 추가하시면 됩니다

  15. akcm 2016.07.06 20:37  댓글주소  수정/삭제  댓글쓰기

    저 질문이 있는데요, 제가 DVD 디크립터로 영상을 떠서 vob 파일을 만들었거든요.
    이걸로 인코딩을 하니까 scan type이 MBAFF가 되던데 Progressive로 설정하려면 어떻게 해야하나요?
    난감해서 문의드립니다.

    • 김코덱 2016.07.06 22:25 신고  댓글주소  수정/삭제

      vob를 위 글처럼 cmd에서 인코딩했단 말씀이시죠?
      그러면 디인터레이스를 안 해서 그런 것 같네요
      vob파일을 아래의 배치파일로 인코딩해보세요
      중간에 디인터레이스 옵션에서 blend나 bob을 선택하시면 됩니다
      http://ligel.tistory.com/14

  16. akcm 2016.07.07 20:28  댓글주소  수정/삭제  댓글쓰기

    저 죄송한데 위 cmd 파일에서는 디인터레이스 옵션 적용이 안 되나요?
    링크에 올려주신 배치파일은 설정할게 너무 많아서 복잡하네요.
    간단하게 할 수 있는 방법은 없을까요?

    • 김코덱 2016.07.07 21:00 신고  댓글주소  수정/삭제

      cmd에서 그냥 하시려면 --no-interlaced 옵션을 추가하고 인코딩하시면 됩니다
      그런데 이렇게 하면 움직임이 있는 부분에선 아마 가로줄이 보일 겁니다..
      제 생각에는 이렇게 하느니 차라리 처음처럼 mbaff로 인코딩하시는 게 더 나을 것 같네요
      mbaff로 인코딩할 땐 세로 해상도는 바꾸시면 안 되고요

  17. 스타오션 2017.09.28 03:24  댓글주소  수정/삭제  댓글쓰기

    오랜만에 글 올려봅니다.

    가끔 1920x1080 mkv 영상을 1280x720으로 리사이즈할 때 cmd 창에서부터 시작부터 튕기더군요.

    반면, 1920x1080 영상을 사이즈 변경없이 용량만 줄일 때는 인코딩이 되더군요.

    이거 이유가 뭘까요? 다운 사이즈시 특정 파일을 가리는 걸까요?

    • 김코덱 2017.10.03 01:50 신고  댓글주소  수정/삭제

      댓글을 이제서야 봤네요;
      이런 경우는 직접 테스트해보지 않고는 모르겠습니다
      혹시 짧은 샘플파일 올려주실 수 있나요?

  18. 김동휘 2018.12.22 10:08  댓글주소  수정/삭제  댓글쓰기

    1280x720p 29프레임 2500비트레이트 mp4 영상으로 출력하고싶은데 어떻게 설정하나요?