node.js - 使用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)
}
}
请任何人都可以解决我的问题提前谢谢
解决方案
推荐阅读
- magento2 - 在作曲家为magento构建的应用程序安装403禁止错误之后
- visual-studio-2019 - 无法从命令行从 Windows docker 运行图像,但从 VisualStudio 2019 运行
- reactjs - React router 5:恢复浏览器背面的滚动位置
- mysql - 如何在 mysql 工作台的列中创建一个选择多个项目的条件语句?
- laravel - Laravel Nova Resource,在布局中组合字段?
- c++ - 为什么在爆炸 std::tuple 时需要 std::integral_constant?
- authorization - MapWhen() 中的 MVC 授权应用于所有控制器
- python - 四种方法的课堂文字游戏
- python - 索引 79 处不支持的格式字符 'O' (0x4f)
- python - 如何在 Python 中标准化 RGB?