fardhoz25/secure-codec-studio
GitHub: fardhoz25/secure-codec-studio
基于 Next.js 和 FastAPI 的全栈多媒体处理 Web 应用,支持图像、音频、视频的无损/有损压缩与 LSB 隐写术,提供压缩分析与秘密消息嵌入提取功能。
Stars: 0 | Forks: 0
# Secure Multimedia Codec Studio







一个用于演示数字媒体上**无损多媒体压缩**和**隐写术**算法的全栈 Web 应用。本项目采用单页应用(SPA)架构开发,前端使用 **Next.js**,后端使用 **FastAPI**。
### 🌐 在线演示
- 前端:
https://secure-codec-studio.vercel.app/
- 后端 API:
https://secure-codec-studio-production.up.railway.app
## 概述
Secure Multimedia Codec Studio 是一个全栈 Web 应用,它演示了图像、音频和视频的多媒体压缩及最低有效位(LSB)隐写术。
该应用同时支持**无损压缩**和**有损压缩**,允许用户通过交互式的 Web 界面了解可逆与不可逆压缩方法之间的根本区别,并在适用时提供压缩率、处理时间、PSNR 和 MSE 等性能指标。
## 亮点
- 🌐 实时生产环境部署
- 🖼️ 图像、音频和视频压缩
- 🔒 最低有效位(LSB)隐写术
- 📊 压缩分析(压缩率、PSNR、MSE)
- ⚡ 基于 Next.js + FastAPI 构建
- ☁️ 部署于 Vercel 和 Railway
## 📸 应用截图
| 1️⃣ 主用户界面 | 2️⃣ 集成媒体播放器 |
| :---: | :---: |
|
|
|
| **简洁且响应式的 UI**:主仪表板具有深色主题的拖放区和模式选择功能。 | **媒体预览**:内置播放器,可即时渲染并播放处理后的视频、音频和图像。 |
| 3️⃣ 无损压缩分析 | 4️⃣ 有损压缩分析 |
| :---: | :---: |
|
|
|
| **数据保留**:结果显示使用 Zlib 算法实现了原始数据的精确保留。 | **体积优化**:结果显示了大幅的文件体积缩减以及 PSNR/MSE 质量指标。 |
| 5️⃣ 隐写术(隐藏消息) | 6️⃣ 隐写术(提取消息) |
| :---: | :---: |
|
|
|
| **安全嵌入**:通过 LSB 将秘密文本消息隐藏在媒体文件中。 | **数据提取**:成功从隐写文件中提取并读取隐藏的秘密文本。 |
# 技术栈
## 前端
- Next.js
- React
- TypeScript
- Tailwind CSS
- Lucide Icons
## 后端
- FastAPI
- Python
- OpenCV
- FFmpeg (FFV1, H.264)
- Zlib
# 功能
Secure Multimedia Codec Studio 通过统一的工作流支持跨图像、音频和视频的多媒体压缩及隐写术。
## 压缩模式
| 模式 | 描述 | 解压 |
|------|-------------|---------------|
| **无损压缩** | 使用 Zlib 算法保留原始数据的可逆压缩。 | ✅ 支持 |
| **有损压缩** | 通过牺牲部分原始信息来减小文件大小的不可逆压缩。 | ❌ 不支持 |
| **隐写术** | 使用最低有效位(LSB)技术隐藏和提取秘密文本消息。 | N/A |
## 压缩对比
| 特性 | 无损 | 有损 |
|----------|:--------:|:------:|
| 保留原始数据 | ✅ | ❌ |
| 可解压 | ✅ | ❌ |
| 压缩率 | 中等 | 高 |
| 图像质量 | 不变 | 降低 |
| 最佳使用场景 | 归档与编辑 | 分发与存储 |
## 支持的媒体
| 媒体 | 压缩算法 | 隐写术 | 支持的格式 | 最大文件大小 |
|--------|------------------------|---------------|-------------------|---------------|
| **图像** | Zlib(无损),OpenCV JPEG(有损) | LSB | PNG, JPG, JPEG, BMP, WebP | 5 MB |
| **音频** | Zlib(无损),FFmpeg libmp3lame(有损) | LSB | WAV, MP3, OGG, M4A, AAC, FLAC | 10 MB |
| **视频** | Zlib(无损),FFmpeg H.264/libx264(有损) | LSB (FFV1) | MP4, AVI, MOV, MKV | 20 MB |
## 处理能力
- 完全保留数据的**无损压缩**。
- 用于高效多媒体存储的**有损压缩**。
- 用于还原压缩媒体的**无损解压**。
- 用于嵌入秘密消息的 **LSB 隐写术**。
- 从受支持的隐写媒体中**提取隐藏消息**。
- **压缩分析**,包括压缩率、处理时间、PSNR 和 MSE(适用时)。
- 用于处理后的图像、音频和视频的**集成媒体预览**。
## 存储
所有处理过的文件临时存储在以下位置:
```
backend/tmp/
```
临时文件仅在处理过程中使用。
# 项目架构
```
Secure-Codec-Studio
│
├── app/
│
├── components/
│ ├── ActionPanel.tsx
│ ├── Header.tsx
│ ├── Footer.tsx
│ ├── UploadDropzone.tsx
│ ├── ModeSelector.tsx
│ ├── ResultCards.tsx
│ └── MediaPreview.tsx
│
├── hooks/
│
├── lib/
│ ├── api.ts
│ └── utils.ts
│
├── backend/
│ ├── app/
│ │
│ ├── algorithms/
│ │ ├── image/
│ │ ├── audio/
│ │ └── video/
│ │
│ ├── services/
│ │
│ ├── routes.py
│ ├── schemas.py
│ ├── utils.py
│ │
│ └── tmp/
│
└── README.md
```
# 后端架构
后端采用简单的分层架构。
```
Client
│
▼
routes.py
│
▼
validator.py
│
▼
service
│
▼
algorithm
│
▼
response
```
业务逻辑放置在 **services** 中,而算法隔离在 **algorithms** 目录内。
## 压缩工作流
```
Upload Image
│
▼
Select Compression Method
│
┌───────────┴───────────┐
│ │
▼ ▼
Lossless Compression Lossy Compression
│ │
▼ ▼
Zlib Algorithm Quality Reduction
│ │
▼ ▼
Codec File (.lossless) Optimized Image
│
▼
Decompression
│
▼
Original Image Restored
```
# 音频处理流程
```
Upload Audio
│
▼
Select Compression Method
│
┌───────────┴───────────┐
│ │
▼ ▼
Lossless Compression Lossy Compression
│ │
▼ ▼
Zlib Algorithm FFmpeg libmp3lame
│ │
▼ ▼
Codec File (.lossless) Optimized Audio
│
▼
Decompression
│
▼
Original Audio Restored
```
# API 端点
## 处理文件
```
POST /process
```
### 请求
Multipart Form Data
| 字段 | 类型 | 描述 |
|--------|------|-------------|
| file | File | 上传的媒体 |
| mode | String | compress / decompress / stego / extract |
| message | String | 秘密消息(可选) |
### 响应
```
{
"status": "success",
"media_type": "image",
"original_size": 102400,
"processed_size": 50231,
"compression_ratio": 50.95,
"processing_time_ms": 135,
"message": "Image compressed successfully"
}
```
# 环境变量
在项目根目录中创建一个 `.env.local` 文件,并配置以下环境变量:
### 前端
```
NEXT_PUBLIC_API_URL=https://your-backend.up.railway.app
```
# 快速开始
在运行此项目之前,请确保您的系统已安装以下内容:
- **Node.js**(v18 或更高版本)
- **Python**(v3.10 或更高版本)
- **FFmpeg**:必须安装并添加到系统的 `PATH` 中。这对于音频和视频处理能够正常工作**至关重要**。
## 1. 克隆仓库
```
git clone https://github.com/fardhoz25/secure-codec-studio.git
cd secure-codec-studio
```
## 2. 后端设置
导航至后端目录:
```
cd backend
```
创建虚拟环境:
```
python -m venv .venv
```
激活虚拟环境。
**Windows**
```
.venv\Scripts\activate
```
**Linux / macOS**
```
source .venv/bin/activate
```
安装依赖:
```
pip install -r requirements.txt
```
运行 FastAPI 服务器:
```
python run.py
```
后端将可在以下地址访问:
```
http://127.0.0.1:8000
```
## 3. 前端设置
返回项目根目录:
```
cd ..
```
安装依赖:
```
npm install
```
运行开发服务器:
```
npm run dev
```
前端将可在以下地址访问:
```
http://localhost:3000
```
# API 文档
后端提供了一个交互式的 Swagger UI,用于探索和测试所有可用的 API 端点。
### 生产环境
```
https://secure-codec-studio-production.up.railway.app/docs
```
### 本地开发
```
http://127.0.0.1:8000/docs
```
API 文档包括:
- 文件处理端点
- 请求参数
- 响应 schema
- 交互式请求测试
- 验证错误
# 部署
该应用程序作为解耦的全栈架构进行部署。
| 服务 | 平台 | URL |
|----------|----------|-----|
| 前端 | Vercel | https://secure-codec-studio.vercel.app/ |
| 后端 API | Railway | https://secure-codec-studio-production.up.railway.app |
| API 文档 | Railway Swagger | https://secure-codec-studio-production.up.railway.app/docs |
前端通过 `NEXT_PUBLIC_API_URL` 环境变量与后端进行通信。
# 未来改进
- 立体声 WAV 支持
- 高级有损图像压缩
- 更好的音频压缩率
- 渐进式处理
- 批处理
- 下载管理器
# 许可证
本项目基于 **MIT License** 授权。
有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
# 作者
**Fardho Zurrahman**
**Muhammad Ridwan Ihsan**
**Muhammad Wiguna Ilham**
数据科学爱好者
使用 Next.js 和 FastAPI 构建。
|
|
| **简洁且响应式的 UI**:主仪表板具有深色主题的拖放区和模式选择功能。 | **媒体预览**:内置播放器,可即时渲染并播放处理后的视频、音频和图像。 |
| 3️⃣ 无损压缩分析 | 4️⃣ 有损压缩分析 |
| :---: | :---: |
|
|
|
| **数据保留**:结果显示使用 Zlib 算法实现了原始数据的精确保留。 | **体积优化**:结果显示了大幅的文件体积缩减以及 PSNR/MSE 质量指标。 |
| 5️⃣ 隐写术(隐藏消息) | 6️⃣ 隐写术(提取消息) |
| :---: | :---: |
|
|
|
| **安全嵌入**:通过 LSB 将秘密文本消息隐藏在媒体文件中。 | **数据提取**:成功从隐写文件中提取并读取隐藏的秘密文本。 |
# 技术栈
## 前端
- Next.js
- React
- TypeScript
- Tailwind CSS
- Lucide Icons
## 后端
- FastAPI
- Python
- OpenCV
- FFmpeg (FFV1, H.264)
- Zlib
# 功能
Secure Multimedia Codec Studio 通过统一的工作流支持跨图像、音频和视频的多媒体压缩及隐写术。
## 压缩模式
| 模式 | 描述 | 解压 |
|------|-------------|---------------|
| **无损压缩** | 使用 Zlib 算法保留原始数据的可逆压缩。 | ✅ 支持 |
| **有损压缩** | 通过牺牲部分原始信息来减小文件大小的不可逆压缩。 | ❌ 不支持 |
| **隐写术** | 使用最低有效位(LSB)技术隐藏和提取秘密文本消息。 | N/A |
## 压缩对比
| 特性 | 无损 | 有损 |
|----------|:--------:|:------:|
| 保留原始数据 | ✅ | ❌ |
| 可解压 | ✅ | ❌ |
| 压缩率 | 中等 | 高 |
| 图像质量 | 不变 | 降低 |
| 最佳使用场景 | 归档与编辑 | 分发与存储 |
## 支持的媒体
| 媒体 | 压缩算法 | 隐写术 | 支持的格式 | 最大文件大小 |
|--------|------------------------|---------------|-------------------|---------------|
| **图像** | Zlib(无损),OpenCV JPEG(有损) | LSB | PNG, JPG, JPEG, BMP, WebP | 5 MB |
| **音频** | Zlib(无损),FFmpeg libmp3lame(有损) | LSB | WAV, MP3, OGG, M4A, AAC, FLAC | 10 MB |
| **视频** | Zlib(无损),FFmpeg H.264/libx264(有损) | LSB (FFV1) | MP4, AVI, MOV, MKV | 20 MB |
## 处理能力
- 完全保留数据的**无损压缩**。
- 用于高效多媒体存储的**有损压缩**。
- 用于还原压缩媒体的**无损解压**。
- 用于嵌入秘密消息的 **LSB 隐写术**。
- 从受支持的隐写媒体中**提取隐藏消息**。
- **压缩分析**,包括压缩率、处理时间、PSNR 和 MSE(适用时)。
- 用于处理后的图像、音频和视频的**集成媒体预览**。
## 存储
所有处理过的文件临时存储在以下位置:
```
backend/tmp/
```
临时文件仅在处理过程中使用。
# 项目架构
```
Secure-Codec-Studio
│
├── app/
│
├── components/
│ ├── ActionPanel.tsx
│ ├── Header.tsx
│ ├── Footer.tsx
│ ├── UploadDropzone.tsx
│ ├── ModeSelector.tsx
│ ├── ResultCards.tsx
│ └── MediaPreview.tsx
│
├── hooks/
│
├── lib/
│ ├── api.ts
│ └── utils.ts
│
├── backend/
│ ├── app/
│ │
│ ├── algorithms/
│ │ ├── image/
│ │ ├── audio/
│ │ └── video/
│ │
│ ├── services/
│ │
│ ├── routes.py
│ ├── schemas.py
│ ├── utils.py
│ │
│ └── tmp/
│
└── README.md
```
# 后端架构
后端采用简单的分层架构。
```
Client
│
▼
routes.py
│
▼
validator.py
│
▼
service
│
▼
algorithm
│
▼
response
```
业务逻辑放置在 **services** 中,而算法隔离在 **algorithms** 目录内。
## 压缩工作流
```
Upload Image
│
▼
Select Compression Method
│
┌───────────┴───────────┐
│ │
▼ ▼
Lossless Compression Lossy Compression
│ │
▼ ▼
Zlib Algorithm Quality Reduction
│ │
▼ ▼
Codec File (.lossless) Optimized Image
│
▼
Decompression
│
▼
Original Image Restored
```
# 音频处理流程
```
Upload Audio
│
▼
Select Compression Method
│
┌───────────┴───────────┐
│ │
▼ ▼
Lossless Compression Lossy Compression
│ │
▼ ▼
Zlib Algorithm FFmpeg libmp3lame
│ │
▼ ▼
Codec File (.lossless) Optimized Audio
│
▼
Decompression
│
▼
Original Audio Restored
```
# API 端点
## 处理文件
```
POST /process
```
### 请求
Multipart Form Data
| 字段 | 类型 | 描述 |
|--------|------|-------------|
| file | File | 上传的媒体 |
| mode | String | compress / decompress / stego / extract |
| message | String | 秘密消息(可选) |
### 响应
```
{
"status": "success",
"media_type": "image",
"original_size": 102400,
"processed_size": 50231,
"compression_ratio": 50.95,
"processing_time_ms": 135,
"message": "Image compressed successfully"
}
```
# 环境变量
在项目根目录中创建一个 `.env.local` 文件,并配置以下环境变量:
### 前端
```
NEXT_PUBLIC_API_URL=https://your-backend.up.railway.app
```
# 快速开始
在运行此项目之前,请确保您的系统已安装以下内容:
- **Node.js**(v18 或更高版本)
- **Python**(v3.10 或更高版本)
- **FFmpeg**:必须安装并添加到系统的 `PATH` 中。这对于音频和视频处理能够正常工作**至关重要**。
## 1. 克隆仓库
```
git clone https://github.com/fardhoz25/secure-codec-studio.git
cd secure-codec-studio
```
## 2. 后端设置
导航至后端目录:
```
cd backend
```
创建虚拟环境:
```
python -m venv .venv
```
激活虚拟环境。
**Windows**
```
.venv\Scripts\activate
```
**Linux / macOS**
```
source .venv/bin/activate
```
安装依赖:
```
pip install -r requirements.txt
```
运行 FastAPI 服务器:
```
python run.py
```
后端将可在以下地址访问:
```
http://127.0.0.1:8000
```
## 3. 前端设置
返回项目根目录:
```
cd ..
```
安装依赖:
```
npm install
```
运行开发服务器:
```
npm run dev
```
前端将可在以下地址访问:
```
http://localhost:3000
```
# API 文档
后端提供了一个交互式的 Swagger UI,用于探索和测试所有可用的 API 端点。
### 生产环境
```
https://secure-codec-studio-production.up.railway.app/docs
```
### 本地开发
```
http://127.0.0.1:8000/docs
```
API 文档包括:
- 文件处理端点
- 请求参数
- 响应 schema
- 交互式请求测试
- 验证错误
# 部署
该应用程序作为解耦的全栈架构进行部署。
| 服务 | 平台 | URL |
|----------|----------|-----|
| 前端 | Vercel | https://secure-codec-studio.vercel.app/ |
| 后端 API | Railway | https://secure-codec-studio-production.up.railway.app |
| API 文档 | Railway Swagger | https://secure-codec-studio-production.up.railway.app/docs |
前端通过 `NEXT_PUBLIC_API_URL` 环境变量与后端进行通信。
# 未来改进
- 立体声 WAV 支持
- 高级有损图像压缩
- 更好的音频压缩率
- 渐进式处理
- 批处理
- 下载管理器
# 许可证
本项目基于 **MIT License** 授权。
有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
# 作者
**Fardho Zurrahman**
**Muhammad Ridwan Ihsan**
**Muhammad Wiguna Ilham**
数据科学爱好者
使用 Next.js 和 FastAPI 构建。标签:AV绕过, FastAPI, 图像隐写, 多媒体处理, 数据压缩, 自动化攻击, 逆向工具, 隐写术