如何通过 API 或 JS 结合视频和音频? [关闭]

Posted

技术标签:

【中文标题】如何通过 API 或 JS 结合视频和音频? [关闭]【英文标题】:How to combine video and audio through API or JS? [closed] 【发布时间】:2015-03-06 00:13:01 【问题描述】:

我正在设计一个执行以下操作的系统:

    用户上传视频,JS代码查找视频长度。

    对现有服务执行 HTTP 调用以检索相同长度的音轨。

    同步并合并音频和视频(长度完全相同)。我能想到的最好的事情是同时播放它们(完全可以使用 html5),但我希望能够让用户下载组合文件,或者能够说......上传到YouTube 通过他们的 API。

我一直在进行大量的谷歌搜索,到目前为止还没有找到任何可以做到这一点的服务或代码。

我熟悉 javascript、Ruby on Rails、HTML、CSS、jQuery 以及 AngularJS 和 Backbone.js。如果解决方案以其中一种语言存在,或者我可以通过 HTTP 访问,那就太好了。

【问题讨论】:

定义:我想要做的就是在视频中添加一个音轨,替换现有的(如果有的话)。 我的帖子由于某种原因被否决了,但除非您打算像 uber 一样扩展,否则不使用 yt api 会很愚蠢。此外,here 是使用 Elektron(跨平台 javascript 框架)构建的“Youtube Audio Ripper”(MP4 到 MP3)的 github 源。所以那里。如果您选择走这条路,那就是为您的项目完成的粗略设计/可行性阶段。 【参考方案1】:

你可以试试videoconverter.js,我之前没试过, 但我认为这是目前做前端的唯一方法......最小的缩小版本也需要 6.1 MB。

另一种选择是将视频上传到您的服务器,使用 ffmpeg 将其合并,并为用户提供输出文件的链接,以便下载或流式传输。

【讨论】:

当您使用 videoconverter.js 遵循这个(通常很好的)答案时,请注意两件事:1)该项目在 GitHub 上已无人维护超过 5 年。 2) FFmpeg 是 LGPL,当在服务器上使用时,这不是问题(因为托管不构成 GPL 术语中的分发/传送),但在前端可能会有所不同(因为下载 JavaScript 是分发/传送) .【参考方案2】:

我目前正在使用FFmpeg.wasm。这是一个很棒的工具,但我还没有找到使用纯 JavaScript 的方法,因为音频和视频有时有不同的编解码器。我做了一个函数来合并视频并返回一个 Uint8Array,可以在 blob 中使用。

<script src='https://unpkg.com/@ffmpeg/ffmpeg@0.9.6/dist/ffmpeg.min.js'></script>
async function mergeVideo(video, audio) 
    let  createFFmpeg, fetchFile  = FFmpeg;
    let ffmpeg = createFFmpeg();
    await ffmpeg.load();
    ffmpeg.FS('writeFile', 'video.mp4', await fetchFile(video));
    ffmpeg.FS('writeFile', 'audio.mp4', await fetchFile(audio));
    await ffmpeg.run('-i', 'video.mp4', '-i', 'audio.mp4', '-c', 'copy', 'output.mp4');
    let data = await ffmpeg.FS('readFile', 'output.mp4');
    return new Uint8Array(data.buffer);
;

【讨论】:

感谢您的回答。您在组合视频时遇到过任何问题吗? 不,我在合并视频方面没有任何问题 感谢您的快速回复。所以你遇到的唯一问题是在视频中添加音频?现在开始研究这个项目,因此了解优缺点会很有帮助。【参考方案3】:

关于 svc 与音频,请考虑 youtube 音乐 / youtube api。它将提供您将需要的所有曲目。只是不要忘记版权。但是,无论您走到哪里,都会遇到这个问题。

【讨论】:

我相信这个api会让你根据音轨长度进行搜索,但是你要查看详细信息here

以上是关于如何通过 API 或 JS 结合视频和音频? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何保护通过 Media Source Extension API 播放的视频文件?

如何从 ARSKView(或 SKView)帧创建视频,包括微音频(ios 11)

视频到音频文件通过节点 js 中的 FFMPEG 转换和保存

开和关音频按钮在 JS 中不起作用

按块加载视频/音频 html

如何通过静音部分分割视频或音频