我正在实施离线视频流服务,因此我们的用户可以在他们的计算机上拥有加密的视频,并且只能使用我们的流媒体应用程序打开它们。
所以我需要的是将新解密的视频文件直接流式传输到本地 VLC 客户端,这样我就不必将其保存在磁盘上。一个最低限度的工作示例是:
cat my_video.mp4 | vlc -
但这只显示视频和音频轨道,没有字幕。
我想知道是否有办法对视频进行编码,以便它可以与 3 个音轨和 3 个字幕轨道一起使用。 我也会接受一个答案,解释这是不可能的,为什么不。
更多详情如下:
我有 3 个音轨和 3 个字幕轨道,我正在使用 FFMPEG。
(视频的原始格式是带有h264编码的mp4)
目前,由于这个答案,我能够制作可流式传输的.mp4
文件,还可以制作.ts
文件,这些文件将显示视频和 3 个音频选项,但不显示字幕。我正在使用的命令是这样的:
video_name=demo_0101.mp4
sub_name=demo_0101.srt
output=0101.mp4 # Or `.ts`
ffmpeg
-i en_raw/$video_name -i pt_raw/$video_name -i es_raw/$video_name
-i en_subs/$sub_name
-i pt_subs/$sub_name
-i es_subs/$sub_name
-map 2:v
-map 0:a:0 -map 1:a:0 -map 2:a:0
-map 3:s -map 4:s -map 5:s
-c:v libx264 -crf 22
-movflags faststart # (This line is only necessary for .mp4)
-c:a:0 aac -c:a:1 aac -c:a:2 aac
-c:s:0 mov_text -c:s:1 mov_text -c:s:2 mov_text
$output
问题是:使用.ts
格式无法识别字幕(根本不显示),并且在使用.mp4
VLC时报告错误:
未识别的编解码器: VLC 无法识别音频或视频编解码器
请注意,当不流式传输时,.mp4
版本适用于所有音频和字幕,即:
vlc my_video.mp4
如果有人想知道我计划使用 VLC 选项从命令行选择要播放的字幕和音频:--audio-track 1 --sub-track 0
我希望有人能帮助我。提前谢谢。
我无法找到一种直接在视频上对字幕进行编码的方法,这将是更可取的解决方案。但是,我找到了一个VLC命令,该命令将显示字幕文件以及流视频:
cat 0101.mp4 | vlc --sub-file en_subs/demo_0101.srt
这并不理想,原因有二:
- 它不适用于
.ts
格式 仅.mp4
. - 这需要我将原始字幕文件保存在用户磁盘上。
我不会将此解决方案标记为可接受的答案,因为如果可以直接使用我想知道的字幕流式传输视频,并且我也相信这样的答案对碰巧阅读此页面的其他人会有所帮助。