首页 > 解决方案 > 使用nodejs和angular中的ffmpeg将视频转换为mp3格式,然后将转换后的音频保存到数据库(mongodb)

问题描述

这是nodejs服务器端文件

const express = require('express');
const ffmpeg  = require('fluent-ffmpeg');
const fileUpload = require('express-fileupload');
const mongoose = require('mongoose');
const cors   = require('cors')
const app = express();
const Video = require('./models/video');
mongoose.connect('mongodb://localhost:27017/YoutubeApp', {
    useNewUrlParser: true,
    useUnifiedTopology: true,
});
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error'));
db.once('open', () => {
   console.log('Data Base Connected Successfully!');
});

app.use(fileUpload({
   useTempFiles: true,
   tempFileDir: 'temp/'
}));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cors({ origin: 'http://localhost:4200' }));


ffmpeg.setFfmpegPath('/usr/bin/ffmpeg');

app.post('/mp4tomp3', (req, res) => {
  convertdata = req.body;
  console.log('path of innput is', req.body);
  function convert(input, output, callback) {
     ffmpeg(input)
         .output(output)
         .on('end', function() {                    
             console.log('conversion ended');
             callback(null);
           }).on('error', function(err){
              console.log('error: ', err.code, err.msg);
              callback(err);
           }).run();
      }
     convert(convertdata, './temp/output.mp3', function(err){
        if(!err) {
          console.log('conversion complete');

 
     }
 })

 app.listen(3000, () => {
    console.log('Server Start On Port 3000')
 })

在转换功能中,我不知道如何获得用户的输入我是新的角度请任何人都可以解决这个问题提前谢谢

这是视频模型文件

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const videoSchema = new Schema({
    mp4: String,
});
module.exports = mongoose.model("Videos", videoSchema);

**这是处理用户输入和选择视频的 Angular 客户端的 Typescript 代码 **

import { ThrowStmt } from '@angular/compiler';
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { VideoConversionService } from 'src/services/video-conversion.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {

   submitted =false;
   form! : FormGroup
   data:any

   constructor(private formBuilder: FormBuilder,
       private videoService: VideoConversionService){}

   creatForm(){
    this.form = this.formBuilder.group({
    mp4: ['', Validators.required],
  });
  }
   ngOnInit(): void {
   this.creatForm();

  }


  convertVideo(){
    this.submitted = true
    this.videoService.conversion(this.form.value).subscribe(res => {
    this.data = res;
 })
 }

 }

我不知道如何创建逻辑来做到这一点(使用角度框架将视频转换为音频)

这是 app.component.html 文件,我想使用输入字段从用户那里获取视频

<div class="container">
   <h1>Video Proccessing App</h1>
   <form  (ngSubmit)="convertVideo()" [formGroup]="form"  >
     <input type="file"    formControlName="mp4" name="mp4">
     <input type="submit"  value="Convert">
  </form>
</div>

但我的代码不起作用,视频没有转换成音频

这是我的视频服务文件,我在其中调用 nodejs api 来执行任务

import { Injectable } from '@angular/core';
import { HttpClient  } from '@angular/common/http';
@Injectable({
   providedIn: 'root'
})
export class VideoConversionService {

constructor(private httpClient: HttpClient) { }

conversion(data: any){
   return this.httpClient.post('http://localhost:3000/mp4tomp3', data)
}
}

请任何人都可以解决我的问题提前谢谢

标签: node.jsangularmongodbfileffmpeg

解决方案


推荐阅读