我似乎不知道正确的bash语法;尽管如此,我还是尝试创建一个工具来更改工作目录中ffmpeg接受的文件类型的所有文件的尺寸,并将其转换为另一ffmpeg接受的文件类型。在这种情况下,此工具会将所有1080x720以上的.webm文件转换为1080x-1或-1x720 .mp4文件。如果.webm文件的分辨率低于1080x720,则新的.mp4文件将具有相同的尺寸。
但是,工具中有一把扳手。
convertAll () {
local wantedWidth = 1080
local wantedHeight = 720
for i in *.webm; do
local newWidth = $i.width
local newHeight = $i.height
until [$newWidth <= $wantedWidth && $newHeight <= $wantedHeight]; do
if [$videoWidth > $wantedWidth]; then
newHeight = $newWidth*($wantedWidth/$newWidth)
newWidth = $newWidth*($wantedWidth/$newWidth)
fi
if [$videoHeight > $wantedHeight]; then
newWidth = $newWidth*($wantedHeight/$newHeight)
newHeight = $newHeight*($wantedHeight/$newHeight)
fi
done
ffmpeg -i "$i" -vf scale=$newWidth:$newHeight "${i%.*}.mp4";
done
echo "All files have been converted."
}
这返回的是一串看起来像这样的线:
bash: [: missing ']'
bash: [: missing ']'
bash: =: No such file or directory
我最好的猜测是BASH不能进行数学运算,而且我声明和编辑变量的方法不正确。
我想对此提供一些意见-我的经验不足真的使我到了这里。
答案 0 :(得分:0)
最重要的部分将是检测输入视频的尺寸
并根据情况计算所需尺寸。
ffmpeg
为您做到了。
请尝试:
covertAll() {
for i in *.webm; do
ffmpeg -i "$i" -vf "scale='min(1080,iw)':'min(720,ih)':force_original_aspect_ratio=decrease" "${i%.*}.mp4"
done
}
它将按以下方式缩放尺寸(示例):
1080x720 => 1080x720
1440x720 => 1080x540
720x1080 => 480x720
720x480 => 720x480
etc.