비디오를 변환 할 때 자막을 추가 및 / 또는 유지하려면 어떻게합니까?


16

mp4로 변환하고 싶은 mkv 비디오가 있지만, 내가 시도하고 변환하는 모든 방법 (Handbrake, WinFF, ffmpeg, mencoder 등)은 비디오의 자막을 잃어 버립니다. 비디오의 자막을 유지하는 방법 또는 subtitles.srt를 추가 하시겠습니까?

또한 비디오 비트 전송률 4054 및 오디오 비트 전송률 160의 2 패스 인코딩을 원합니다.

감사.

나는 ffmpeg -i를 요청 받았다.

joe@joe-Leopard-Extreme:/media/Elements/Home Folder/Videos$ ffmpeg -i iron.mkv
ffmpeg version 0.8.3-4:0.8.3-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav     developers
built on Jun 12 2012 16:52:09 with gcc 4.6.3
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
[matroska,webm @ 0x1a319a0] Estimating duration from bitrate, this may be inaccurate
Input #0, matroska,webm, from 'iron.mkv':
Metadata:
title           : Iron 
Duration: 02:06:01.67, start: 0.000000, bitrate: 1280 kb/s
Chapter #0.0: start 0.000000, end 546.170622
Metadata:
  title           : Chapter 00
Chapter #0.1: start 546.170622, end 1080.579489
Metadata:
  title           : Chapter 01
Chapter #0.2: start 1080.579489, end 1609.941667
Metadata:
  title           : Chapter 02
Chapter #0.3: start 1609.941667, end 2101.849733
Metadata:
  title           : Chapter 03
Chapter #0.4: start 2101.849733, end 2595.259333
Metadata:
  title           : Chapter 04
Chapter #0.5: start 2595.259333, end 3158.488667
Metadata:
  title           : Chapter 05
Chapter #0.6: start 3158.488667, end 3564.644400
Metadata:
  title           : Chapter 06
Chapter #0.7: start 3564.644400, end 4052.423356
Metadata:
  title           : Chapter 07
Chapter #0.8: start 4052.423356, end 4304.300000
Metadata:
  title           : Chapter 08
Chapter #0.9: start 4304.300000, end 4711.206489
Metadata:
  title           : Chapter 09
Chapter #0.10: start 4711.206489, end 5080.575489
Metadata:
  title           : Chapter 10
Chapter #0.11: start 5080.575489, end 5700.111067
Metadata:
  title           : Chapter 11
Chapter #0.12: start 5700.111067, end 6269.346400
Metadata:
  title           : Chapter 12
Chapter #0.13: start 6269.346400, end 6811.471333
Metadata:
  title           : Chapter 13
Chapter #0.14: start 6811.471333, end 7561.679000
Metadata:
  title           : Chapter 14
Stream #0.0(eng): Video: h264 (High), yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc
Stream #0.1(eng): Audio: ac3, 48000 Hz, 5.1, s16, 640 kb/s (default)
Metadata:
  title           : 3/2+1
Stream #0.2(ita): Audio: ac3, 48000 Hz, 5.1, s16, 640 kb/s
Metadata:
  title           : 3/2+1
Stream #0.3(eng): Subtitle: pgssub (default)
Stream #0.4(eng): Subtitle: pgssub
Stream #0.5(eng): Subtitle: pgssub
Stream #0.6(eng): Subtitle: pgssub
At least one output file must be specified
joe@joe-Leopard-Extreme:/media/Elements/Home Folder/Videos

답변:


19

소프트 서브

MP4는 스트리밍 텍스트 형식 자막을 지원하지만 플레이어와 장치 간의 재생 지원은 보편적이지 않습니다.

오디오 를 스트림 복사 하는 동안 기본 스트림 선택 동작을 사용하는 기본 예 :

ffmpeg -i input.mkv -c copy -c:s mov_text output.mp4

모든 비디오 및 오디오 스트림 을 스트리밍 복사 하는 예제 , 모든 텍스트 기반 자막 입력 스트림 (SRT, ASS, VTT 등)을 스트리밍 텍스트 형식으로 변환하고 처음 두 자막 스트림의 언어를 설정합니다.

ffmpeg -i input.mkv -map 0 -c copy -c:s mov_text -metadata:s:s:0 language=eng -metadata:s:s:1 language=ipk output.mp4

위와 동일하지만 비디오 및 오디오를 MP4 컨테이너와 호환되는 형식으로 다시 인코딩합니다 (H.264 비디오 :

ffmpeg -i input.mkv -map 0 -c:v libx264 -c:a aac -c:s mov_text -metadata:s:s:0 language=eng -metadata:s:s:1 language=ipk output.mp4

위와 동일하지만 -map옵션을 사용하여 첫 번째 비디오 스트림, 두 번째 오디오 스트림 및 세 번째 자막 스트림을 선택하십시오.

ffmpeg -i input.mkv -map 0:v:0 -map 0:a:1 -map 0:s:2 -c:v libx264 -c:a aac -c:s mov_text -metadata:s:s:0 language=eng output.mp4

하드 서브

텍스트 기반 자막 형식 입력

자막 필터 를 사용하여 텍스트 기반 자막 형식 (SRT, ASS, VTT 등)을 "번인 (burn-in)"하십시오. 이를 위해서는 재 인코딩이 필요하므로 softsub를 사용하는 것보다 훨씬 느립니다.

오디오 를 스트림 복사 하는 동안 기본 스트림 선택 동작을 사용하는 기본 예 :

ffmpeg -i input.mkv -filter_complex "subtitles=input.mkv" -c:a copy output.mp4

세 번째 비디오 스트림, 다섯 번째 자막 스트림 및 첫 번째 오디오 스트림을 사용하는 예 :

ffmpeg -i input.mkv -filter_complex "[0:v:2]subtitles=input.mkv:si=4[v]" -map "[v]" -map 0:a:0 -c:a copy output.mp4

별도의 자막 입력 파일 ( your-subtitles-file.srt)의 예 :

ffmpeg -i input.mp4 -filter_complex "subtitles=your-subtitles-file.srt" -c:a copy output.mp4

이미지 기반 자막 형식 입력

오버레이 필터를 사용하십시오 . 이 예제는 두 번째 비디오 스트림 위에 네 번째 자막 스트림을 오버레이하고 일곱 번째 오디오 스트림을 스트림 복사합니다.

ffmpeg -i input.mkv -filter_complex "[0:v:2][0:s:3]overlay[v]" -map "[v]" -map 0:a:6 -c:a copy output.mp4

참조


이것은 약간 혼란 스러웠습니다. 당신은 전체 명령을 제공 할 수 있습니까? 예, 특정 출력 파일 크기를 대상으로합니다.
JoeSteiger

@JoeSteiger ffmpeg -i input.mkv먼저 콘솔 출력을 제공하여 질문을 업데이트해야합니다 .
llogan

위의 의미가 무엇입니까?
JoeSteiger

@JoeSteiger 네, 도움이되었습니다.
llogan

K, 다음에해야 할 일을 알려주세요.
JoeSteiger 1

13

-map 0을 사용하여 모든 스트림을 복사 할 수 있습니다. 형식을 사용할 수 없으면 ffmpeg가 오류가 발생합니다.

-map 0은 ffmpeg / libav에 대류 규칙을 정의한 스트림뿐만 아니라 모든 스트림을 포함하도록 지시합니다.

일반적으로 -map은 스트림 매핑을 정의하는 데 사용됩니다. 즉, 입력의 스트림 1은 출력의 스트림 0이되어야합니다. -map 0 만 사용하면 ffmpeg / libav가 셔플 링없이 모든 스트림을 가져 오도록 지시합니다.


좀 더 설명해 주시겠습니까?
Kaz Wolfe

내 답변을 편집했습니다
Arne Babenhauserheide

1

mp4로 간단히 변환하려면 VLC를 사용할 수 있습니다. VLC는 자막 파일을 받아 출력으로 렌더링합니다.

자막 스타일 지정을 포함한보다 복잡한 변환을 위해 OpenShot을 사용할 수 있습니다.


-1

글쎄, 그것이 이상적이지는 않지만 작동하게하는 방법을 찾았지만 작동합니다. mkvmerge를 사용하여 비디오에 srt를 추가 할 수 있습니다. 유일한 몰락은 비디오를 mp4가 아닌 mkv로 만드는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.