我想降低当时一堆图像的质量。使用-q:v x
,其中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
和
mkdir processed
for f in *.jpg;
do ffmpeg -i "$f" -q:v 1 processed/"${f%.jpg}.jpg";
done
两者都只创建已处理的文件夹,但没有别的。
答案 0 :(得分:5)
感谢@Squashman指出我的愚蠢错误。这是我解决问题的方法。
mkdir processed
for %%F in (*.jpg) do (
ffmpeg -i %%F -q:v 10 processed/%%F"
)
我减轻了80%的重量。
答案 1 :(得分:0)
这是一个解决方案,在python脚本中使用ffmpeg。更详细,但更易于阅读。
from pathlib import Path
import os
suffix = ".jpg"
input_path= Path.home() / "Downloads"
file_paths= [subp for subp in input_path.rglob('*') if suffix == subp.suffix]
file_paths.sort()
output_path = Path.home() / "Downloads/processed"
output_path.mkdir(parents=True, exist_ok=True)
for file_p in file_paths:
input = str(file_p)
output = str( output_path / file_p.name )
command = f"ffmpeg -i {input} -q:v 10 {output}"
os.system(command)
答案 2 :(得分:0)
对于 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