![软字幕](https://linux22.com/image/1097295/%E8%BD%AF%E5%AD%97%E5%B9%95.png)
我有一个 MKV 视频,想将其转换为 MP4,但无论我使用哪种方式转换(Handbrake、WinFF、FFmpeg、MEncoder 等),视频的字幕都会丢失。我该如何转换视频、保留字幕或添加字幕.srt
?
我还希望进行 2 次编码,视频比特率为 4054,音频比特率为 160。
谢谢。
我被要求提供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
答案1
软字幕
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 等)。请注意,这需要重新编码,因此比使用软字幕慢得多。
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
另请参阅
答案2
您可以使用它-map 0
来确保所有流都被复制。如果格式无法复制,FFmpeg 就会出错。
-map 0
告诉 ffmpeg/libav 包含所有流,而不仅仅是那些定义了转换规则的流。
通常,-map
用于定义流映射 - 例如,输入中的流 1 应成为输出中的流 0。只需-map 0
告诉 ffmpeg/libav 采取所有流而不进行改组即可。
如果得到Subtitle encoding currently only possible from text to text or bitmap to bitmap
,则需要添加-c:s copy
以告诉 ffmpeg 仅复制字幕。
答案3
如果您只想简单地转换为 mp4,则可以使用 VLC。VLC 将接受字幕文件并将其渲染到输出上。
对于更复杂的转换,包括字幕样式,您可以使用 OpenShot。
答案4
好吧,我找到了一种方法来让它工作,虽然不是最理想的,但它确实有效。我可以用 mkvmerge 为视频添加 srt。唯一的缺点是它会将视频制作成 mkv,而不是 mp4。