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

FFmpeg多分辨率HLS转码脚本兼容无音频输入方案求助

解决方案

核心问题是-var_stream_map要求指定的音视频流必须存在,因此最优解是提前检测输入文件的音频轨道情况,无音频时自动注入符合编码要求的静音音轨,保证输入始终有1条可用音频流,原有转码逻辑无需大幅修改。

修改后的完整脚本如下:

VIDEO_IN=test.mov
VIDEO_OUT=master
HLS_TIME=4
FPS=25
GOP_SIZE=100
PRESET_P=veryslow
V_SIZE_1=960x540
V_SIZE_2=416x234
V_SIZE_3=640x360
V_SIZE_4=768x432
V_SIZE_5=1280x720
V_SIZE_6=1920x1080

# 检测输入文件是否存在音频轨道
HAS_AUDIO=$(ffprobe -v error -select_streams a:0 -show_entries stream=codec_type -of default=noprint_wrappers=1:nokey=1 "$VIDEO_IN" | wc -l)
# 构建音频输入参数
AUDIO_INPUT_PARAM=""
if [ $HAS_AUDIO -eq 0 ]; then
    # 无音频时注入匹配参数的静音音轨:单声道、44100采样率
    AUDIO_INPUT_PARAM="-f lavfi -i anullsrc=cl=mono:r=44100"
fi

# HLS转码
ffmpeg -i $VIDEO_IN $AUDIO_INPUT_PARAM -y \
    -preset $PRESET_P -keyint_min $GOP_SIZE -g $GOP_SIZE -sc_threshold 0 -r $FPS -c:v libx264 -pix_fmt yuv420p \
    -map v:0 -s:0 $V_SIZE_1 -b:v:0 2M -maxrate:0 2.14M -bufsize:0 3.5M \
    -map v:0 -s:1 $V_SIZE_2 -b:v:1 145k -maxrate:1 155k -bufsize:1 220k \
    -map v:0 -s:2 $V_SIZE_3 -b:v:2 365k -maxrate:2 390k -bufsize:2 640k \
    -map v:0 -s:3 $V_SIZE_4 -b:v:3 730k -maxrate:3 781k -bufsize:3 1278k \
    -map v:0 -s:4 $V_SIZE_4 -b:v:4 1.1M -maxrate:4 1.17M -bufsize:4 2M \
    -map v:0 -s:5 $V_SIZE_5 -b:v:5 3M -maxrate:5 3.21M -bufsize:5 5.5M \
    -map v:0 -s:6 $V_SIZE_5 -b:v:6 4.5M -maxrate:6 4.8M -bufsize:6 8M \
    -map v:0 -s:7 $V_SIZE_6 -b:v:7 6M -maxrate:7 6.42M -bufsize:7 11M \
    -map v:0 -s:8 $V_SIZE_6 -b:v:8 7.8M -maxrate:8 8.3M -bufsize:8 14M \
    -map a:0 -map a:0 -map a:0 -map a:0 -map a:0 -map a:0 -map a:0 -map a:0 -map a:0 -c:a aac -b:a 128k -ac 1 -ar 44100 \
    -f hls -hls_time $HLS_TIME -hls_playlist_type vod -hls_flags independent_segments \
    -master_pl_name $VIDEO_OUT.m3u8 \
    -hls_segment_filename HLS/stream_%v/s%06d.ts \
    -strftime_mkdir 1 \
    -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2 v:3,a:3 v:4,a:4 v:5,a:5 v:6,a:6 v:7,a:7 v:8,a:8" HLS/stream_%v.m3u8

关键修改说明

  • 新增ffprobe检测逻辑,自动判断输入是否存在音频轨道
  • 无音频时通过anullsrc滤镜生成静音轨道,参数和原有音频编码要求的单声道、44100采样率完全对齐,不会出现编码不兼容问题
  • 原有所有转码、多码率配置、HLS参数均未改动,输出的分片、码率、清晰度和原脚本完全一致
  • 不需要修改-var_stream_map参数,因为始终保证有可用的音频流,不会再出现匹配失败的报错

注意事项

ffprobe一般随FFmpeg默认安装,无需额外部署。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:48:03