Как можно сконвертировать файл формата WAV в MP3 в проекте, использующем Next.js?

Как можно эффективно конвертировать файлы из формата WAV в MP3 на серверной стороне с использованием Next.js версии 13.5.3? Какую библиотеку рекомендуется использовать для выполнения этой задачи? Как настроить проект для конвертации файлов? Каким образом можно передать файл формата WAV на сервер для конвертации в MP3 и вернуть его в виде buffer? Требуется советы, примеры кода или рекомендации от опытных разработчиков.
  • 24 февраля 2024 г. 12:38
Ответы на вопрос 1
Для конвертации файлов из формата WAV в MP3 на серверной стороне с использованием Next.js, можно воспользоваться библиотекой ffmpeg, которая позволяет работать с мультимедийным контентом. Ниже приведен пример кода, который демонстрирует, как можно сделать это в проекте на Next.js:

1. Установите библиотеку ffmpeg-static, которая предоставляет статически скомпилированный ffmpeg:

```
npm install ffmpeg-static
```

2. Создайте функцию для конвертации файла из WAV в MP3:

```javascript
const ffmpegPath = require('ffmpeg-static').replace(
  'app.asar',
  'app.asar.unpacked'
);
const { exec } = require('child_process');

export default async function convertWavToMp3(wavFile) {
  return new Promise((resolve, reject) => {
    const mp3File = `${wavFile.replace('.wav', '.mp3')}`;

    const command = `"${ffmpegPath}" -i "${wavFile}" -codec:a libmp3lame -qscale:a 2 "${mp3File}"`;

    exec(command, (error, stdout, stderr) => {
      if (error) {
        console.error(error);
        reject(error);
        return;
      }
      resolve(mp3File);
    });
  });
}
```

3. В вашем API роуте Next.js передайте файл формата WAV на сервер и выполните конвертацию:

```javascript
import fs from 'fs';
import convertWavToMp3 from '../utils/convertWavToMp3';

export default async function handler(req, res) {
  if (req.method !== 'POST') {
    return res.status(405).json({ error: 'Method Not Allowed' });
  }

  const { wavFile } = req.body;

  const wavBuffer = Buffer.from(wavFile, 'base64');
  const wavFilePath = 'input.wav';

  fs.writeFileSync(wavFilePath, wavBuffer);

  try {
    const mp3FilePath = await convertWavToMp3(wavFilePath);
    const mp3Buffer = fs.readFileSync(mp3FilePath);

    res.setHeader('Content-Type', 'audio/mpeg');
    res.end(mp3Buffer);
  } catch (error) {
    res.status(500).json({ error: 'Internal Server Error' });
  }
}
```

4. Отправьте файл формата WAV на сервер для конвертации в MP3:

```javascript
const fs = require('fs');
const fetch = require('isomorphic-unfetch');

const filename = 'audio.wav';
const wavBuffer = fs.readFileSync(filename);
const base64Wav = wavBuffer.toString('base64');

fetch('/api/convert', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ wavFile: base64Wav }),
})
  .then((res) => res.arrayBuffer())
  .then((data) => {
    const mp3Buffer = Buffer.from(data);
    fs.writeFileSync('output.mp3', mp3Buffer);
  })
  .catch((error) => console.error(error));
```

Этот пример показывает базовую реализацию конвертации файлов из WAV в MP3 на серверной стороне с использованием Next.js. Помните, что необходимо установить ffmpeg на сервере для работы данного кода. Не забудьте обработку ошибок и безопасное хранение файлов на сервере.
Похожие вопросы