자막 파일 포맷 이해

FFmpeg을 사용하여 자막을 인코딩하려면 먼저 자막 파일 포맷을 이해하는 것이 중요하다. 자막 파일은 여러 포맷으로 존재하며, 대표적으로 다음과 같은 포맷들이 자주 사용된다:

이 외에도 SSA, STL 등 다양한 자막 포맷이 있지만, FFmpeg은 대부분의 포맷을 지원하므로 상황에 맞는 포맷을 선택하면 된다.

자막 파일 인코딩

자막을 비디오에 인코딩하기 위해서는 -vf 옵션을 사용하여 비디오 필터를 적용하고, 자막 파일을 비디오 스트림에 합칠 수 있다. FFmpeg에서는 다음 명령어로 자막을 비디오에 합칠 수 있다:

ffmpeg -i input.mp4 -vf subtitles=subtitle.srt output.mp4

위 명령어에서 input.mp4는 비디오 파일, subtitle.srt는 자막 파일, 그리고 output.mp4는 자막이 인코딩된 비디오 파일을 의미한다.

자막 포맷 변환

FFmpeg을 사용하여 자막 파일을 다른 포맷으로 변환할 수 있다. 다음은 SRT 파일을 ASS 포맷으로 변환하는 예이다:

ffmpeg -i subtitle.srt subtitle.ass

이 명령어는 SRT 자막을 ASS 포맷으로 변환하는 과정이다. 이때 자막 파일의 스타일이나 포맷이 크게 달라질 수 있으므로 변환 후 파일을 확인하는 것이 좋다.

자막 위치 및 스타일 조정

ASS 자막 파일을 사용하면 자막의 위치와 스타일을 조정할 수 있다. FFmpeg에서 ASS 파일을 사용하여 자막을 비디오에 인코딩할 때 자막의 스타일을 유지하려면 다음과 같이 명령어를 사용할 수 있다:

ffmpeg -i input.mp4 -vf "ass=subtitle.ass" output.mp4

ASS 파일 내에서 글꼴, 크기, 색상, 위치 등을 조정할 수 있으며, 이는 ASS 파일 자체에서 정의된다. FFmpeg은 이러한 스타일 정보를 그대로 적용하여 비디오에 자막을 인코딩한다.

자막 싱크 맞추기

자막이 비디오와 싱크가 맞지 않는 경우, FFmpeg을 사용하여 자막의 타이밍을 조정할 수 있다. itsoffset 옵션을 사용하면 자막의 시작 시간을 앞당기거나 늦출 수 있다:

ffmpeg -itsoffset 2 -i input.mp4 -vf subtitles=subtitle.srt output.mp4

위 명령어는 자막의 시작 시간을 2초 앞당기는 예시이다. itsoffset 값을 조정하여 자막의 싱크를 맞출 수 있다.

자막과 비디오 크기 비율 조정

자막을 비디오에 인코딩할 때, 비디오의 해상도가 자막의 위치와 크기에 영향을 미칠 수 있다. FFmpeg에서 subtitles 필터를 사용할 때, 자막의 비율이 비디오 해상도와 일치하지 않으면 자막이 비디오 화면에 어색하게 보일 수 있다. 이를 방지하기 위해 자막 크기 및 위치를 비디오 크기에 맞게 조정할 수 있다.

예를 들어, force_style 옵션을 사용하여 자막의 스타일을 명시적으로 지정할 수 있다:

ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt:force_style='Fontsize=24,PrimaryColour=&HFFFFFF&'" output.mp4

이 명령어는 자막의 글꼴 크기를 24로, 자막의 색상을 흰색으로 지정한다. PrimaryColour는 자막의 텍스트 색상을 결정하며, &HFFFFFF&는 흰색을 의미한다.

자막과 비디오 파일 병합

FFmpeg은 자막을 기존 비디오 파일과 병합할 수 있다. 이를 위해 -c:v copy 옵션을 사용하여 비디오 스트림을 재인코딩하지 않고 그대로 유지하면서 자막을 추가할 수 있다.

ffmpeg -i input.mp4 -i subtitle.srt -c:v copy -c:s mov_text output.mp4

위 명령어는 SRT 자막 파일을 비디오 파일과 병합하여 새로운 MP4 파일을 생성한다. 이때 mov_text는 MP4 포맷에서 자주 사용되는 자막 포맷이다.

자막 파일을 비디오에 직접 내장

때때로 자막을 비디오 파일에 직접 내장하고 싶을 수 있다. 이 경우 자막을 별도의 파일로 저장하는 대신, 비디오 스트림 내에 자막을 포함시킬 수 있다. 다음 명령어는 SRT 자막을 비디오 스트림에 내장하는 방법을 보여준다:

ffmpeg -i input.mp4 -vf subtitles=subtitle.srt -c:v libx264 -crf 23 -preset fast output.mp4

이 명령어는 자막을 인코딩하여 비디오 파일에 직접 내장한다. libx264 코덱을 사용하며, crf 23은 인코딩 품질을 설정한다. preset fast는 인코딩 속도를 조정한다.

여러 자막 트랙 추가

하나의 비디오 파일에 여러 자막 트랙을 추가하려면, 각 자막 파일을 비디오 파일에 추가하는 방법을 사용할 수 있다. 이를 위해 FFmpeg은 여러 자막 파일을 입력으로 받아들이고, 각각의 자막 트랙을 추가할 수 있다.

ffmpeg -i input.mp4 -i subtitle_english.srt -i subtitle_korean.srt -map 0 -map 1 -map 2 -c copy -c:s mov_text output.mp4

이 명령어는 영어 자막(subtitle_english.srt)과 한국어 자막(subtitle_korean.srt)을 비디오 파일에 추가한다. 각각의 자막은 별도의 트랙으로 저장되며, 사용자는 비디오 플레이어에서 자막을 선택할 수 있다.

자막 파일에 시간 조정 적용

자막의 시간 정보가 원본 비디오와 맞지 않는 경우, FFmpeg을 사용하여 자막의 시간을 조정할 수 있다. 이때 subtitles 필터 내에서 start_time 옵션을 사용하여 자막의 시작 시간을 조정할 수 있다:

ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt:start_time=5" output.mp4

이 명령어는 자막의 시작 시간을 5초 지연시키는 역할을 한다. 자막 파일 자체를 수정하지 않고 FFmpeg 내에서 시간 조정을 할 수 있기 때문에 매우 유용하다.