You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ffmpeg-python转码无音频视频为HLS时master.m3u8无流列表问题

问题原因
  • 当前转码配置默认要求HLS变体流必须同时包含音视频轨,当输入无音频流时,所有转码生成的变体流不符合规则,被ffmpeg自动过滤,不会写入master.m3u8文件
  • 另一类常见原因是配置中强制写死了音频流映射、音频编码参数,无音频输入时ffmpeg找不到对应的音频流,转码逻辑异常,直接跳过了变体流的写入
解决方案

方案1:适配现有配置,自动补全静音音轨(推荐)

无需修改原有HLS输出逻辑,只需要判断输入是否存在音频流,无音频时生成一个静音音频轨补入即可,ffmpeg-python示例代码如下:

import ffmpeg

input_path = "你的输入视频路径.mp4"
# 探测输入文件流信息
media_info = ffmpeg.probe(input_path)
has_audio = any(stream["codec_type"] == "audio" for stream in media_info["streams"])

input_video = ffmpeg.input(input_path).video
if not has_audio:
    # 生成采样率44100、双声道的静音音频流
    input_audio = ffmpeg.input("anullsrc=r=44100:cl=stereo", f="lavfi").audio
else:
    input_audio = ffmpeg.input(input_path).audio

# 后续接你原有多码率转码、HLS输出的逻辑即可

该方案生成的HLS流和原配置生成的结构完全一致,兼容性更好,无需调整播放器侧逻辑。

方案2:修改HLS配置,允许纯视频流

如果业务不需要音频轨,可以直接修改输出参数允许纯视频变体流写入master.m3u8:

  1. 输出参数中添加hls_allow_videos_only=1配置,允许纯视频流被识别为合法变体流
  2. 移除配置中强制映射音频流、强制指定音频编码的参数,如果原有配置硬写了CODECS属性包含音频编码(比如mp4a.40.2),要改为仅保留视频编码标识
    ffmpeg-python输出部分示例:
(
    ffmpeg
    .output(
        [input_video, *your_variant_params],
        "master.m3u8",
        hls_time=10,
        hls_playlist_type="vod",
        master_pl_name="master.m3u8",
        hls_allow_videos_only=1, # 关键配置
        # 无音频时codecs仅保留视频编码
        hls_segment_codecs="avc1.64001f"
    )
    .run()
)

内容的提问来源于stack exchange,提问作者kamoloff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:54:04