Batch file 如何使用ffmpeg降低多个JPEG图像文件的质量?

Batch file 如何使用ffmpeg降低多个JPEG图像文件的质量?,batch-file,ffmpeg,Batch File,Ffmpeg,我想降低一堆图像的质量。使用-q:vx,其中x是介于1和30之间的数字(数字越大,质量越差)。即使使用x=1,我也能节省大量空间。现在,当涉及到处理多个文件时,我陷入了困境 我尝试了以下两个批处理文件: mkdir processed for f in *.jpg; do name=`echo $i | cut -d'.' -f1`; echo $name; ffmpeg -i $i -q:v 1 processed/$name.jpg; done 及 这两个都只是创建

我想降低一堆图像的质量。使用
-q:vx
,其中x是介于1和30之间的数字(数字越大,质量越差)。即使使用
x=1
,我也能节省大量空间。现在,当涉及到处理多个文件时,我陷入了困境

我尝试了以下两个批处理文件:

mkdir processed
for f in *.jpg;
    do name=`echo $i | cut -d'.' -f1`;
    echo $name;
    ffmpeg -i $i -q:v 1 processed/$name.jpg;
done


这两个都只是创建已处理的文件夹,没有其他内容。

感谢@Squashman指出了我的愚蠢错误。这是我针对Windows批处理脚本问题的解决方案

mkdir processed
for %%F in (*.jpg) do (
  
    ffmpeg -i "%%F" -q:v 10 "processed\%%F"
)

我的体重减轻了80%。

感谢@Squashman指出了我愚蠢的错误。这是我针对Windows批处理脚本问题的解决方案

mkdir processed
for %%F in (*.jpg) do (
  
    ffmpeg -i "%%F" -q:v 10 "processed\%%F"
)

我的体重减轻了80%。

这里有一个解决方案,在python脚本中使用ffmpeg。更详细,但因此更容易阅读

从pathlib导入路径
导入操作系统
后缀=“.jpg”
input_path=path.home()/“下载”
文件路径=[subp for subp in input_path.rglob('*'),如果后缀==subp.suffix]
文件路径。排序()
输出路径=path.home()/“下载/处理”
输出路径.mkdir(父项=True,存在路径=True)
对于文件路径中的文件路径:
输入=str(文件)
output=str(输出路径/文件名)
command=f“ffmpeg-i{input}-q:v10{output}”
操作系统(命令)

这里有一个解决方案,在python脚本中使用ffmpeg。更详细,但因此更容易阅读

从pathlib导入路径
导入操作系统
后缀=“.jpg”
input_path=path.home()/“下载”
文件路径=[subp for subp in input_path.rglob('*'),如果后缀==subp.suffix]
文件路径。排序()
输出路径=path.home()/“下载/处理”
输出路径.mkdir(父项=True,存在路径=True)
对于文件路径中的文件路径:
输入=str(文件)
output=str(输出路径/文件名)
command=f“ffmpeg-i{input}-q:v10{output}”
操作系统(命令)

对于linux,您可以创建此脚本 如果您的所有图像都在此目录下
images

制作一个包含以下代码的script.sh

mkdir images/processed
for f in images/*.jpg images/*.png images/*.jpeg
 do
        ffmpeg -i $f -q:v 10 processed/$f -y
done

对于linux,您可以创建此脚本 如果您的所有图像都在此目录下
images

制作一个包含以下代码的script.sh

mkdir images/processed
for f in images/*.jpg images/*.png images/*.jpeg
 do
        ffmpeg -i $f -q:v 10 processed/$f -y
done

看起来您是在BASH中执行此操作,而不是批处理。批处理文件标签是针对Windows批处理文件的。分号应该出现在
for
语句中吗?哦,该死,我错了。我确实是在Windows批处理文件中完成的。但是代码是完全错误的。您可以使用
jpegtran
无损优化图像,可能会大大节省文件大小,而无需重新编码。当然,结果将取决于文件本身。看起来您是在BASH中完成的,而不是批处理。批处理文件标签是针对Windows批处理文件的。分号应该出现在
for
语句中吗?哦,该死,我错了。我确实是在Windows批处理文件中完成的。但是代码是完全错误的。您可以使用
jpegtran
无损优化图像,可能会大大节省文件大小,而无需重新编码。结果当然取决于文件本身;doffmpeg-i$f-q:v10已处理/$f;完成这里有一个更完整的一行:
如果[!-d处理];然后进行mkdir-p处理;否则echo文件夹存在;金融机构&&f in./*.jpg;doffmpeg-i$f-q:v10已处理/$f;完成
这里有一个适用于mac的单行程序:
适用于f in./*.jpg;doffmpeg-i$f-q:v10已处理/$f;完成
这里有一个更完整的一行:
如果[!-d处理];然后进行mkdir-p处理;否则echo文件夹存在;金融机构&&f in./*.jpg;doffmpeg-i$f-q:v10已处理/$f;完成