Nextcloud + Memories 插件深度优化手册

Naseele 技术工坊 78 次阅读 1860 字 预计阅读时间: 8 分钟 发布于 2025-11-30 最后更新于 2025-12-05


AI 摘要

想让你的Nextcloud相册丝滑播放视频、自动生成封面吗?这篇教程就是你的“性能加速器”! **网络不给力?** 教你用go-vod搭建外部转码器,弱网也能流畅看视频,还能尝试显卡加速。 **视频没缩略图?** 通过Dockerfile给Nextcloud“焊死”FFmpeg,让相册自动抓取视频封面和时长。 **私密文件夹想隐藏?** 丢个`.nomedia`文件就能让特定文件夹从时间线消失。 跟着步骤操作,你的个人云相册体验直接起飞 🚀

本节我们来说说nextcloud配合memories插件使用时的一些推荐优化,推荐同时安装Preview Generator以获得更好的体验。

如果你的服务器带宽够大,可以跳过本篇的第一节(部署外部转码器),直接看安装ffmpeg,为视频生成缩略图。因为你的带宽本身就足够直接播放,每次播放时转码处理视频反而会拖慢播放速度。但是如果你的服务器带宽很小,你又想让他较为流畅地播放视频,那你可能需要部署外部转码器。

目标

  1. 部署 go-vod 外部转码器,解决弱网环境下视频播放卡顿问题,支持 HLS 流式传输。
  2. 在 Nextcloud 主容器内集成 FFmpeg,解决 Memories 无法生成视频缩略图、无法读取视频元数据的问题。

1. 部署外部转码器 (go-vod)

本节我一起来利用 Docker 部署 go-vod 容器,并挂载宿主机的显卡设备以尝试硬件加速。

1.1 修改 Docker Compose

编辑 /home/naseele/nextcloud/docker-compose.yml,新增 go-vod 服务。

services:
  # ... 其他服务保持不变 ...

  # === 新增:Memories 视频转码器 ===
  go-vod:
    image: radialapps/go-vod
    container_name: go-vod
    restart: always
    networks:
      - caddy_net
    environment:
      # 自行填写你的 Nextcloud 公网访问地址
      - NEXTCLOUD_HOST=你的网址
    #devices:
    # 挂载核显/显卡设备 (前提是宿主机 ls -d /dev/dri* 存在)
    # 这个挂载请自行参考memories插件的文档
    #  - /dev/dri:/dev/dri
    volumes:
      # 必须与 Nextcloud 容器挂载路径完全一致,并设为只读
      - ./html:/var/www/html:ro

1.2 应用更改

cd /home/naseele/nextcloud
docker compose up -d

1.3 Memories 后台配置

进入 Nextcloud 网页端 -> 管理设置 -> Memories,先启用视频串流,然后填写go-vod的配置:

  1. Binary路径:他会自动识别。
  2. 绑定地址:go-vod:47788用 Docker 内部 DNS,不能填 127.0.0.1。
  3. 连接地址:go-vod:47788
  4. 品质系数自己看着弄
  5. 填好以后启用开关:启用视频串流和外部转码器
    • 等待出现绿色对勾以及“go-vod binary文件存在且可使用(0.2.6)。”
  6. Hardware Acceleration (硬件加速):
    • 如果你非常确定你的服务器有gpu,请修改docker-compose.yml中的devices项,然后优先尝试选择启用VAAPI并播放视频进行测试,如果报错,则关掉VA-VPI加速 (CPU 转码)
    • 如果没有gpu,不用额外改配置

2. Nc主容器集成 FFmpeg

为了让 Memories 能生成视频封面和读取时长信息,Nextcloud 主容器必须安装 FFmpeg。为了避免每次重启容器丢失软件,我们采用 Dockerfile 构建自定义镜像 的方案。

2.1 创建 Dockerfile

/home/naseele/nextcloud/ 目录下新建 Dockerfile

# 基于官方最新的 Nextcloud 镜像
FROM nextcloud:latest

# 在构建时安装 FFmpeg
# 这一步将 FFmpeg "焊死" 在镜像里,永久生效
RUN apt-get update && \
    apt-get install -y ffmpeg && \
    rm -rf /var/lib/apt/lists/*

2.2 修改 Docker Compose 使用自定义镜像

编辑 /home/naseele/nextcloud/docker-compose.yml,修改 nextcloud-app 部分:

services:
  nextcloud-app:
    # image: nextcloud:latest  <-- 删除或注释掉这行
    build: .                   # <-- 改为由当前目录的 Dockerfile 构建
    container_name: nextcloud_app
    restart: always
    # ... 其他配置保持不变 ...

2.3 构建并启动 (需网络通畅)

由于构建过程需要下载软件包,请确保服务器网络通畅(或开启 VPN),然后执行:

cd /home/naseele/nextcloud

# 1. 构建镜像 (这一步会下载 FFmpeg)
docker compose build

# 2. 启动容器 (构建完成后可关闭 VPN)
docker compose up -d

2.4 Memories 最终路径配置

回到 Nextcloud 网页端 -> 管理设置 -> Memories

FFmpeg binary pathFFprobe binary path 栏目中,填入系统默认路径(因为我们是通过 apt 安装的):

  • FFmpeg binary path: /usr/bin/ffmpeg
  • FFprobe binary path: /usr/bin/ffprobe

2.5 验证命令

确保一切正常工作:

  1. 检查 go-vod 连接:查看容器日志,确认连接成功。Bashdocker logs go-vod 应显示 Fetched ... successfully!
  2. 检查 FFmpeg 安装:确认 Nextcloud 容器内识别到了 FFmpeg。使用:
    docker exec nextcloud_app ffmpeg -version
    应输出类似ffmpeg version 7.1.2-0+deb13u1 Copyright (c) 2000-2025 the FFmpeg developers

3. 屏蔽文件夹

有些文件夹放了私密东西,或者你的卡通小人图片,不想让他们在这个插件展示?我们只需要在文件夹放一个特殊文件即可:

3.1 创建屏蔽识别文件

在网页端进到你想屏蔽的文件夹内,创建一个空白文件,命名为.nomedia或者.nomemories,这俩的区别是:

  • .nomedia:这是安卓系统和 Linux 世界的一个通用标准。如果你放了这个文件,不仅 Memories 插件看不到,你手机上的相册应用、其他的媒体播放器通常也会忽略这个文件夹。
  • .nomemories:插件(Memories)专用的标记。如果你放这个文件,Nextcloud Memories 会忽略它,但其他软件可能还是会扫描它。

请自行选择放置,为了防止你创建错误,或者它加其他后缀,建议创建之后上传,另外众所周知,.开头的文件是默认隐藏的,所以你可能在网页端看不到他。

担心手动放置会出问题的也可以考虑使用

docker exec -u 33 nextcloud_app touch "/var/www/html/data/Naseele/files/images/ignore-临时分享/.nomedia"

3.2 重建索引

虽然你放了 .nomedia 文件,但 Memories 的数据库里还存着之前扫描到的那些插画的记录。运行索引命令会让 Memories 重新“走访”一遍文件系统,当它发现 .nomedia 时,就会自动把该文件夹下的图片从时间线里清理掉

方案 A:最稳妥的方式 直接运行增量索引,它会扫描变更。

docker exec -it -u www-data nextcloud php occ memories:index

方案 B:针对性处理(速度最快) 如果你清楚要屏蔽的文件夹的具体路径(比如在 /Photos/ignore-illustrations),只扫描这个文件夹会非常快:

docker exec -it -u www-data nextcloud php occ memories:index --path="/Photos/ignore-illustrations/"