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

Bash脚本用ffmpeg给wav加静音 循环迭代顺序不同步问题咨询

解决方案

你可以直接在遍历每个wav文件时,用当前拿到的文件名替换input.txt的第二行,完全不需要依赖计数器,也不用关心默认的遍历顺序,脚本可以修改为以下版本:

# 先初始化固定结构的input.txt,避免旧内容干扰
echo "file 'silence.wav'" > input.txt
echo "file 'placeholder.wav'" >> input.txt
echo "file 'silence.wav'" >> input.txt

for FILE in *.wav
do
    # 跳过静音模板文件本身,避免错误处理
    if [ "$FILE" = "silence.wav" ]; then
        continue
    fi
    # 直接用当前遍历到的文件名替换第二行配置
    sed -i "2s/.*/file '$FILE'/" input.txt
    # 输出文件加out_前缀,避免覆盖原文件
    ffmpeg -f concat -i input.txt -codec copy "out_${FILE}" -y
    echo "已完成处理:${FILE}"
done

可选补充

如果你确实需要按数字从小到大的顺序处理文件,可以把遍历逻辑替换为数值排序版本:

# 先初始化固定结构的input.txt
echo "file 'silence.wav'" > input.txt
echo "file 'placeholder.wav'" >> input.txt
echo "file 'silence.wav'" >> input.txt

# 按数值从小到大排序后遍历,排除silence.wav
for FILE in $(ls *.wav | grep -v silence.wav | sort -n)
do
    sed -i "2s/.*/file '$FILE'/" input.txt
    ffmpeg -f concat -i input.txt -codec copy "out_${FILE}" -y
    echo "已完成处理:${FILE}"
done

说明:脚本中-y参数用于让ffmpeg自动覆盖已存在的输出文件,无需每次手动确认,不需要可以删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:39:02