是否可以使用 FFMPEG 将 m3u8 转换为 MP4 并保留字幕(文本)轨道?
当查看 Apple 流时,https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8 我看到视频流提到了隐藏式字幕,但我似乎找不到提取它们的方法。
流 #0:0:视频:h264(主)([27][0][0][0] / 0x001B),yuv420p(电视,smpte1 70m/smpte170m/bt709)、400x300、隐藏式字幕, 29.92 fps, 29.92 tbr, 90k tbn, 1 80k 待定
我多次尝试将其转码为 mp4,但字幕却丢失了。
我已经在清单上使用了 VLC,它有“字幕”,但转码后 mp4 没有。
使用命令:
ffmpeg -i https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8 -c copy -bsf:a aac_adtstoasc out.mp4
答案1
我确实设法收集了足够的信息来完成这项工作。它是 3 个命令的组合。
使用 ffmpeg 版本 2.8.4
首先,需要将播放列表片段合并为一个 MPEG-TS 文件:
ffmpeg -i [playlist_url].m3u8 -c copy [filename].ts
接下来,我们需要从文件中提取隐藏式字幕:
ffmpeg -f lavfi -i "movie=[filename_from_last_step].ts[out0+subcc]" [filename].srt
笔记:只有当 ts 文件和 cmd 的当前路径匹配时,我才能使其工作。
最后,合并 ts 和 srt 文件并转码为 MP4:
ffmpeg -i [filename_from_first_step].ts -i [captions].srt -c:v copy -bsf:a aac_adtstoasc -c:s mov_text [out_file_name].mp4
这将为您提供一个嵌入字幕的 MP4,如果您的播放器不支持嵌入字幕,还将为您提供一个独立的 srt 文件。