收起左侧

8mb.local视频压缩器

0
回复
149
查看
[ 复制链接 ]

0

主题

46

回帖

0

牛值

江湖小虾

项目地址:https://github.com/JMS1717/8mb.local?tab=readme-ov-file

8mb.local – 自托管 GPU 视频压缩器

[](https://github.com/JMS1717/8mb.local#8mblocal--selfhosted-gpu-video-compressor)

8mb.local 是一款自托管、即用即弃的视频压缩工具。只需拖放文件,选择目标大小(例如:8MB、25MB、50MB、100MB),即可借助 GPU 加速编码,以 AV1/HEVC/H.264 格式生成紧凑的输出文件。支持NVIDIA NVENC, Intel/AMD VAAPI(Linux),以及CPU回退。该堆栈包含SvelteKit用户界面、FastAPI后端、Celery工作器、Redis代理,以及通过服务器发送事件(SSE)实现的实时进度。

演示:https://video.elhacker.net/

截图

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#screenshots)

主界面
Main Interface
GPU 支持列表
GPU Support List
设置面板
Settings Panel
实时队列
Live Queue
压缩(实时日志)
Compressing with real-time logs
编码器验证测试
Encoder Validation Tests
作业历史
** History
高级选项
Advanced Options

功能

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#features)

  • 多厂商GPU支持:自动检测NVIDIA NVENC、Intel/AMD VAAPI(Linux),或回退至CPU
  • 强大的编码器验证:测试实际的编码器初始化,而不仅仅是检查其可用性列表
  • 自动CPU回退:可从容应对驱动缺失、权限问题或硬件访问故障
  • 拖放式界面,配备实用预设和高级选项(编解码器、容器、调音、音频比特率)
  • 可配置的编解码器可见性:在设置页面启用/禁用特定编解码器
  • 分辨率控制:在保持宽高比的同时设置最大宽度/高度
  • 视频剪辑:指定开始/结束时间(秒或HH:MM:SS格式)
  • 上传时进行ffprobe分析,以获取即时估算和警告
  • 实时进度跟踪:使用实际输出大小、处理时间、比特率和墙钟估算值进行多信号进度跟踪,实现流畅、准确的更新
  • 实时FFmpeg日志:压缩过程中的流式日志,提供即时反馈
  • 实时队列管理:查看所有正在运行的任务及实时进度,取消单个任务,或清空整个队列
  • 一键取消:停止正在进行的编码;工作人员立即中断FFmpeg
  • 清空队列:一键移除所有任务(取消正在运行的任务,移除已排队或已完成的任务)
  • 自动文件大小优化:如果输出超出目标超过2%,则自动以调整后的比特率重新编码
  • 智能重试通知:自动重试时提供音频警报和视觉通知
  • 默认启用历史记录跟踪:最近的作业存储在/app/history.json
  • 默认启用自动下载
  • 硬件编码器:AV1、HEVC(H.265)、H.264(可用时支持GPU加速)
  • 软件回退:适用于纯CPU系统的libx264、libx265、libaom-av1
  • 输出容器选择:MP4或MKV,并提供兼容性保障
  • 版本跟踪:UI显示当前版本(v125+),后端提供/api/version端点

架构(技术深度解析)

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#architecture-technical-deep-dive)

注(2025年11月):支持RTX 50系列(Blackwell)

RTX 50 系列用户(RTX 5090/5080/5070 Ti 等):
已验证,支持完整NVENC硬件加速!

Docker镜像: jms1717/8mblocal:rtx50-working
分支: rtx50-blackwell
完整设置指南: RTX50-WORKING.md

RTX 50系列关键提示:您必须挂载WSL驱动程序目录:
-v /usr/lib/wsl/drivers:/usr/lib/wsl/drivers:ro
(已在rtx50-blackwell分支的docker-compose.yml中配置)

要求:

  • RTX 50系列GPU(Blackwell/SM_100)
  • NVIDIA 驱动程序 550.x+(经测试为 581.80)
  • Windows 11 WSL2 或支持 CUDA 13 的 Linux

已验证的测试结果:✅ 所有6个编码器均通过(h264_nvenc、hevc_nvenc、av1_nvenc、libx264、libx265、libaom-av1)

其他NVIDIA GPU:

  • 主分支:CUDA 12.2 + FFmpeg 6.1.1,驱动程序 535.x+(Turing/Ampere/Ada)
  • 如果NVENC不兼容,CPU/VAAPI仍可正常工作

Intel Arc / Integrated Graphics (Linux)

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#intel-arc--integrated-graphics-linux)

通过VAAPI和QSV(libmfx),支持Intel Arc(例如A140、A380)以及近期的Intel集成显卡,适用于Linux主机。

  • 主机要求:
    • 配备Intel GPU且内核使用DRM i915/i915k的Linux系统
    • 主机上已安装Intel媒体驱动程序(通常预装)
    • 具备访问权限的Docker
  • 容器配置(已包含):
    • 使用--enable-vaapi和--enable-libmfx(QSV)编译的FFmpeg
    • 运行时软件包:intel-media-driver, libmfx1, libva-utils
    • 环境:LIBVA_DRIVER_NAME=iHD
  • 如何在Linux上运行(**机):
    • 取消注释以下设备映射:
      • devices: ["/dev/dri:/dev/dri"]

限制:

  • 目前,WSL2(Windows)不会向Linux容器公开英特尔VAAPI/QSV设备。在Windows上,支持NVIDIA(CUDA/NVENC);英特尔VAAPI/QSV则在Linux主机上受支持。

组件

  • 前端(SvelteKit + Vite):拖放式界面、尺寸估算、SSE 进度/日志、最终下载。
  • 后端 API(FastAPI):接受上传、运行 ffprobe、中继 SSE,并提供下载服务。
  • Worker(Celery + FFmpeg 6.1.1):使用自动检测的硬件加速(NVENC/VAAPI/CPU)执行压缩;解析并发布更新。
  • Redis(代理+发布/订阅):Celery代理及用于进度/日志事件的传输。

数据与文件

  • uploads/– 传入文件
  • outputs/– 压缩结果
  • 后端会定期删除旧文件后FILE_RETENTION_HOURS.

配置

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#configuration)

Environment Variables

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#environment-variables)

  • WORKER_CONCURRENCY- 最大并发压缩任务数(默认:4,范围:1-20)
  • BACKEND_HOST- 后端绑定地址(默认:0.0.0.0)
  • BACKEND_PORT- 后端端口(默认:8001)
  • PUBLIC_BACKEND_URL- 前端 API 端点;不设置则使用同源(推荐)

Codec Visibility Settings

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#codec-visibility-settings)

通过环境变量或设置页面控制哪些编解码器显示在UI中:

  • CODEC_H264_NVENC, CODEC_HEVC_NVENC, CODEC_AV1_NVENC- NVIDIA编码器
  • CODEC_H264_QSV, CODEC_HEVC_QSV, CODEC_AV1_QSV - Intel Quick Sync
  • CODEC_H264_VAAPI, CODEC_HEVC_VAAPI, CODEC_AV1_VAAPI- AMD/Intel VAAPI(Linux)
  • CODEC_LIBX264, CODEC_LIBX265, CODEC_LIBAOM_AV1- CPU编码器

默认全部为true。系统会在运行时验证编码器的可用性,如果硬件不可用,则会自动回退到CPU。

Settings UI

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#settings-ui)

您可以通过以下网址的网页界面管理设置:/settings:

  • 身份验证:启用/禁用身份验证,添加/更改用户,更改密码
  • 默认预设:设置默认目标尺寸、编解码器、质量、容器等
  • 编解码器可见性:启用/禁用特定编解码器(NVIDIA/Intel/AMD/CPU)
  • GPU支持参考:查看GPU硬件编码兼容性,请访问/gpu-support
  • 无需重启容器——更改立即生效

示例.env文件:

AUTH_ENABLED=false
AUTH_USER=admin
AUTH_PASS=changeme
FILE_RETENTION_HOURS=1
WORKER_CONCURRENCY=4
REDIS_URL=redis://127.0.0.1:6379/0
BACKEND_HOST=0.0.0.0
BACKEND_PORT=8001

使用该应用

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#using-the-app)

  1. 拖放视频或选择文件。
  2. 选择目标大小或输入自定义MB值,点击分析(拖放时自动分析)。

性能与并发

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#performance--concurrency)

Multiple Simultaneous **s

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#multiple-simultaneous-**s)

8mb.local 支持并行运行多个压缩任务。可通过以下方式配置最大并发任务数:

  • 设置界面:导航至设置 → 工作线程并发
  • 环境变量:在您的WORKER_CONCURRENCY文件中设置.env(默认:4)
  • Docker Compose:添加到环境部分

重要提示:更改并发设置后需重启容器。

Hardware-Specific Recommendations

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#hardware-specific-recommendations)

GPU型号 推荐并发数 备注
Quadro RTX 4000 / RTX 3060+ 6-10个任务 出色的NVENC吞吐量,可良好应对高并发
RTX 3090 / 4090 8-12个任务 顶级NVENC性能,最适合批量处理
GTX 1660 / RTX 2060 3-5个任务 中端NVENC性能良好
GTX 1050 Ti / 入门级 2-3个任务 基本NVENC,并行能力有限
仅CPU(libx264/libx265) 每4核1-2个任务 速度极慢,CPU占用率高
Intel/AMD VAAPI 4-8个任务 取决于集成显卡/独立显卡的能力

Performance Considerations

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#performance-considerations)

  • NVENC会话:大多数NVIDIA GPU支持2-3个原生NVENC会话,但驱动程序补丁/专业版GPU允许无限制
  • 内存使用:每个作业使用约200-500MB RAM;请监控系统总内存
  • GPU内存:每个NVENC编码使用约100-200MB VRAM
  • 磁盘I/O:更高的并发度会增加磁盘负载;建议6个以上并发作业使用SSD
  • 热节流:以高并发方式监控GPU温度(超过80°C可能导致性能下降)

Queue Visualization

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#queue-visualization)

队列页面清晰显示哪些作业正在同时运行:

  • 运行中的作业:蓝色脉动闪电(⚡),蓝色边框,“正在运行”指示符
  • 已排队的作业:**“正在队列中等待”状态
  • 实时进度:所有运行作业的实时进度更新

从4个并发作业开始,逐步增加,同时监控GPU利用率和作业完成时间。

使用该应用

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#using-the-app-1)

  1. 拖放视频或选择文件。
  2. 选择目标大小或输入自定义MB值,点击分析(拖放时自动分析)。
  3. 可选:打开高级选项。
    • 视频编解码器:AV1(在较新的RTX上质量最佳)、HEVC(H.265)或H.264(兼容性)。
    • 音频编解码器:Opus(默认)或AAC。选择Opus时,MP4会自动回退至AAC。
    • 速度/质量:NVENC P1(快)… P7(最佳)。默认为P6。
    • 容器:MP4(兼容性最高)或MKV(与Opus配合最佳)。
    • 音质:最佳品质(HQ)、低延迟、超低延迟或无损。
  4. 点击“压缩”并查看进度/日志。使用“取消”可在编码中途停止。完成后将自动开始下载。

编解码器/容器说明

  • MP4 + Opus 并未得到广泛支持。如果选择 MP4+Opus,工作人员会自动改用 AAC 以确保兼容性。MKV 则直接支持 Opus。
  • MP4 输出包含+faststart以实现更佳的网页播放效果。
  • H.264/HEVC 输出设置为兼容的像素格式(yuv420p)和配置文件。

性能提示

  • 对于极小的目标,优先选择AV1/HEVC,并将音频比特率保持在96–128 kbps左右。
  • 如果对速度有要求,请尝试低/超低延迟音色,并选用更快的预设(P1–P4)。如需最佳音质,请使用HQ搭配P6/P7。

GPU支持提示

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#gpu-support-tips)

Hardware Acceleration Support

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#hardware-acceleration-support)

8mb.local会自动检测并使用可用的硬件加速:

  • NVIDIA GPU(NVENC):对AV1、HEVC、H.264提供最佳支持
    • AV1需配备RTX 40/50系列显卡,HEVC/H.264需配备GTX 10+系列显卡
    • Windows:Docker Desktop + 启用 GPU 的 WSL2;在 WSL2 中安装 NVIDIA 驱动程序和容器工具包
    • Linux:安装NVIDIA驱动程序和NVIDIA容器工具包
    • 在docker run命令中使用--gpus all标志
    • 检查:docker exec 8mblocal bash -c "ffmpeg -hide_banner -encoders | grep -i nvenc"
  • 英特尔GPU(快速同步视频 - QSV):对H.264、HEVC、AV1有良好支持(Arc GPU)
    • 需要支持QSV的英特尔GPU(大多数第6代及以上酷睿CPU和Arc GPU)
    • Linux:确保/dev/dri在容器中可访问
    • 在docker run命令中使用--device=/dev/dri:/dev/dri标志
    • 检查:docker exec 8mblocal bash -c "ffmpeg -hide_banner -encoders | grep -i qsv"
  • AMD GPU(仅限Linux的VAAPI):支持H.264、HEVC、AV1
    • Linux:VAAPI(需要Mesa驱动程序和/dev/dri访问权限)
    • 在docker run命令中使用--device=/dev/dri:/dev/dri标志
    • 建议使用AMD RDNA 2+以获得最佳兼容性
    • 检查:docker exec 8mblocal bash -c "ffmpeg -hide_banner -encoders | grep vaapi"
  • CPU回退:适用于任何无GPU的系统
    • 使用libx264(H.264)、libx265(HEVC)、libaom-av1(AV1)
    • 速度较慢但兼容性更广泛
    • 若硬件编码器不可用,则自动启用

系统会在运行时验证编码器的可用性,如果硬件不可用,则会自动回退到CPU。您将看到如下日志消息:

  • “使用编码器:h264_vaapi(请求:h264_vaapi)” - 硬件正常工作
  • “警告:h264_vaapi不可用,正在回退至CPU(libx264)” - CPU回退
  • “警告:hevc_nvenc初始化测试失败(驱动程序/库问题),正在回退至CPU” - 硬件已列出但无法初始化

安装

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#installation)

Quick Start with Docker

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#quick-start-with-docker)

运行8mb.local最简单的方式是使用预先构建的Docker镜像。请选择适合您系统的命令:

仅CPU(无GPU)

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#cpu-only-no-gpu)

docker run -d --name 8mblocal -p 8001:8001 -v ./uploads:/app/uploads -v ./outputs:/app/outputs jms1717/8mblocal:latest

NVIDIA GPU(NVENC)

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#nvidia-gpu-nvenc)

docker run -d --name 8mblocal --gpus all -e NVIDIA_DRIVER_CAPABILITIES=compute,video,utility -p 8001:8001 -v ./uploads:/app/uploads -v ./outputs:/app/outputs jms1717/8mblocal:latest

注意:需要设置环境变量以启用NVENC支持。该环境变量会告知NVIDIA容器工具包将视频编码库挂载到容器中。

Intel/AMD GPU(VAAPI - Linux)

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#intelamd-gpu-vaapi---linux)

docker run -d --name 8mblocal --device=/dev/dri:/dev/dri -p 8001:8001 -v ./uploads:/app/uploads -v ./outputs:/app/outputs jms1717/8mblocal:latest

NVIDIA + VAAPI(双GPU - Linux)

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#nvidia--vaapi-dual-gpu---linux)

docker run -d --name 8mblocal --gpus all -e NVIDIA_DRIVER_CAPABILITIES=compute,video,utility --device=/dev/dri:/dev/dri -p 8001:8001 -v ./uploads:/app/uploads -v ./outputs:/app/outputs jms1717/8mblocal:latest

访问网页界面地址:http://localhost:8001

Docker Compose

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#docker-compose)

为便于管理,请使用Docker Compose。创建一个docker-compose.yml文件:

仅CPU

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#cpu-only)

services:
  8mblocal:
    image: jms1717/8mblocal:latest
    container_name: 8mblocal
    ports:
      - "8001:8001"
    volumes:
      - ./uploads:/app/uploads
      - ./outputs:/app/outputs
      - ./.env:/app/.env  # Optional: for custom settings
    restart: unless-stopped

NVIDIA GPU

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#nvidia-gpu)

services:
  8mblocal:
    image: jms1717/8mblocal:latest
    container_name: 8mblocal
    ports:
      - "8001:8001"
    volumes:
      - ./uploads:/app/uploads
      - ./outputs:/app/outputs
      - ./.env:/app/.env  # Optional: for custom settings
    restart: unless-stopped
    environment:
      - NVIDIA_DRIVER_CAPABILITIES=compute,video,utility  # Required for NVENC
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

英特尔/AMD VAAPI(Linux)

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#intelamd-vaapi-linux)

services:
  8mblocal:
    image: jms1717/8mblocal:latest
    container_name: 8mblocal
    ports:
      - "8001:8001"
    volumes:
      - ./uploads:/app/uploads
      - ./outputs:/app/outputs
      - ./.env:/app/.env  # Optional: for custom settings
    devices:
      - /dev/dri:/dev/dri
    restart: unless-stopped

NVIDIA + VAAPI(双GPU)

[](https://github.com/JMS1717/8mb.local?tab=readme-ov-file#nvidia--vaapi-dual-gpu)

services:
  8mblocal:
    image: jms1717/8mblocal:latest
    container_name: 8mblocal
    ports:
      - "8001:8001"
    volumes:
      - ./uploads:/app/uploads
      - ./outputs:/app/outputs
      - ./.env:/app/.env  # Optional: for custom settings
    devices:
      - /dev/dri:/dev/dri
    restart: unless-stopped
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则