자막 파일 포맷 이해
FFmpeg을 사용하여 자막을 인코딩하려면 먼저 자막 파일 포맷을 이해하는 것이 중요하다. 자막 파일은 여러 포맷으로 존재하며, 대표적으로 다음과 같은 포맷들이 자주 사용된다:
- SRT (SubRip Subtitle): 가장 널리 사용되는 자막 파일 포맷이다. 시간이 텍스트 형태로 기록되어 있으며, 텍스트 편집기로 쉽게 수정이 가능한다.
- ASS (Advanced SubStation Alpha): 스타일 정보 및 위치 조정 등 다양한 옵션을 제공하는 포맷이다.
- VTT (WebVTT): 웹에서 자주 사용되는 자막 포맷으로, HTML5 표준에 맞춰 제작되었다.
이 외에도 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 내에서 시간 조정을 할 수 있기 때문에 매우 유용하다.