bash - 我在 *.mp4 中为 i 做,然后在循环中我想使用 ${i} 但没有 .mp4。我怎样才能做到这一点?

sly*_*cat 3 bash command-line

基本上我这样做:

for i in *.mp4; 
do ffmpeg -i "${i}" -vf "movie=logo.png [watermark]; [in][watermark] overlay=10:10 [out]" -strict -2 -qscale 0 "${i}-watermarked.mp4"; 
done;
Run Code Online (Sandbox Code Playgroud)

但这有效地执行此命令

do ffmpeg -i "video.mp4" -vf "movie=logo.png [watermark];\ 
 [in][watermark] overlay=10:10 [out]" -strict -2 -qscale 0 "video.mp4-watermarked.mp4"; 
Run Code Online (Sandbox Code Playgroud)

最后一点 - video.mp4-watermarked.mp4 是我的问题。我希望它是 video-watermarked.mp4。

我怎样才能做到这一点 ?

小智 6

如果您使用的是 bash,请尝试使用${i%%.mp4}.

对于您的示例,它将是:

for i in *.mp4; 
do ffmpeg -i "${i}" -vf "movie=logo.png [watermark]; [in][watermark] overlay=10:10 [out]" -strict -2 -qscale 0 "${i%%.mp4}-watermarked.mp4"; 
done;
Run Code Online (Sandbox Code Playgroud)

您可能希望在手册页中查找的术语是Parameter Expansion ,可能还有许多其他操作。