我有一些 m4v 文件,我想用 ffmpeg 添加字幕。我知道我需要将流映射到输出文件中,但是如何确保这个字幕流是默认流?字幕是 .srt 并且人们似乎在说它们与 mp4 容器不兼容,我需要先将字幕转换为什么?
此外,各种流的顺序是否重要?视频流总是必须先出现,然后是音频,然后是字幕吗?或者你可以随意混合它们吗?它有什么不同吗?
最后,默认流和强制流有什么区别?
1. 我有一些 m4v 文件,我想用 ffmpeg 添加字幕。
m4v 是非平台特定 MP4 标准的 Apple 仿制版本。我对这种 Apple 格式了解不多,但与大多数较旧的容器格式一样,我怀疑它可能只支持音频/视频,或者对字幕的支持很差或有限。
2. 字幕是.srt ,好像有人说他们不兼容mp4容器,我需要先把字幕转换成什么?
您可以使用 AegisSub 或 Gaupol 等工具转换字幕。但是,我的建议是使用 MKVMerge 工具来生成 MKV 文件容器,这是一种容器格式,旨在支持大量不同的流,包括字幕(几乎每种类型)、字体和附件。MKVmerge 还将允许您指定默认流。
3. 另外,各种流的顺序是否重要?视频流总是必须先出现,然后是音频,然后是字幕吗?或者你可以随意混合它们吗?它有什么不同吗?
否。每个流的类型(视频/音频/字幕/其他)在标题中指定。玩家可以分辨出哪个是哪个。
4. 最后,默认流和强制流有什么区别?
如果您没有在播放器中设置语言偏好代码(ENG、JAP、SPA、ITA 等),默认流是播放器默认使用的流。强制流将强制该流,无论您在播放器中指定的设置如何。
SRT 文件可用作 ffmpeg 输入以在 MP4 容器中重新混合。不存在兼容性问题。
ffmpeg -i input.mp4 -i subtitles.srt -c:s mov_text -c:v copy -c:a copy output.mp4
对于 mp4,您必须指定字幕编解码器mov_text
。
订单不计算在内,您可以反转输入,您可以反转音频/视频和字幕编解码器设置,您将始终有 3 首曲目一起播放。
ffmpeg -i subtitles.srt -i input.mp4 -c:s mov_text -c:a copy -c:v copy output.mp4
不确定,但在这里我们明确地为字幕设置了一个编解码器,它可能就是你所说的“强制”。它有点不同:
ffmpeg -i input.mp4 output.mp4
这里 ffmpeg 将使用其“默认流类型”或编解码器来输出 MP4。