我正在尝试从 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/