ffmpeg를 사용하여 텍스트 자막 추가 [닫힘]


122

ffmpeg를 사용하여 .mp4 컨테이너에 텍스트 자막을 추가하려고합니다.

ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mp4

이 줄을 실행하려고 할 때 오류가 발생합니다.

스트림 맵 수는 출력 스트림 수와 일치해야합니다.

mp4를 mkv로 변경하려고하면 (MP4는 텍스트 자막을 지원하지만) 다음과 같이됩니다.

ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mkv

스트림을 올바르게 매핑하지만 오류가 발생합니다.

출력 스트림 # 0.2에 대한 인코더 (코덱 ID 94210)를 찾을 수 없습니다.

내가 시작할 때

ffmpeg -codecs

srt 코덱이 디코더 및 인코더로 지원된다는 것을 알 수 있지만 mp4 및 mkv subs 인코딩에 사용되는 것이 무엇인지, 스위치를 켜거나 별도로 컴파일해야하는지 확실하지 않습니다.

답변:


196
ffmpeg -i infile.mp4 -i infile.srt -c copy -c:s mov_text outfile.mp4

-vf subtitles=infile.srt 함께 작동하지 않습니다 -c copy


순서 -c copy -c:s mov_text가 중요합니다. FFmpeg에게 말하고 있습니다.

  1. 비디오 : 복사, 오디오 : 복사, 부제 : 복사
  2. 부제 : mov_text

반전하면 FFmpeg에 다음과 같이 말합니다.

  1. 부제 : mov_text
  2. 비디오 : 복사, 오디오 : 복사, 부제 : 복사

또는 -c:v copy -c:a copy -c:s mov_text어떤 순서로든 사용할 수 있습니다 .


13
필요 플레이어 지원하므로 스트림의 하나로서 파일이 방법의 추가 자막 (예 : VLC 등) 자막 표시합니다
BollMose

1
이것은 자막을 사용할 수 있지만 비디오에 구울 수 없음을 의미합니까? 주문형으로 원하는지 보여줄 수 있습니까?
Sun

3
네 @ sunk818이 이것이 의미하는 바입니다. 그러면 플레이어가 지원하는 한 활성화 또는 비활성화 할 수있는 트랙으로 자막이 추가됩니다. Mr. Hyde와 Paul ffmpeg는 또한 비디오 자체에 자막을 추가 할 수 있으며 이러한 경우 글꼴 및 위치 지정과 같은 것을 제어 할 수 있습니다.
Boushley

1
.srt 파일은 -c:s copynot with -c:s mov_text.
GetFree

82

참고 :이 솔루션은 비디오에 "자막을 구워"비디오의 모든 시청자가 자막을 볼 수 있도록합니다.

libass라이브러리를 사용하십시오 (ffmpeg 설치에 구성에 라이브러리가 있는지 확인하십시오 --enable-libass).

먼저 자막을 .ass형식으로 변환하십시오 .

ffmpeg -i subtitles.srt subtitles.ass

그런 다음 비디오 필터를 사용하여 추가합니다.

ffmpeg -i mymovie.mp4 -vf ass=subtitles.ass mysubtitledmovie.mp4

40
이렇게하면 비디오에 "버닝"되므로 플레이어에서 끌 수 없습니다. 이는 플레이어가 읽을 수 있고 시청자가 원하는 경우 표시 할 수있는 자막 스트림으로 추가하는 것과 다릅니다.
stib 2014

1
이 솔루션에 대해 대단히 감사합니다. 어쨌든 문자의 크기를 지정할 수 있습니까?
user1319182 2015

1
이 답변을 살펴보십시오 : stackoverflow.com/questions/21363334/… . 자막 파일 자체에 글꼴을 설정하고 싶을 것입니다. 그렇지 않으면 자막 필터를 사용하여 force_style에서 글꼴을 설정할 수 있습니다. ffmpeg.org/ffmpeg-filters.html#subtitles-1
HdN8

Instagram과 같은 동영상에 자막을 추가 할 때 유용합니다. 인스 타 그램 뷰어처럼 사용자가 소리 나 동영상을들을 수없는 언어가 다른 언어로되어 있으면 사용자는 대신 자막을 읽을 수 있습니다.
ϻαϻɾΣɀО-MaMrEzO

1
libassDebian 시스템에`apt update && apt install libass-dev '가있는 확장 프로그램이 없으면 설치합니다 .
Sopalajo de Arrierez

53

자막을 자막 스트림으로 다중화하려고합니다. 간단하지만 MP4 (또는 M4V)와 MKV에는 다른 구문이 사용됩니다. 두 경우 모두 비디오 및 오디오 코덱을 지정하거나 자막 만 추가하려는 경우 스트림 만 복사해야합니다.

MP4 :

ffmpeg -i input.mp4 -f srt -i input.srt \
-map 0:0 -map 0:1 -map 1:0 -c:v copy -c:a copy \
-c:s mov_text output.mp4

MKV :

ffmpeg -i input.mp4 -f srt -i input.srt \
-map 0:0 -map 0:1 -map 1:0 -c:v copy -c:a copy \
-c:s srt  output.mkv

3
하나 이상의 자막을 추가 할 수 있습니까? 이 소프트 서브가 알 수없는 언어로 인식됩니까?
Patrick

1
네, 그렇습니다. 방금 MKV에 대해 테스트했습니다.
dotokija

7
먼저 다른 입력을 추가하십시오 : -i input2.srt. 둘째, 두 번째 스트림 : -map 2 : 0으로 매핑합니다. 마지막으로 두 번째 자막 스트림에 대한 인코더를 선택합니다 (첫 번째 자막과 동일) : -c : s srt. 전체 예제 \ ffmpeg -i input.mp4 -f srt -i input.srt -i input2.srt \ -map 0 : 0 -map 0 : 1 -map 1 : 0 -map 2 : 0 -c : v copy- C : 복사 \ -c : S SRT -c : S SRT output.mkv
dotokija

8
그리고 언어 메타 데이터를 추가하려면 (출력 파일 앞에 삽입) "-metadata : s : s : 0 language = eng"
Patrick

mkv 파일을 mp4 파일 (ffmpeg -i film.mkv -vcodec copy -acodec copy film.mp4)로 "다시 래핑"할 때 원본 파일의 자막이 제외되는 이유는 무엇입니까? 원본 mkv에는 자막이 있지만 mp4 형식의 출력에는 자막이 없습니다. 무슨 일이야? 내가 올바르게하지 않는 것은 무엇입니까?
oldboy

9

MKV 컨테이너는 거의 모든 비디오 및 오디오 코덱을 지원하며 자막 및 DVD 메뉴도 지원합니다. 따라서 자막이있는 MKV 컨테이너를 사용하여 입력 비디오의 코덱을 복사하여 비디오를 출력 할 수 있습니다. 먼저 SRT를 ASS 자막 형식으로 변환해야합니다.

ffmpeg -i input.srt input.ass

비디오에 ASS 자막 포함

ffmpeg -i input.mp4 -i input.ass -c:v copy -c:a copy -c:s copy -map 0:0 -map 0:1 -map 1:0 -y out.mkv

VMW 파일로도 작업했습니다.

ffmpeg -i input.wmv -i input.ass -c:v copy -c:a copy -c:s copy -map 0:0 -map 0:1 -map 1:0 -y out.mkv

위키 페이지 컨테이너 형식 비교 참조


1
HV는 그다지 관련이 없습니다. 항상 하나 이상의 솔루션을 볼 수 있습니다.
JasonXA 2015

8

ffmpeg는 mov_textMP4 컨테이너에서 지원되고 iTunes, Quicktime, iOS 등에서 재생할 수있는 유일한 자막 인코더를 지원합니다 .

귀하의 라인은 다음과 같습니다.

ffmpeg -i input.mp4 -i input.srt -map 0:0 -map 0:1 -map 1:0 -c:s mov_text output.mp4


5

이 작업에 MP4Box를 사용해 보았지만 내가 다루고있는 M4V를 처리 할 수 ​​없었습니다. 다음 명령 줄을 사용하여 ffmpeg를 사용하여 SRT를 소프트 자막으로 삽입하는 데 성공했습니다.

ffmpeg -i input.m4v -i input.srt -vcodec copy -acodec copy -scodec copy -map 0:0 -map 0:1 -map 1:0 -y output.mkv

MKV 출력 파일을 사용해야했던 것처럼 M4V 파일을 만들 수 없었습니다.


3

모든 오디오 및 srt 자막 함께 작동 하고 mkv 컨테이너를 포함 할 수있는 메타 데이터를 존중 하는 간단하고 일반적인 답변을 제공 할 것 입니다. 따라서 matroska가 첨부 파일로 포함 할 수있는 이미지를 추가하고 (다른 유형의 AFAIK는 아님) 트랙으로 변환합니다. 시청할 수는 없지만 거기에있을 것입니다 (디 먹싱 할 수 있음). 아, 그리고 mkv 에 챕터가 있으면 mp4 도 있습니다.

ffmpeg -i <mkv-input> -c copy -map 0 -c:s mov_text <mp4-output>

보시다시피 FFmpeg 에 메타 데이터, 챕터, 첨부 파일 등을 포함하는 모든 트랙을 추가 -map 0하도록 지시 하는 것은에 관한 것입니다. 인식 할 수없는 "트랙"( mkv모든 유형의 파일 을 첨부 수 있음 )이있는 경우 오류로 끝납니다.

mkv2mp4.bat일반적으로 이렇게하는 경우 간단한 배치 를 만들어 mkv 와 같은 이름 의 mp4 를 만들 수 있습니다 . 오류 제어, 다른 출력 이름 등을 사용하는 것이 더 좋지만 요점을 얻습니다.

@ffmpeg -i %1 -c copy -map 0 -c:s mov_text "%~n1.mp4"

이제 간단히 실행할 수 있습니다.

mkv2mp4 "Video with subtitles etc.mkv"

그리고 최대 정보가 포함 된 "자막 등 mp4 비디오"를 생성합니다.


-1

간단한 예 :

videoSource=test.mp4
videoEncoded=test2.mp4
videoSubtitle=test.srt
videoFontSize=24
ffmpeg -i "$videoSource" -vf subtitles="$videoSubtitle":force_style='Fontsize="$videoFontSize"' "$videoEncoded"

Linux 변수 만 교체


자세히 설명 하시겠습니까?
RamenChef 2016

-3

이것이 mkv가 좋은 컨테이너 인 이유입니다. 특히 지금은 성숙해졌습니다.

mkvmerge -o output.mkv video.mp4 subtitle.srt

3
귀하의 접근 방식이 OP의 문제를 해결하는 이유에 대해 언급 하시겠습니까?
mjuarez 2015
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.