【发布时间】:2019-12-08 05:31:26
【问题描述】:
有没有一种方法可以通过一些脚本将我们预定义的自己的视频剪辑添加到现有视频中,然后将其保存为一个视频?我们不想使用任何视频编辑软件的请告诉我您有什么方法可以编辑视频和拼接视频吗?
【问题讨论】:
标签: javascript node.js video video-capture
有没有一种方法可以通过一些脚本将我们预定义的自己的视频剪辑添加到现有视频中,然后将其保存为一个视频?我们不想使用任何视频编辑软件的请告诉我您有什么方法可以编辑视频和拼接视频吗?
【问题讨论】:
标签: javascript node.js video video-capture
欢迎! 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 命令提供更多选项,如此处 video.stackexchange.com/questions/12105/… 和此处 superuser.com/questions/472557/… 所述。我自己之前没有这样做过,但我的示例仍然可以作为起点,您可以更改命令以以正确的方式使用其他选项。