基于Automator+ImageMagick+Tesseract的报纸微缩胶片批量处理优化求助
解决报纸微缩胶片工作流的四个核心问题
我来帮你一步步搞定这几个实际操作里的痛点,都是能直接落地的方案:
1. 搞定ImageMagick -adjoin和序列命名的冲突问题
你遇到的%02d这类序列转义符没法和-adjoin配合的问题,其实可以跳出ImageMagick本身的限制,用Shell循环分组来实现有序命名,完全不用依赖-set filename:original这种折中方案。
比如你想按每期4页分组,输出ediciones_01.tif、ediciones_02.tif这类有序文件,脚本可以这么写:
# 先定义每期的页数,后面可以改成用户输入 PAGE_PER_ISSUE=4 files=("$@") # 按每组PAGE_PER_ISSUE个文件循环处理 for ((i=0; i<${#files[@]}; i+=PAGE_PER_ISSUE)); do # 提取当前组的文件列表 current_group=("${files[@]:i:PAGE_PER_ISSUE}") # 生成带两位序号的输出文件名 issue_num=$(printf "%02d" $((i / PAGE_PER_ISSUE + 1))) output_file="ediciones_${issue_num}.tif" # 执行convert命令,彻底避开转义符冲突 /usr/local/opt/imagemagick@6/bin/convert -format tiff -quality 75 -compress jpeg "${current_group[@]}" -adjoin "$output_file" done
2. 让脚本自动切换到输入文件的父目录
要切换到输入文件的父目录,只需要取第一个输入文件的路径,提取它的目录部分,然后cd进去即可。在脚本开头加上这两行:
# 获取第一个输入文件的父目录 parent_dir=$(dirname "$1") # 切换到该目录,失败则终止脚本避免出错 cd "$parent_dir" || exit 1
这样后续生成的合并文件会直接保存在输入文件的原目录里,不用硬编码固定路径,适用性更强。
3. 按指定期数n批量选取文件(替代低效手动选择)
手动挑每组4个文件太费时间,咱们用Automator组合动作实现「用户输入每期页数→自动分组处理」:
- 在Automator里添加**「显示输入对话框」**动作,设置提示文本为「请输入每期的页数(比如4)」,默认值填4,把输入内容存为变量(比如命名为
PageCount)。 - 接着添加**「运行Shell脚本」**动作,设置「传递输入」为「作为参数」,脚本修改为:
# 接收用户输入的每期页数 PAGE_PER_ISSUE="$1" # 移除第一个参数,剩下的是选中的所有文件 shift files=("$@") for ((i=0; i<${#files[@]}; i+=PAGE_PER_ISSUE)); do current_group=("${files[@]:i:PAGE_PER_ISSUE}") issue_num=$(printf "%02d" $((i / PAGE_PER_ISSUE + 1))) output_file="ediciones_${issue_num}.tif" /usr/local/opt/imagemagick@6/bin/convert -format tiff -quality 75 -compress jpeg "${current_group[@]}" -adjoin "$output_file" done
- 把「显示输入对话框」的输出连接到「运行Shell脚本」的输入,这样用户输入的页数就会作为脚本的第一个参数传入。
之后你只需要选中整个文件夹里的所有TIFF文件,运行这个Automator服务,输入每期页数,就能自动完成分组合并,完全不用手动挑文件。
4. 集成Tesseract生成可搜索PDF和纯文本TXT
在Automator里新增一个工作流(或者接在合并步骤后面),按以下步骤配置:
- 添加**「查找访达项目」**动作,设置搜索范围为你存放合并后多页TIFF的文件夹(比如
~/Pictures/Microfilms/),搜索条件为「文件扩展名是tif」。 - 添加**「运行Shell脚本」**动作,「传递输入」选「作为参数」,脚本写:
for tiff_file in "$@"; do # 生成可搜索PDF,输出文件名与TIFF同名,后缀替换为pdf # 如果你的报纸是西班牙语,记得加`-l spa`参数提升识别准确率 tesseract "$tiff_file" "${tiff_file%.tif}" pdf # 生成纯文本TXT,输出文件名与TIFF同名,后缀替换为txt tesseract "$tiff_file" "${tiff_file%.tif}" txt done
这样就能批量处理所有合并后的多页TIFF,自动生成对应的可搜索PDF和纯文本文件。
内容的提问来源于stack exchange,提问作者Juan Jullian
相关产品推荐
相关产品推荐

