Stream 如何使用ffmpeg设置默认流
我有一些m4v文件,我想用ffmpeg添加字幕。我知道我需要映射流以将它们放入输出文件,但如何确保此字幕流将是默认流?字幕是.srt,人们似乎在说它们与mp4容器不兼容,我需要先将字幕转换成什么 此外,各种流的顺序是否重要?视频流总是必须先出现,然后是音频,然后是字幕吗?或者你可以随意把它们混在一起吗?这有什么区别吗 最后,默认流和强制流之间的区别是什么Stream 如何使用ffmpeg设置默认流,stream,ffmpeg,subtitle,Stream,Ffmpeg,Subtitle,我有一些m4v文件,我想用ffmpeg添加字幕。我知道我需要映射流以将它们放入输出文件,但如何确保此字幕流将是默认流?字幕是.srt,人们似乎在说它们与mp4容器不兼容,我需要先将字幕转换成什么 此外,各种流的顺序是否重要?视频流总是必须先出现,然后是音频,然后是字幕吗?或者你可以随意把它们混在一起吗?这有什么区别吗 最后,默认流和强制流之间的区别是什么 SRT文件可以用作ffmpeg输入,在MP4容器中重新混合。没有兼容性问题 ffmpeg -i input.mp4 -i subtitles.
ffmpeg -i input.mp4 -i subtitles.srt -c:s mov_text -c:v copy -c:a copy output.mp4
这里对于mp4,您必须指定字幕编解码器mov_text
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输出默认流是指如果您没有在播放器中设置语言偏好代码(英语、日语、SPA、ITA等),您的播放器将默认使用的流。无论您在播放机中指定的设置如何,强制流都将强制该流。很抱歉,格式化iPhone的答案非常困难!他们应该给我一个徽章。我原以为默认/强制流与播放过程中的某些事情有关,谢谢你的澄清。如果我使用您给出的命令(ffmpeg-I input.mp4-I subtitles.srt-c:s mov_text-c:v copy-c:a copy output.mp4),一切都很好,但是我最初将输出文件作为.m4v文件,这会立即给我一个编解码器错误。我认为.mp4和.m4v容器是一样的,那么为什么它会给我一个错误,而另一个却可以工作呢?3:流可以有forced/default/tag。默认情况下,强制应始终播放。但是,如果注意默认标记,并且忽略流的顺序,则取决于设备/程序内部的mpeg解码器的实现。这适用于所有流:视频/音频/字幕。如果播放设备支持mp4内的字幕,也可以使用。默认情况下,某些电视将始终播放第一个流。无论默认标记是什么,使用m4v时都会出现错误,因为ffmpeg不知道要使用哪个容器。根据输出文件的扩展名选择容器类型。oufile.mp4将使用mp4容器。但是使用命令-f可以手动指定容器类型并使用非标准输出文件扩展名。ffmpeg-i input.mp4-i subtitles.srt-c:s mov_text-c:v copy-c:a copy-f mp4 output.m4vffmpeg还指定默认流。选项-disposition:a:1默认值将第二个音频标记为默认值,但不要忘记从第一个曲目中删除默认标记:例如-disposition:a:0 none或链接中的其他类型。它将创建原始文件的副本,因此它不是即时更改,就像使用mkvpropedit时使用--set flag default option.m4v是mp4。完全一样。唯一的区别是使用mp4文件中的Quicktime时。