bash - 从 while read 行运行函数

标签 bash function loops ffmpeg while-loop

我正在尝试从 while read 行运行一个函数,该函数包含用于合并两个文件的 ffmpeg 命令。但由于某种原因,它正在运行第一个 $line而不是从循环中中断。

"$filesList"包含三行。我不确定出了什么问题,但我可以通过 echo "$OFILE"确认如果我 comment out 则开启器函数运行了 3 次。 ffmpeg 命令,并且只有一次 with ffmpeg 命令。

opener(){
        OFILE="$1"
        echo "$OFILE"

        ffmpeg -i $opener_path -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
        ffmpeg -i $OFILE -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts
        ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc merge_$OFILE

        mv merge_$OFILE $OFILE
        rm intermediate1.ts intermediate2.ts
}


while read line; do
        if [ -e "$line" ]; then
                opener "$line"
        fi
done <<< "$filesList"

最佳答案

它似乎是 ffmpeg 之一commands 正在从标准输入读取,这会消耗 $filesList 的其余内容在下次调用 read 之前.我不熟悉ffmpeg ,但有两种可能:

  • 是否 -i需要论证吗?您发布的代码未设置 opener_path 的值, 所以它的不带引号的扩展会产生一个空字符串,被 shell 丢弃。
  • concat:intermediate1.ts|intermediate2.ts怎么样由 ffmpeg 解释?鉴于调用 rm ,它似乎产生了一对来自未知来源的文件。
  • 关于bash - 从 while read 行运行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19144352/

    相关文章:

    bash - 在 bash 历史记录中搜索更简单的命令

    javascript - 如何向 CSS 选择器添加通配符?

    java - 如何循环遍历 List<Pair>> 迭代器

    bash - 如何从字符串中提取子字符串

    python - 从 .bashrc 执行时如何使工作的 python 程序无错误地运行

    php - 在 func_get_args() 中有变量名

    c - 如何修复 C 中 print 语句执行后程序打印 0 的问题?

    c++ - "Executing"没有递归的语句体

    javascript - 如果所有迭代都返回空,则执行某些操作,如果其中 1 次迭代返回某些内容,则执行其他操作

    bash 获取最后一行的第一个字