-
Notifications
You must be signed in to change notification settings - Fork 0
6. 나머지 옵션들
아직 배우지 않은 옵션들은 각 스트림이나 필터의 출력을 출력물로 연결해주는 -map
, 사용한 코덱에서 개별적으로 지원하는 옵션들, 비트레이트, GOP 길이, 플래그, 비디오 동기화, mp4 파일을 스트리밍할 수 있게 해주는 -movflags faststart
, 프레임 레이트, 출력 해상도, 픽셀 포맷 등이 있습니다.
앞에서 살펴본 예시의 출력들 [v1]
,[v2]
,[v3]
등은 최종적인 출력들로 각각 전달되어야 합니다. 이를 위해서 -map
옵션을 사용합니다.
예를 들어 output.mp4
라는 특정 출력물을 지정하고, 그 앞에 -map [v1]
이라고 옵션을 주면 output.mp4
파일은 [v1]
이라고 이름붙여진 출력을 받아들이게 됩니다. (여기서 [v1]
은 필터의 출력일 것입니다.)
필터의 출력뿐만 아니라, 입력을 출력물로 연결하고 싶을 수도 있습니다. 가령 여러 언어로 된 오디오들을 하나의 mxf
파일에 담는 경우가 있을 수 있습니다.
이 때에는 [0:v]
, [0:v:0]
, [0:1]
형태로 어느 입력의 어느 스트림을 받아들이게 할 지 지정할 수 있습니다.
-
[0:v]
와 같은 형태는 특정 번호 입력의 모든 비디오 스트림을 지정합니다.v
대신a
를 쓰면 오디오 스트림을 선택하게 됩니다. 따라서 입력 5의 모든 오디오 스트림을 지정하고 싶다면[5:a]
라고 하면 되겠지요. -
[0:v:0]
와 같은 형태는 특정 번호의 입력의 특정 종류 스트림들 중에 번호에 맞는 하나를 선택하게 됩니다. 비디오의 경우에는 보통 스트림이 파일당 하나이지만, 오디오는 여러 개가 있는 경우가 흔합니다. 이럴 경우, 예를 들어 2번 입력의 오디오 스트림들 중 세 번째를 지정하고 싶다면[2:a:2]
라고 하면 되겠죠. -
[0:1]
와 같은 형태는 특정 번호 입력의 모든 스트림 중 특정 번호의 스트림을 선택하게 됩니다. 만약 입력 4의 첫 번째 스트림이 비디오이고, 2~5 번째 스트림들이 오디오라고 합시다. 이중 비디오를 스트림 번호로 선택한다면[4:0]
이 되고, 두 번째 오디오 스트림을 번호로 선택한다면[4:2]
가 되겠죠.
여러 개의 -i
옵션을 사용해서 입력될 스트림들을 여러 개 지정할 수 있습니다. 가령 3개 언어로 된 오디오들을 하나의 output.mxf
에 저장하고 싶다면, output.mxf
앞에 -map 0:a -map 1:a -map 2:a output.mxf
등으로 여러 스트림을 받아들이라고 지시할 수 있습니다.
선택한 코덱에 따라서 지원되는 옵션들이 다양하게 있을 수 있습니다. 예를 들어 h264 코덱의 경우 프로파일과 레벨을 지정할 수 있습니다. (프로파일은 비트레이트 등 품질, 레벨은 영상의 크기와 관련이 있습니다.) 이들을 지정하려면
-profile:v main -level:v 4
와 같이 지정합니다. 이미 아시겠지만 :v
는 비디오에 대한 옵션이라는 뜻입니다.
이러한 옵션들은 코덱에 따라 다 다르기 때문에 여기서 다 소개할 수 없습니다. FFmpeg Codecs Documentation 에서 잘 찾아보는 수밖에는 없습니다.
오디오와 비디오 각각에 대해 비트레이트를 지정해줄 수 있습니다. 유의할 것은, 코덱에 따라 여기서 주는 비트레이트는 목표 값일 뿐, CBR처럼 작동하지 않을 수도 있다는 것입니다.
비트레이트 옵션은 다음과 같습니다.
-b:v 5M -b:a 256k
GOP(Group of Pictures) 길이는 I프레임(=키프레임)이 얼마나 자주 나타날지를 지정해줍니다. I프레임이 자주 나타날수록 출력의 용량이 커지지만, 더 정확하게 seeking이 가능해집니다.
GOP 길이 옵션은 다음과 같습니다.
-g 15
여러 가지 인코딩 플래그를 줄 수 있는데, 그중 하나가 CGOP(Closed GOP) 플래그입니다. 이 플래그는 한 GOP가 B프레임으로 끝날 때, 이 B 프레임이 다음 GOP의 시작인 I프레임을 참고할지 여부를 지정합니다. 만약 다음 GOP의 I프레임을 참고하길 원치 않는다면, 다음과 같이 플래그를 주면 됩니다.
-flags cgop
비디오 프레임이 디먹서에서 먹서로 전달(출력)될 때 각 프레임이 갖고 있던 타임스탬프를 어떻게 할 것인지를 지정합니다.
-vsync (값)
형태로 지정하며, 각 값은 다음과 같습니다.
- 0: 모든 프레임들을 갖고 있는 타임스탬프 그대로 내보냅니다.
- 1: 일정 프레임 레이트가 설정되어 있다면 이를 맞추기 위해서 프레임들을 복제하거나 버립니다.
- 2: 2개의 프레임이 동일한 타임스탬프를 갖지 않도록 알아서 프레임들을 그대로 내보내거나 버립니다.
- drop: 0번과 동일하나 먹서가 새로운 타임스탬프를 만들도록 기존의 타임스탬프를 버립니다.
- -1: 먹서가 알아서 1번과 2번 중에 선택합니다.
mp4 파일이 완성된 뒤, 이를 스트리밍할 때 Moov Atom이란 것이 제일 앞(헤더)에 있어야 바로 재생이 가능합니다. 그렇지 않으면 전체를 다 다운받아야 재생이 시작됩니다.
Moov Atom을 제일 앞으로 이동시켜주는 옵션은 다음과 같습니다.
-movflags faststart
프레임 레이트를 지정하는 옵션은 다음과 같습니다.
-r 29.97
한편, 이에 대응되는 필터로는 앞에서 본 fps
가 있는데, 이 필터는 프레임 간 보간을 해주지만 -r
옵션은 단순히 프레임을 중복시키거나 제거합니다.
해상도를 지정하는 옵션은 다음과 같습니다.
-s 1280x720
이에 대응되는 필터로는 마찬가지로 앞에서 본 scale
필터가 있는데, 이 필터는 구체적으로 어떤 방법으로 스케일링할지 지정이 가능합니다.
픽셀 포맷을 지정하는 옵션은 다음과 같습니다.
-pix_fmt uyvy422
역시 이에 대응되는 필터인 format
이 있는데, 이 필터는 -pix_fmt
와 별 차이가 없는 것 같습니다.
우선 생각나는 것은 이 정도입니다. 이외에도 다양한 옵션들이 있으니 필요에 따라서 검색해서 사용해야 합니다.
SBS 미디어IT팀 방송인프라파트