Node.js nodej将两个视频连接在一起?

Node.js nodej将两个视频连接在一起?,node.js,video,request,Node.js,Video,Request,所以我正在研究一个概念,虽然我知道我可以使用FFMPEG来做我需要做的事情,但我希望有一种方法可以使用nodejs请求将一个视频加入到另一个视频的末尾 下面的代码确实适用于音频,我使用的视频文件是MP4(请注意,我正在尝试将同一个视频连接在一起,因此它应该是18秒,而不是9秒 URL= 连接视频文件不像连接音频文件那么简单。有元数据(标签、标题)和其他东西(如两个视频的分辨率/维度)需要处理 一些非常简单的视频格式可能支持文件级连接,但mp4不支持文件级连接 如果是mp3,您可以简单地连接文件,

所以我正在研究一个概念,虽然我知道我可以使用FFMPEG来做我需要做的事情,但我希望有一种方法可以使用nodejs请求将一个视频加入到另一个视频的末尾

下面的代码确实适用于音频,我使用的视频文件是MP4(请注意,我正在尝试将同一个视频连接在一起,因此它应该是18秒,而不是9秒

URL=


连接视频文件不像连接音频文件那么简单。有元数据(标签、标题)和其他东西(如两个视频的分辨率/维度)需要处理

一些非常简单的视频格式可能支持文件级连接,但mp4不支持文件级连接

如果是mp3,您可以简单地连接文件,但会留下一些无效/损坏的标题,但在大多数情况下不会影响播放


当然,您可以编写一个程序(或者可能有人已经编写了一个库,您可以在节点中运行)来正确连接视频,这需要一些努力,但这并非不可能(也不简单)另一方面,要想在没有其他外部工具的情况下完成这项工作,您可以使用一种非常成熟且运行良好的FFMPEG来完成这项工作,以了解如何使用FFMPEG实现这一点。有一个名为npm的包,用于使用OpenGL转换将视频连接在一起。这可能符合您的目的。

我已经看过了NPM上有一个名为
video stitch

使用它,您可以使用以下代码合并2个视频

“严格使用”;
让videoStitch=require('video-stitch');
让videoMerge=videoStitch.merge;
视频合并()
.原件({
“文件名”:“文件名”,
“持续时间”:“hh:mm:ss”
})
.剪辑([
{
“开始时间”:“hh:mm:ss”,
“文件名”:“文件名”,
“持续时间”:“hh:mm:ss”
},
{
“开始时间”:“hh:mm:ss”,
“文件名”:“文件名”,
“持续时间”:“hh:mm:ss”
},
{
“开始时间”:“hh:mm:ss”,
“文件名”:“文件名”,
“持续时间”:“hh:mm:ss”
}
])
.merge()
.然后((输出文件)=>{
log('输出文件的路径',outputFile);
});

希望这有帮助!

通过使用FFMPEG,假设您有2个或2个以上的视频文件。下载所有视频。创建一个类似“all_videos.txt”的文本文件,并将要合并的所有视频目录位置的完整路径一个接一个地保存下来,如下所示

然后在节点js中执行此命令(注意下面命令中的“all_videos.txt”位置)


如果你只想一个视频一个接一个地播放,而没有间隙,你可以在客户端执行此操作,方法是在当前视频仍在播放时加载、启动和暂停下一个视频,然后切换此答案显示了一个基于浏览器的方法示例:@Mick想法更简单,他们可以使用30请求的videoRequest前面的第二个视频现在被降级到该错误断言距离==0 | |(距离>=2&&distance)
const express = require('express');
request = require('request');


const router = new express.Router();

router.get(':url(*)', (req, res) =>{


    var url = req.params.url.substr(1); 
    res.set({
        "Content-Type": "video/mp4",
        'Transfer-Encoding': 'chunked'
    });


    var clients = [];
    ASystem();
    var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
    console.log;(req.params.url);
    /* START A FUNCTION */
    function ASystem(){

                var remote = "https://storage.googleapis.com/ad-system/testfolder/Video/10%20second%20video%20FAIL.mp4";
                var streama = request.get(remote);
                streama.on("connect", function() {
                    console.error(" connected!");
                    console.error(streama.headers);
                });

                streama.on("end", function() {
                    console.error(" END");
                    console.log(url);
                   if(url !== ""){getVideo();}
                    console.error(streama.headers);
                // test = true;

                });

                // Fired after the HTTP response headers have been received.
                streama.on('response', function(res) {
                console.error(" Completed");
                    console.error(res.headers);
                });


                // When a chunk of data is received on the stream, push it to all connected clients
                streama.on("data", function (chunk) {
                        // console.log(clients.length);
                        if (clients.length > 0){
                            for (client in clients){
                                clients[client].write(chunk);
                            };
                        }

                });
    };
/* END A FUNCTION */
/* FETCHING URLVIDEO */
    function getVideo(){
        var remote = url;   
        var streama = request.get(remote);
        streama.on("connect", function() {
            console.error(" Stream connected!");
            //console.error(stream.headers);
        });

        streama.on("end", function() {
            console.error(" Stream END");
        // setTimeout(function(){ test = true; console.error('yep yep yep')},29000);
            //console.error(stream.headers);
        // test = true;
        //getVideo();
        });

        // Fired after the HTTP response headers have been received.
        streama.on('response', function(res) {
        // console.error("Stream response!");
            console.error(res.headers);
        });


        // When a chunk of data is received on the stream, push it to all connected clients
        streama.on("data", function (chunk) {
                // console.log(clients.length);
                if (clients.length > 0){
                    for (client in clients){
                        clients[client].write(chunk);
                    };
                }

        });

    }
    /* END VIDEO*/

    /* CORE SYSTEM */

      clients.push(res);

    /* END CORE SYSTEM */
});
module.exports = router;
let cmd = "ffmpeg -f concat -i all_videos.txt -c copy merged_video.mp4"
Exec(cmd, function(err, stdout, stderr) {
  if(err) console.log(err)
  else console.log("Done!")
})