Bash 在读取行时从运行函数
我试图在读取行时从运行一个函数,该函数包含对两个文件进行边缘化的ffmpeg命令。但由于某种原因,它运行的是第一个Bash 在读取行时从运行函数,bash,function,loops,ffmpeg,while-loop,Bash,Function,Loops,Ffmpeg,While Loop,我试图在读取行时从运行一个函数,该函数包含对两个文件进行边缘化的ffmpeg命令。但由于某种原因,它运行的是第一个$line,然后从循环中断 “$filesList”包含三行。我不确定出了什么问题,但我可以用echo“$OFILE”确认,如果我注释掉ffmpeg命令,则opener函数运行三次,而使用ffmpeg命令只运行一次 opener(){ OFILE="$1" echo "$OFILE" ffmpeg -i $opener_path -c
$line
,然后从循环中断
“$filesList”包含三行。我不确定出了什么问题,但我可以用echo“$OFILE”确认,如果我注释掉
ffmpeg命令,则opener函数运行三次,而使用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"
opener(){
OFILE=“$1”
回声“$OFILE”
ffmpeg-i$opener_path-c copy-bsf:v h264_mp4toanexb-f mpegts intermediate1.ts
ffmpeg-i$OFILE-c copy-bsf:v h264_mp4toanexb-f mpegts intermediate2.ts
ffmpeg-i“concat:intermediate1.ts | intermediate2.ts”-c copy-bsf:aac|u adtstoasc合并文件
mv合并文件$OFILE$OFILE
rm intermediate1.ts intermediate2.ts
}
读行时;做
如果[-e“$line”];然后
开场白“$line”
fi
完成似乎有一个ffmpeg
命令正在从标准输入读取,在下一次调用read
之前,该命令将消耗$filesList
的其余内容。我不熟悉ffmpeg
,但有两种可能:
-i
是否需要参数?您发布的代码没有设置opener\u path
的值,因此它的无引号扩展将生成一个空字符串,该字符串将被shell丢弃
ffmpeg
如何解释concat:intermediate1.ts | intermediate2.ts
?调用rm
,它似乎从未知源生成了一对文件
似乎有一个ffmpeg
命令正在从标准输入读取,这将在下次调用read
之前消耗$filesList
的其余内容。我不熟悉ffmpeg
,但有两种可能:
-i
是否需要参数?您发布的代码没有设置opener\u path
的值,因此它的无引号扩展将生成一个空字符串,该字符串将被shell丢弃
ffmpeg
如何解释concat:intermediate1.ts | intermediate2.ts
?调用rm
,它似乎从未知源生成了一对文件
试着set-e
和/或set-v
看看到底发生了什么。@rici没有显示任何特别之处。一旦完成第一个循环,脚本就结束了,没有任何额外的命令。我倾向于同意@chepner。您是否仔细研究了ffmpeg命令行是如何进行参数扩展的?(您可以通过将opener“$line”
更改为opener“$line”来检查@chepner的理论)@rici很有趣,现在它可以工作了!试着set-e
和/或set-v
看看到底发生了什么。@rici没有什么特别之处。它完成第一个循环后,脚本就结束了,没有任何额外的命令。我倾向于同意@chepner。你仔细看过ffmpeg命令行的参数扩展了吗?(您可以通过将opener“$line”
更改为opener“$line”来检查@chepner的理论)@rici有趣,现在它工作了!$opener\u path
不是100%为空,第一个文件合并出来。我不知道ffmpeg如何解释concat…我现在只知道它合并了intermediate1.ts和intermediate2.ts。你所说的似乎是从未知源生成一对文件
?我在中间文件上运行rm我以前是由ffmpegSorry创建的,没有滚动到足够远的地方来查看它们是由对ffmpeg
的前两次调用生成的。这里解释:$opener\u path
不是100%为空,第一个文件合并出来。我不知道ffmpeg是如何解释concat的…我现在只合并了intermediate1.ts和intermediate2.ts.您所说的似乎从未知源生成一对文件是什么意思?
?我在先前由ffmpegSorry创建的中间文件上运行rm,但没有滚动足够远,以查看它们是由对ffmpeg
的前两次调用生成的。此处解释: