关于javascript:如何通过API或JS结合视频和音频?

How to combine video and audio through API or JS?

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

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

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

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

  • 我已经做了很多谷歌搜索,到目前为止还没有找到任何可以做到这一点的服务或代码。

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


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

    1
    <script src='https://unpkg.com/@ffmpeg/[email protected]/dist/ffmpeg.min.js'>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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);
    };


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

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


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