You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash逐行读取文件批量生成Immich视频缩略图?

Immich视频缩略图批量重生成Bash脚本解决方案

问题背景

用Immich管理照片视频媒体库时,视频缩略图常显示黑色或不合适的画面,家人无法正常查看。手动用ffmpeg单条命令可修复缩略图,但逐个处理效率极低。需要基于files.txt配置文件批量执行缩略图重生成,原尝试的脚本无法正确读取每行的数组参数。

原可行单条脚本

#!/bin/bash
file=(formula1 "aust_gp_00'23'41_2022_1858658849.mp4" f2dfse3-34gd-23ff-6hdd-p3h4kk/a3/10/a399-dj88-ah29 00:00:30.000)

# 创建jpeg和webp缩略图并覆盖现有文件
sudo ffmpeg -i /mnt/f1/"${file[0]}"/"${file[1]}" -ss "${file[3]}" -frames:v 1 /immich/app/thumbs/"${file[2]}"-preview.jpeg -y \
&& \
sudo ffmpeg -i /mnt/f1/"${file[0]}"/"${file[1]}" -ss "${file[3]}" -frames:v 1 /immich/app/thumbs/"${file[2]}"-thumbnail.webp -y

配置文件files.txt示例

file=(formula1 "aust_gp_00'23'41_2022.mp4" f2dfse3-34gd-23ff-6hdd-p3h4kk/a3/10/a399-dj88-ah29 00:00:30.000)
file=(formula1 "belg_gp_00'13'31_2022.mp4" f2dfse3-34gd-23ff-6hdd-p3h4kk/q4/6/mhf-846d-zpyf 00:00:30.000)
file=(formula1 "melb_gp_00'05'11_2022.mp4" f2dfse3-34gd-23ff-6hdd-p3h4kk/b9/2/q3dd-0988-vr2t 00:00:30.000)

原错误脚本问题

原genthumb.sh直接读取整行到lines数组,未解析每行的file数组结构;引用变量时错误使用lines[0]/lines[1](取的是第一行内容,而非当前行的数组元素),还混用了未定义的file变量,导致无法批量执行。

正确的Bash实现脚本genthumb.sh

#!/bin/bash

# 读取配置文件每一行,跳过空行和注释行
while IFS= read -r line; do
    # 跳过空行和以#开头的注释行
    [[ -z "$line" || "$line" =~ ^# ]] && continue
    
    # 解析当前行的file数组,处理带特殊字符的参数
    eval "$line"
    
    # 执行ffmpeg命令生成两种格式缩略图
    sudo ffmpeg -i "/mnt/f1/${file[0]}/${file[1]}" -ss "${file[3]}" -frames:v 1 "/immich/app/thumbs/${file[2]}-preview.jpeg" -y && \
    sudo ffmpeg -i "/mnt/f1/${file[0]}/${file[1]}" -ss "${file[3]}" -frames:v 1 "/immich/app/thumbs/${file[2]}-thumbnail.webp" -y
    
    # 清理当前file变量,避免残留影响下一行
    unset file
done < files.txt

关键说明

  • 行过滤:循环读取时跳过空行和注释行,避免无效处理。
  • 数组解析:用eval将每行的file=(...)语句转换为实际Bash数组,正确处理带引号、含特殊字符的文件名。
  • 路径安全:所有路径用双引号包裹,避免空格或特殊字符导致路径解析错误。
  • 变量清理:每次循环后unset file,防止下一行解析时残留上一行的变量值。

内容的提问来源于stack exchange,提问作者xiaohouzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 02:42:40