本节我们来说说nextcloud配合memories插件使用时的一些推荐优化,推荐同时安装Preview Generator以获得更好的体验。
如果你的服务器带宽够大,可以跳过本篇的第一节(部署外部转码器),直接看安装ffmpeg,为视频生成缩略图。因为你的带宽本身就足够直接播放,每次播放时转码处理视频反而会拖慢播放速度。但是如果你的服务器带宽很小,你又想让他较为流畅地播放视频,那你可能需要部署外部转码器。
目标:
- 部署 go-vod 外部转码器,解决弱网环境下视频播放卡顿问题,支持 HLS 流式传输。
- 在 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 -d1.3 Memories 后台配置
进入 Nextcloud 网页端 -> 管理设置 -> Memories,先启用视频串流,然后填写go-vod的配置:
- Binary路径:他会自动识别。
- 绑定地址:
go-vod:47788(用 Docker 内部 DNS,不能填 127.0.0.1。) - 连接地址:
go-vod:47788 - 品质系数自己看着弄
- 填好以后启用开关:启用视频串流和外部转码器
- 等待出现绿色对勾以及“go-vod binary文件存在且可使用(0.2.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 -d2.4 Memories 最终路径配置
回到 Nextcloud 网页端 -> 管理设置 -> Memories。
在 FFmpeg binary path 和 FFprobe binary path 栏目中,填入系统默认路径(因为我们是通过 apt 安装的):
- FFmpeg binary path:
/usr/bin/ffmpeg - FFprobe binary path:
/usr/bin/ffprobe
2.5 验证命令
确保一切正常工作:
- 检查 go-vod 连接:查看容器日志,确认连接成功。Bash
docker logs go-vod应显示Fetched ... successfully! - 检查 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/"

Comments NOTHING