gpt4 book ai didi

video - 如何使用选定的音频流将视频转换为 hls?

转载 作者:行者123 更新时间:2023-12-04 23:07:02 27 4
gpt4 key购买 nike

我正在尝试将具有多个音频流的一些视频(不同格式,例如 mp4、mkv、avi)转换为只有一个音频的 HLS。我用 ffmpeg 尝试了不同的解决方案,但似乎没有一个是理想的。
例如 ffmpeg -i in.mkv -codec: copy -f hls out.m3u8来自 this gist仅在 in.mkv 时有效有一个音频流(至少这是我的理解)。
然后我尝试过:

ffmpeg -i in.mkv -map 0:v:0 -map -0:a:0 -c copy -f hls out.m3u8
我不确定为什么这个解决方案不起作用,但取决于播放器和输入文件,视频播放不正确(例如 hls.js 图像的缺失仅被偶尔的声音包围)。
我的下一个想法是首先转换 in.mkvin_tmp.mkv只有一个音频流,然后使用上面的要点:
ffmpeg -i in.mkv -map 0:v:0 -map -0:a:0 -c copy in_tmp.mkv
ffmpeg -i in_tmp.mkv -c copy -f hls out.m3u8
但结果与我之前的尝试相同。我的猜测是 -c copy 有问题(但坦率地说,我不太明白我在做什么)。
所以我最终使用了 filter_complexconcat :
  ffmpeg -i in.mkv -filter_complex '[0:v:0][0:a:0] concat=n=1:v=1:a=1 [v] [a]' -map '[v]' -map '[a]' -f hls out.m3u8
看起来它可以正常工作,并且我尝试过的不同播放器可以正确播放输出视频,但当然感觉不是最理想的:它需要很多时间和使用 concat看起来很做作。
所以问题是如何将视频转换为 HLS,只有一个选定的音频流,有或没有 ffmpeg?

最佳答案

How to convert a video to HLS with only one selected audio stream?


最基本的命令:
ffmpeg -i input.mkv -c copy -f hls output.m3u8
这将使用默认的 stream selection行为,它将为每种流类型选择一个流。
或使用 -map 手动选择所需的流.如果音频存在,此示例将选择所有视频流并可选地选择音频流#3(注意索引从 0 开始计数):
ffmpeg -i input.mkv -c copy -map 0:v -map 0:a:3? -f hls output.m3u8
您对 -map -0:a:0 的命令是一个负映射,它将排除流 0:a:0 .
FFmpeg Wiki: Map许多示例和更多信息。

关于video - 如何使用选定的音频流将视频转换为 hls?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69446738/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com