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
相关产品推荐
相关产品推荐

