2

我想使用 f 和 v 作为变量。f *.mkv 和 v *.mp3

for f in *.mkv v in *.mp3; do 
   ffmpeg -i "$f" -i "$v" -vcodec copy merge_"$f"
done

我不知道如何正确地做到这一点。我还是 bash shell 脚本的新手。

我希望有一个人可以帮助我。

4

2 回答 2

5

如果*.mp3*.mkvbasenames 相同:

for f in *.mkv; do
    mp3name="${f%.mkv}.mp3"
    ffmpeg -i "$f" -i "$mp3name" -vcodec copy "merge_${f}"
done
于 2015-07-09T19:53:00.280 回答
1

如果您正在寻找一种方法来循环遍历变量,就像使用原始代码循环一样,您可以这样做:

f=(*.mkv)
v=(*.mp3)
for((i=0;i<${#f[@]};i++));do
echo "${f[$i]} ${v[$i]}"
done

一般假设是,您拥有相同数量的文件mkvmp3.

或者,如果文件具有相同的基本名称,您可以这样做:

for f in *.mkv;do
v="${f/%mkv/mp3}"
echo "$f $v"
done

在最后"${f/%mkv/mp3}" mkv被替换mp3

有关详细信息,请参阅Bash 参数扩展

于 2015-07-09T20:29:44.660 回答