zoukankan      html  css  js  c++  java
  • 使用 ffmpeg 进行视频转换 nodejs

    nodejs的出现让前端人员可以使用js打造后台,也许哪天就真的摆脱了对java或者php的依赖了.

    今天跟大家分享一个利用nodejs接受前端post请求,并实现视频转码的这样一个例子.视频转码用到的是ffmpeg,nodejs取到表单的参数采用的是目录multiparty;具体实现如下:

    1.项目主要文件结构

    2.ffmpeg.js文件是启动文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    const express = require('express');
    const path = require('path');
    const multiparty=require('multiparty');
    const ffmpeg=require('fluent-ffmpeg');
    const fs=require('fs');
    const bodyParser = require('body-parser');
    const app=express();
    app.use(express.static(path.join(__dirname, 'public')));//设置静态文件根路径
    app.use(bodyParser.urlencoded({ extended: false }));
    app.get('/',function (req,res) {
        res.sendfile('./public/html/login.html')
    })
    app.post('/ffuser/login',function (req,res) {
        var form = new multiparty.Form({uploadDir: './public/upload/'});
        form.parse(req, function (err, fields, files) {
            console.log(files);
            var filesTmp = JSON.stringify(files, null, 2);
            var inputFile = files.avatar[0];
            var uploadedPath = inputFile.path;
            var dstPath = './public/realvideo/' + inputFile.originalFilename;
            var exchangePath='./public/convert/' + inputFile.originalFilename;
            fs.rename(uploadedPath, dstPath, function (err) {
                if (err) {
                    console.log('rename error: ' + err);
                else {
                    console.log('rename ok')
                    if (inputFile.originalFilename.split('.')[1] == 'MP4' || inputFile.originalFilename.split('.')[1] == 'mp4') {
                        var trans = new ffmpeg({source: dstPath})
                            .setFfmpegPath('./public/ffmpeg-64/bin/ffmpeg.exe')
                            .withAspect('4:3')
                            .withSize('1280x960')
                            .applyAutopadding(true'white')
                            .saveToFile(exchangePath, function (retcode, error) {
                                if (error) {
                                    console.log(error)
                                else {
                                    console.log(retcode)
                                }
                            })
                            .on('end',function () {
                                console.log('转码完成!')
                                res.send({code:'success',json:{fields: fields, video: '/convert/'+inputFile.originalFilename}});
                            })
                    }
                }
            });
        });
    })
    app.listen(3000,function () {
        console.log('server start')
    })

      3.运行ffmpeg.js,并在浏览器地址栏输入 localhost:3000,页面截图如下:

    4.填好用户名和密码,选择好需要上传的视频文件后,点击登录

    5.操作成功后,视频会先存储在realvideo这个目录下,转码后的视频将会存储在convert这个目录下:

    6.页面发起的post请求在收到返回参数后,会自动播放返回的视频文件

    7.本示例中所作的视频转码仅仅是尺寸的改变,官网上还有更多的转码操作,如码率等等

    转载自:https://www.cnblogs.com/Ricky-Huang/p/5724748.html

  • 相关阅读:
    关于update set from,第一次碰到,汗!
    列表CheckBox全选 结合DataGrid 进行删除操作
    DataBinder.Eval的基本格式 效率 比较
    [转载](c#)数据结构与算法分析 栈与队列
    [转载]怎样设计递归算法
    Java httpclient.CloseableHttpClient跳过https证书验证
    LeetCode129求根节点到叶节点数字之和
    LeetCode117填充每个节点的下一个右侧节点指针 II
    LeetCode131分割回文串
    LeetCode130被围绕的区域
  • 原文地址:https://www.cnblogs.com/BlingSun/p/9232827.html
Copyright © 2011-2022 走看看