【问题标题】:How to edit and concatenation video如何编辑和连接视频
【发布时间】:2019-12-08 05:31:26
【问题描述】:

有没有一种方法可以通过一些脚本将我们预定义的自己的视频剪辑添加到现有视频中,然后将其保存为一个视频?我们不想使用任何视频编辑软件的请告诉我您有什么方法可以编辑视频和拼接视​​频吗?

【问题讨论】:

    标签: javascript node.js video video-capture


    【解决方案1】:

    欢迎! ffmpeg 是我最喜欢的通过代码处理音频和视频文件的方式,并且可以与大多数脚本语言一起使用(我用 python 和 javascript 完成了它)。已经有answer to the question here,但我再举一个例子。

    由于您标记了 javascript 和 node.js,这里是我用来以编程方式(通过代码)完成此操作的代码的 sn-p,而无需使用视频编辑器。我在 linux、mac 和 windows 上使用过它,所以文件路径取决于你的系统。它适用于大多数主要的音频和视频格式,但为了这个示例,我使用的是 .mp4。我刚刚在 Windows 10 上测试了我在下面发布的这个确切的设置,它没有出现任何错误。

    首先,创建一个新的节点项目(如果你还没有这样做的话)

    npm init
    

    接下来,从命令行使用 npm for node 安装 ffmpeg(这将为任何平台安装它:linux、osx、windows) npm package

    npm install ffmpeg-downloader
    

    有多种组合视频的方法,但我喜欢下面的方法。为了合并文件,您需要在 .txt 文件中列出完整的文件路径,每行一个视频文件,ffmpeg 将读取合并(我调用我的 files.txt,但它可以被称为任何东西)。我不确定您可以拥有的视频限制,但我一次将多达 15 个视频合并为一个最终视频,没有任何问题。

    files.txt 的内容看起来像这样;您可以根据需要预先或通过代码创建它:

    file 'C:\path\to\file1.mp4'
    file 'C:\path\to\file2.mp4'
    file 'C:\path\to\file3.mp4'
    file 'C:\path\to\file4.mp4'
    

    现在在一个 javascript 文件(我称为 combine.js)中,您可以调整以下内容以适应您的文件路径结构。

    const { exec } = require('child_process');
    const ffmpeg = require('ffmpeg-downloader');
    
    function combineVideos() {
        console.log('process starting');
    
        // executable for ffmpeg
        const exe = ffmpeg.path;
    
        // the files.txt that contains the list of files to combine
        const filesList = 'C:\\path\\to\\files.txt';
    
        // where you want the final video to be created
        const outFile = 'C:\\path\\to\\finalCombinedVideo.mp4';
    
        // build the command that ffmpeg will run. It will look something like this:
        // ffmpeg -y -f concat -safe 0 -i "path/to/files.txt" -c copy "path/to/finalCombinedVideo.mp4"
    
        const cmd = '"' + exe + '" -y'
            + ' -f concat'
            + ' -safe 0'
            + ' -i "' + filesList + '"'
            + ' -c copy "' + outFile + '"';
    
        exec(cmd, (err, stdout, stderr) => {
            if (err) {
                console.error(`exec error: ${err}`);
                return;
            }
    
            console.log(`process complete: ${outFile}`);
        });
    }
    
    // call the combineVideos function
    combineVideos();
    

    现在,您可以使用 node 运行合并功能并创建视频

    node combine.js
    process starting
    process complete:  C:\path\to\finalCombinedVideo.mp4
    

    我希望这可以对你有所帮助。祝你好运!

    【讨论】:

    • 非常感谢您解释它对我们的真正帮助,我们需要使用 FFMPEG 在视频上添加 gif 图像作为覆盖。该图像需要在特定时间后在给定的精确点上显示。
    • 添加 gif 需要为 ffmpeg 命令提供更多选项,如此处 video.stackexchange.com/questions/12105/… 和此处 superuser.com/questions/472557/… 所述。我自己之前没有这样做过,但我的示例仍然可以作为起点,您可以更改命令以以正确的方式使用其他选项。
    • 非常感谢@chrisbye,它工作正常,我们取得了一些成就。
    猜你喜欢
    • 1970-01-01
    • 2010-11-12
    • 2018-04-03
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 2023-01-22
    相关资源
    最近更新 更多