18053923230

18053923230

Buried on July 31, 2025

Video to Audio Converter - 快速开始指南

"这是一个基于 Next.js 和 FFmpeg.wasm 的视频转音频工具网站,所有处理都在用户浏览器中完成,无需上传文件到服务器。"

Video to Audio Converter - 快速开始指南

🚀 项目概述

这是一个基于 Next.js 和 FFmpeg.wasm 的视频转音频工具网站,所有处理都在用户浏览器中完成,无需上传文件到服务器。

📋 前置要求

  • Node.js: 18.0 或更高版本
  • pnpm: 8.0 或更高版本
  • Git: 用于版本控制

检查环境

# 检查 Node.js 版本
node --version

# 检查 pnpm 版本
pnpm --version

# 如果没有安装 pnpm,请先安装
npm install -g pnpm

🛠️ 项目创建

方法一:使用自动脚本(推荐)

  1. 下载启动脚本
# 确保脚本有执行权限
chmod +x setup-project.sh

# 运行脚本
./setup-project.sh
  1. 进入项目目录
cd video-to-audio-converter

方法二:手动创建

  1. 创建 Next.js 项目
pnpm create next-app@latest video-to-audio-converter --typescript --tailwind --eslint --app --src-dir --import-alias "@/*"
cd video-to-audio-converter
  1. 安装依赖
# 核心依赖
pnpm add @ffmpeg/ffmpeg @ffmpeg/util
pnpm add @supabase/supabase-js
pnpm add next-intl
pnpm add lucide-react
pnpm add react-dropzone

# 开发依赖
pnpm add -D @types/node @types/react @types/react-dom
pnpm add -D tailwindcss-animate
pnpm add -D @testing-library/react @testing-library/jest-dom
  1. 初始化 shadcn/ui
pnpm dlx shadcn@latest init
  1. 安装 UI 组件
pnpm dlx shadcn@latest add button card label select slider progress input textarea dialog toast

⚙️ 环境配置

1. 创建环境变量文件

在项目根目录创建 .env.local 文件:

# Supabase Configuration
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url_here
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key_here

# Next.js Configuration
NEXTAUTH_SECRET=your_nextauth_secret_here
NEXTAUTH_URL=http://localhost:3000

# App Configuration
NEXT_PUBLIC_APP_NAME=Video to Audio Converter
NEXT_PUBLIC_APP_URL=http://localhost:3000

2. 配置 Supabase

  1. 创建 Supabase 项目

  2. 获取项目配置

    • 进入项目设置 → API
    • 复制 Project URLanon public 密钥
    • 更新 .env.local 文件
  3. 创建数据库表

在 Supabase SQL 编辑器中运行以下 SQL:

-- 用户表
CREATE TABLE my_users (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  email VARCHAR UNIQUE NOT NULL,
  created_at TIMESTAMP DEFAULT NOW(),
  last_login TIMESTAMP
);

-- 转换历史表
CREATE TABLE my_conversions (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id UUID REFERENCES my_users(id),
  original_filename VARCHAR NOT NULL,
  input_format VARCHAR NOT NULL,
  output_format VARCHAR NOT NULL,
  file_size BIGINT NOT NULL,
  conversion_time INTEGER,
  created_at TIMESTAMP DEFAULT NOW()
);

-- 启用 RLS (Row Level Security)
ALTER TABLE my_users ENABLE ROW LEVEL SECURITY;
ALTER TABLE my_conversions ENABLE ROW LEVEL SECURITY;

-- 创建策略
CREATE POLICY "Users can view own data" ON my_users
  FOR SELECT USING (auth.uid() = id);

CREATE POLICY "Users can insert own data" ON my_users
  FOR INSERT WITH CHECK (auth.uid() = id);

CREATE POLICY "Users can view own conversions" ON my_conversions
  FOR SELECT USING (auth.uid() = user_id);

CREATE POLICY "Users can insert own conversions" ON my_conversions
  FOR INSERT WITH CHECK (auth.uid() = user_id);

3. 配置 FFmpeg 文件

  1. 创建 FFmpeg 目录
mkdir -p public/ffmpeg
  1. 下载 FFmpeg 核心文件

从 FFmpeg.wasm CDN 下载文件到 public/ffmpeg/ 目录:

# 下载核心文件
curl -o public/ffmpeg/ffmpeg-core.js https://unpkg.com/@ffmpeg/core@0.12.6/dist/umd/ffmpeg-core.js
curl -o public/ffmpeg/ffmpeg-core.wasm https://unpkg.com/@ffmpeg/core@0.12.6/dist/umd/ffmpeg-core.wasm

🏗️ 项目结构

确保项目结构如下:

video-to-audio-converter/
├── src/
│   ├── app/
│   │   ├── (auth)/
│   │   │   ├── login/
│   │   │   └── register/
│   │   ├── api/
│   │   ├── globals.css
│   │   ├── layout.tsx
│   │   └── page.tsx
│   ├── components/
│   │   ├── ui/
│   │   ├── file-upload.tsx
│   │   ├── converter.tsx
│   │   ├── progress.tsx
│   │   └── audio-player.tsx
│   ├── lib/
│   │   ├── ffmpeg.ts
│   │   ├── supabase.ts
│   │   └── utils.ts
│   ├── types/
│   │   └── index.ts
│   └── hooks/
│       └── use-converter.ts
├── public/
│   └── ffmpeg/
│       ├── ffmpeg-core.js
│       └── ffmpeg-core.wasm
├── .env.local
├── next.config.ts
├── tailwind.config.ts
├── tsconfig.json
└── package.json

🚀 启动开发服务器

# 安装依赖
pnpm install

# 启动开发服务器
pnpm dev

访问 http://localhost:3000 查看应用。

🧪 测试功能

基本功能测试

  1. 文件上传测试

    • 准备一个测试视频文件(MP4 格式,小于 100MB)
    • 拖拽或点击上传文件
    • 验证文件格式检测
  2. 转换功能测试

    • 选择输出格式(如 MP3)
    • 调整质量参数
    • 点击转换按钮
    • 验证转换进度显示
  3. 下载功能测试

    • 转换完成后预览音频
    • 点击下载按钮
    • 验证文件下载

错误处理测试

  1. 不支持的文件格式

    • 尝试上传 .txt 文件
    • 验证错误提示
  2. 文件过大

    • 尝试上传超过限制的文件
    • 验证错误提示
  3. 网络错误

    • 断开网络连接
    • 验证错误处理

🔧 常见问题解决

1. FFmpeg 加载失败

问题: Failed to load FFmpeg core

解决方案:

  • 检查 public/ffmpeg/ 目录是否存在
  • 验证 FFmpeg 文件是否正确下载
  • 检查浏览器控制台错误信息

2. 跨域错误

问题: SharedArrayBuffer is not defined

解决方案:

  • 确保 next.config.ts 中配置了正确的 CORS 头
  • 重启开发服务器
  • 检查浏览器是否支持 SharedArrayBuffer

3. 类型错误

问题: TypeScript 编译错误

解决方案:

# 检查类型
pnpm type-check

# 修复 ESLint 错误
pnpm lint --fix

4. 依赖安装失败

问题: pnpm 安装依赖失败

解决方案:

# 清理缓存
pnpm store prune

# 重新安装
rm -rf node_modules pnpm-lock.yaml
pnpm install

📦 构建和部署

本地构建测试

# 构建生产版本
pnpm build

# 启动生产服务器
pnpm start

Vercel 部署

  1. 推送代码到 GitHub
git init
git add .
git commit -m "Initial commit"
git branch -M main
git remote add origin https://github.com/yourusername/video-to-audio-converter.git
git push -u origin main
  1. 在 Vercel 中部署

  2. 配置环境变量 在 Vercel 项目设置中添加:

    • NEXT_PUBLIC_SUPABASE_URL
    • NEXT_PUBLIC_SUPABASE_ANON_KEY
    • NEXTAUTH_SECRET
    • NEXTAUTH_URL

🔍 性能优化

1. 代码分割

// 动态导入 FFmpeg 组件
const FFmpegConverter = dynamic(() => import("@/components/ffmpeg-converter"), {
  loading: () => <div>Loading converter...</div>,
  ssr: false,
});

2. 缓存策略

// 缓存 FFmpeg 实例
const ffmpegInstance = useMemo(() => new FFmpeg(), []);

3. 错误边界

class ConversionErrorBoundary extends Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }

  static getDerivedStateFromError(error) {
    return { hasError: true };
  }

  componentDidCatch(error, errorInfo) {
    console.error("Conversion error:", error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      return <div>Something went wrong with the conversion.</div>;
    }

    return this.props.children;
  }
}

📚 学习资源

🤝 贡献指南

  1. Fork 项目
  2. 创建功能分支 (git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m 'Add some amazing feature')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 打开 Pull Request

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。


🎉 恭喜!您已经成功搭建了 Video to Audio Converter 项目!

现在您可以开始开发新功能,优化用户体验,或者部署到生产环境了。