添加字幕流可以使用ACHTIME软件去添加。
一 下载ACHTIME软件
在下载之前我们需要注册一个账号。然后才能下载。
http://arctime.cn/download.html
二 添加字幕流
我们知道字幕流分为外挂字幕、软字幕、硬字幕,我们这里因为想要在代码测试。所以需要的是软字幕。关于字幕更多的理论可以看这篇文章:ffmpeg-给视频添加字幕(二十四)。
2.1
首先找一个不带字幕流(外挂、软、硬均没有)的视频文件,可以使用vlc去看。例如我的视频文件:
下面看到只有视频和音频流,并没有字幕流。
2.2
然后打开ACHTIME软件,按照这篇文章去生成字幕即可。
使用Arctime生成各种格式的字幕文件。
此时再用VLC播放本视频文件,就可以看到多了字幕流。
实际上我们在插入空白字幕的时候,发现生成的ass字幕文件中,字幕是2s的显示时长。srt字幕文件也同理。
但是我在使用ffplay去debug的时候,并未看到有字幕流,使用ffprobe同理。
命令:
ffprobe.exe sintel.mp4
结果只看到视频流和音频流,并未有字幕流,那为啥vlc看到的信息又有字幕流呢?
答:这是因为这个文件实际并没有字幕流,vlc能看到信息是因为vlc的信息查找做得比较细,因为这个信息是ARCTIME工程生成的,所以vlc能看到,ffprobe看不到。这是不同播放器的检测差异造成的。
如果此时你将这个mp4的文件路径移动其它目录,例如桌面,那么此时不管是使用vlc还是ffplay,都是没有字幕信息的。
然后如果我们使用vlc和ffplay去播放,发现vlc显示的画面都能看到字幕,ffplay不能,这一点又是挺奇怪的?
答:实际上同理,这是因为我在使用ARHTIME时,在该目录生成了一个工程,所以直接播放使用ACHTIME修改过的那个路径下的mp4文件,vlc搜索做得细,可以看到显示的画面有字幕。但是ffpaly播放不会显示字幕。
如果此时你将这个mp4的文件路径移动其它目录,例如桌面,那么此时不管是使用vlc还是ffplay,都是没有字幕的。
这两个问题实际上是一致的,因为在我未理解之前,未能很好区分它们。
2.3
经过上一步处理并未能达到我的要求,因为使用ffplay debug却没有字幕流,这不是我想要的,所以我需要去转换格式,因为我想用mp4文件debug,所以使用ffmpeg去将字幕流格式转成mov_text格式。
ffmpeg -i sintel.mp4 -i ./sintel_Subtitle_Export/sintel.srt -c copy -c:s mov_text sintel-sub.mp4
此时使用ffprobe就可以看到对应的字幕流,ffplay debug时也能进入字幕流的逻辑,说明没问题的。
但是vlc、ffplay播放时会没有字幕:
vlc解决:因为vlc默认是隐藏软字幕的,所以需要手动开启。选择:字幕->字幕轨道->轨道1,即可开启。
ffplay暂时未知道如何处理。
三 其它
如果在添加字幕后,使用播放器播放仍然没有字幕,可以参考这篇文章看看什么原因。使用FFmpeg命令给视频文件添加软字幕并解决播放器播放没有出现字幕的问题。