我试图在 FFmpeg 上运行以下行,它将基本上“重新格式化” MKV 文件为 MP4,而无需进行任何重新编码,并将 SRT 字幕嵌入到 MP4 输出中:
ffmpeg -i test.mkv -i test.srt -newsubtitle -acodec copy -vcodec copy test.mp4
如果没有“-i test.srt -nwesubtitle”位,它似乎工作得很好;然而,有了它,我得到了以下输出:
似乎流 0 编解码器帧速率与容器帧速率不同:47.95 (5000000/104271) -> 23.98 (24000/1001)
Stream #0.0(eng): Video: h264, yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc
Stream #0.1(eng): Subtitle: 0x0000
Metadata:
title : English
Stream #0.2(jpn): Audio: aac, 48000 Hz, stereo, s16
Metadata:
title : Japanese 2.0
Stream #0.3(eng): Audio: aac, 48000 Hz, stereo, s16
Metadata:
title : English 2.0
Stream #0.4(eng): Subtitle: 0x0000
Metadata:
title : English Songs & Signs
Stream #0.5: Attachment: 0x0000
Metadata:
filename : MyriadPro-Bold.ttf
Stream #0.6: Attachment: 0x0000
Metadata:
filename : MyriadPro-RegularHaruhi.ttf
Stream #0.7: Attachment: 0x0000
Metadata:
filename : ChaparralPro-BoldIt.ttf
Stream #0.8: Attachment: 0x0000
Metadata:
filename : ChaparralPro-SemiboldIt.ttf
Stream #0.9: Attachment: 0x0000
Metadata:
filename : epmgobld_ending.ttf
Stream #0.10: Attachment: 0x0000
Metadata:
filename : epminbld_opening.ttf
Stream #0.11: Attachment: 0x0000
Metadata:
filename : Folks-Bold.ttf
Stream #0.12: Attachment: 0x0000
Metadata:
filename : GosmickSansBold.ttf
Stream #0.13: Attachment: 0x0000
Metadata:
filename : WarnockPro-LightDisp.ttf
Stream #0.14: Attachment: 0x0000
Metadata:
filename : epmgobld_ending.ttf
Stream #0.15: Attachment: 0x0000
Metadata:
filename : GosmickSansBold.ttf
Stream #0.16: Attachment: 0x0000
Metadata:
filename : Marker SD 1.2.ttf
Stream #0.17: Attachment: 0x0000
Metadata:
filename : MyriadPro-Bold.ttf
Stream #0.18: Attachment: 0x0000
Metadata:
filename : MyriadPro-RegularHaruhi.ttf
Stream #0.19: Attachment: 0x0000
Metadata:
filename : MyriadPro-SemiCn.ttf
test.srt: Invalid data found when processing input
我尝试添加“-r pal”、“-r ntsc”或“-r 23.98”,认为这是帧速率问题,但没有变化。
答案1
FFmpeg 调用“test.srt:处理输入时发现无效数据”,因为它根本无法处理 SRT 文件。我运行了选项-codecs
,果然没有列出“srt”编解码器。
为了解决这个问题,我从源代码编译了 ffmpeg,并使用配置选项来启用字幕。
显然,在 Ubuntu 存储库中可以找到的 FFmpeg 是在关闭字幕的情况下运行的。
答案2
MP4 不正式支持 SRT 字幕,许多播放 MP4 的设备无法播放其中包含的 SRT 字幕。兼容性广泛是使用 MP4 而不是 MKV 的主要原因,因此您不妨坚持使用 Matroska。
要将多个文件合并为一个 MKV,请mkvmerge
使用mkvtoolsnix
:
mkvmerge -o output.mkv input.mkv input2.srt
如果你坚持使用 MP4,那么MP4Box
等效工具是(来自gpac
):
MP4Box -out output.mp4 -add input.mkv -add input2.srt