我有一组相当大的文档(150 GiB ~5000 个文件),并且想知道如何预生成缩略图,最好是从命令行生成,这样当我导航到该文件夹时,就不必等待它们被创建。
答案1
感谢评论,我决定使用其中一个脚本这篇推荐的 AskUbuntu 帖子。
我只是将其复制到一个文件中,将其保存到我的 ~/bin(在我的情况下为 generate-thumbnails)并chmod +x
在其上发布。然后我只是导航到 ~/Documents 文件夹并运行。generate-thumbnails *
我不知道花了多长时间,但当我下次醒来时,一切都很好。
请注意,您可能需要安装gir1.2-gnomedesktop-3.0
:
sudo apt-get install gir1.2-gnomedesktop-3.0
由于它不会浪费时间生成重复项,因此它将是一个影响较小的 cron 作业(第一次运行后)。
从终端提示符crontab -e
如果这是您第一次编辑 crontab,它会要求您选择一个编辑器。我只使用 nano,我会为其提供键盘命令。
将以下内容添加到末尾...
0 4 * * * /home/user/bin/generate-thumbnails /home/user*
- Ctl o 将保存文件。
- Ctl x 将退出。(如果您有语法错误,它会通知您,然后您可以再次执行
crontab -e
。这将设置 cron 每天早上 4 点运行。 - 如果您想更改它或查看其他 cron 选项..https://help.ubuntu.com/community/CronHowto是寻找选择的好地方。
运行此脚本的主要原因:
- 它将递归遍历子目录
- 它知道重复
- 它对视频同样有效
- 它可以在其他 DE 中工作(我根据我正在做的事情经常切换)
- 这对于 cron 任务来说很好
这是脚本......(谢谢詹姆斯·亨斯特里奇!!
#!/usr/bin/env python3
import os
import sys
from gi.repository import Gio, GnomeDesktop
def make_thumbnail(factory, filename):
mtime = os.path.getmtime(filename)
# Use Gio to determine the URI and mime type
f = Gio.file_new_for_path(filename)
uri = f.get_uri()
info = f.query_info(
'standard::content-type', Gio.FileQueryInfoFlags.NONE, None)
mime_type = info.get_content_type()
if factory.lookup(uri, mtime) is not None:
print("FRESH %s" % uri)
return False
if not factory.can_thumbnail(uri, mime_type, mtime):
print("UNSUPPORTED %s" % uri)
return False
thumbnail = factory.generate_thumbnail(uri, mime_type)
if thumbnail is None:
print("ERROR %s" % uri)
return False
print("OK %s" % uri)
factory.save_thumbnail(thumbnail, uri, mtime)
return True
def thumbnail_folder(factory, folder):
for dirpath, dirnames, filenames in os.walk(folder):
for filename in filenames:
make_thumbnail(factory, os.path.join(dirpath, filename))
def main(argv):
factory = GnomeDesktop.DesktopThumbnailFactory()
for filename in argv[1:]:
if os.path.isdir(filename):
thumbnail_folder(factory, filename)
else:
make_thumbnail(factory, filename)
if __name__ == '__main__':
sys.exit(main(sys.argv))
答案2
Bash 脚本(向蒂姆致敬)。来自以下链接的脚本和评论:
for i in *.jpg
do
djpeg $i | pnmscale -xysize 48 38 | cjpeg -opti -progr -qual ‘75%’ > TN_$i
echo $i processed
done
这将为以 .jpg 结尾的文件制作缩略图,并创建名为 TN_*.jpg 的缩略图。根据您的喜好调整参数。
对于缩略图,您通常不想使用 imagemagick 或 convert 或其他什么;对于我的正常尺寸(48×38),它会创建一个巨大的 50K jpg,而还有其他方法可以将它们变得小得多:
这使平均图像大小保持在 1K 左右 - 更适合缩略图页面!
pnmscale 将默认安装
安装 djpeg 和 cjpeg
sudo apt-get install libjpeg-turbo-progs
编辑:不适用于 PDF
忽略评论中有关使用 imagemagick 的建议...
sudo apt-get install imagemagick
并使用与上面类似的方法,但在这种情况下使用来自 IM 的转换命令:
#!/bin/bash
FILES="$@"
for i in $FILES
do
echo "Processing image $i ..."
/usr/bin/convert -thumbnail 100X100 $i $i.png
done
这是一个详尽的文件关于使用 IM 制作缩略图。您可以指定高度、宽度等。示例来自链接:
例如,这将把 JPG 图像转换为 GIF 缩略图,放在刚刚创建的“thumbs”子目录中,宽度为 100 像素,高度为 100 像素
mkdir thumbs mogrify -format gif -path thumbs -thumbnail 100x100 *.jpg
哦,标题是专门针对 PDF 的。使用 IM...
convert -thumbnail 100x100 1.pdf 1.png