FFmpeg를 사용하여 첫 번째 영어 자막 채널을 제외한 모든 자막 채널을 제거하는 방법은 무엇입니까?

FFmpeg를 사용하여 첫 번째 영어 자막 채널을 제외한 모든 자막 채널을 제거하는 방법은 무엇입니까?

저는 FFmpeg에 대해 잘 알지도 못하고, 직접 여러번 시도해 보았지만 구문조차 파악하지 못했습니다.. 그래서 저보다 훨씬 똑똑한 사람들에게 대외적으로 물어보겠습니다. FFmpeg를 사용하여 영어가 아닌 모든 옵션을 제거한 후 삭제하고 싶습니다.

그 후 첫 번째 색인된 항목을 제외한 모든 영어 옵션을 삭제합니다. 나는 무엇을 시도해도 그것을 알 수 없었고 약 3시간 동안 벽에 머리를 부딪혔습니다. 마지막 시도는 다음과 같습니다.

ffmpeg -i "Episode 01 - Yaha-kui zaShunina.mkv" -map 0:v -map 0:s -map 0:m:language:eng -map:0:a:1? -codec copy "copy Episode 01 - Yaha-kui zaShunina.mkv"

이것은 내가 올바른 구문을 얻은 유일한 것이었고 여전히 제대로 작동하지 않았습니다. 나보다 똑똑한 사람이 도와줄 수 있나요? 또한 모든 비디오를 보존하고 번인(burnt-in)보다는 소프트 서브(soft sub)인지 확인하고 싶습니다.

답변1

구문은 다음과 같습니다 -map 0:s:m:language:eng.

ffmpeg -y -i "Episode 01 - Yaha-kui zaShunina.mkv" -map 0:v -map 0:a? -map 0:s:m:language:eng -codec copy "copy Episode 01 - Yaha-kui zaShunina.mkv"

문제는 첫 번째 스트림뿐만 아니라 모든 영어 자막을 매핑한다는 것입니다. 다음을 사용하여 첫 번째 영어 자막 스트림만 유지하기 위해 FFmpeg를 두 번째로 실행할 수 있습니다 -map 0:s:0.

ffmpeg -y -i "Episode 01 - Yaha-kui zaShunina.mkv" -map 0:v -map 0:a? -map 0:s:0 -codec copy "copy copy Episode 01 - Yaha-kui zaShunina.mkv"

(하나의 명령으로 첫 번째 영어 스트림만 유지하는 것이 가능한지 모르겠습니다).


다음과 같은우편는 영어 오디오 스트림을 매핑하기 위한 구문이 임을 보여줍니다 -map 0:a:m:language:eng.
0:a오디오 스트림을 나타냅니다. 자막 스트림을 참조하기 위해
로 대체할 수 있습니다 .0:s


테스트:

여러 비디오, 오디오 및 자막 스트림이 포함된 합성 비디오 파일 만들기(테스트용):

ffmpeg -y -f lavfi -i testsrc=size=384x206:rate=1 -f lavfi -i sine=frequency=300 -f lavfi -i sine=frequency=400 -f lavfi -i sine=frequency=500 -i in.srt -i in.srt -i in.srt -i in.srt -i in.srt -map:v 0 -map:a 1 -map:a 2 -map:a 3 -map:s 4 -map:s 5 -map:s 6 -map:s 7 -map:s 8 -c:v libx264 -c:a:0 ac3 -ar:0 44100 -c:a:1 ac3 -ar:1 44100 -strict -2 -c:a:2 dca -ar:2 44100 -c:s ass -metadata:s:a:0 language=fra -metadata:s:a:1 language=ger -metadata:s:a:2 language=eng -metadata:s:s:0 language=fra -metadata:s:s:1 language=ger -metadata:s:s:2 language=ger -metadata:s:s:3 language=ger -metadata:s:s:4 language=eng -t 10 input.mkv

내용 in.srt(테스트에 사용됨):

1
00:00:00,0 --> 00:00:01,0
Sec 0 to 1

2
00:00:01,0 --> 00:00:02,0
Sec 1 to 2

3
00:00:02,0 --> 00:00:03,0
Sec 2 to 3

4
00:00:03,0 --> 00:00:04,0
Sec 3 to 4

input.mkvMediaInfo 도구 사용 스트림 확인 :

Video
ID                                       : 1
Format                                   : AVC
...
Audio #1
ID                                       : 2
Language                                 : French
...
Audio #2
ID                                       : 3
Language                                 : German
...
Audio #3
ID                                       : 4
Language                                 : English
...
Text #1
ID                                       : 5
Language                                 : French
...
Text #2
ID                                       : 6
Language                                 : German
...
Text #3
Language                                 : English
...
Text #4
Language                                 : German
...
Text #5
ID                                       : 9
Language                                 : English

영어 자막만 유지하는 명령 실행:
ffmpeg -y -i input.mkv -map 0:v -map 0:a? -map 0:s:m:language:eng -codec copy tmp_output.mkv

MediaInfo를 사용하면 tmp_output.mkv두 개의 영어 자막이 있음을 알 수 있습니다.

다음을 사용하여 FFmpeg를 한 번 더 실행하십시오 -map 0:s:0.
ffmpeg -y -i tmp_output.mkv -map 0:v -map 0:a? -map 0:s:0 -codec copy output.mkv

MediaInfo 도구를 사용하여 output.mkv 스트림을 확인하면 영어 자막 스트림이 하나만 표시됩니다.

Text
ID                                       : 5
Language                                 : English
Default                                  : Yes
Forced                                   : No

관련 정보