video - 使用 ffmpeg 从流中提取隐藏式字幕 VTT

标签 video ffmpeg http-live-streaming closed-captions vtt

我可以使用 ffmpeg v. 3.4.7 从 mp4 文件中提取隐藏式字幕信息:

ffmpeg -f lavfi -i movie="sample.mp4[out+subcc]" -map 0:1 -c:s webvtt /tmp/output.vtt

该文件是通过捕获包含隐藏式字幕的实时 HLS 流获得的。我想直接从流中提取隐藏式字幕,而不是在将视频存储在文件中之后。我尝试过各种方法,包括:

ffmpeg -f lavfi -i movie="http://example.com/stream.m3u8[out+subcc]" -map 0:0 -c:s webvtt /tmp/output.vtt

但电影过滤器无法识别 URL,即使 ffmpeg filter documentation说电影过滤器的文件名“不一定是文件;它也可以是设备或通过某种协议(protocol)访问的流”:

[Parsed_movie_0 @ 0x264ad80] Failed to avformat_open_input 'http'
[lavfi @ 0x2647e80] Error initializing filter 'movie' with args 'http://example.com/stream.m3u8'
movie=http://example.com/stream.m3u8[out+subcc]: No such file or directory

当我像这样从流中捕获视频时:

ffmpeg -i http://example.com/stream.m3u8 /tmp/output.mp4

ffmpeg 报告流确实包含隐藏式字幕(这是捕获的视频文件 sample.mp4 获取它们的地方):

Stream #0:0: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709), 480x270 [SAR 1:1 DAR 16:9], Closed Captions, 14.99 fps, 14.99 tbr, 90k tbn, 29.97 tbc

这有可能吗?感谢您的指点。

最佳答案

电影过滤器可以接受您只需要转义“:”的网址 根据https://ffmpeg.org/ffmpeg-filters.html#Notes-on-filtergraph-escaping

这个命令应该可以工作

ffmpeg -f lavfi -i movie="http\\\://example.com/stream.m3u8[out+subcc]"-map 0:0 -c:s webvtt/tmp/output. vtt

关于video - 使用 ffmpeg 从流中提取隐藏式字幕 VTT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62596884/

相关文章:

ffmpeg - 如何使用 ffmpeg 和 youtube-dl 下载播放列表中每个视频的第一帧?

c++ - 将 FFmpeg AVFrame 渲染为 OpenGL 纹理?

FFMPEG:如何从所有流中选择一个流

ios - 如何将 iPhone 捕获的视频转换为 HTTP 实时流文件?

java - 用 Java 播放视频

python - 使用 OpenCV Python 从 Android 智能手机捕获视频

FFmpeg:如何将一个 100GB 的 MP4 文件拆分为多个 1GB 的文件?

ffmpeg - 构建一个直播页面,用户将通过 ip 地址输入一个 rtsp 流媒体源

javascript - 加载时随机全屏视频背景(包括 jsfiddle)

iphone - 不能让 AVAssetImageGenerator 给我电影的所有帧