如何使用nodejs制作视频模块,就像facebook对照片所做的那样

Posted

技术标签:

【中文标题】如何使用nodejs制作视频模块,就像facebook对照片所做的那样【英文标题】:how to make video module with nodejs like facebook did with photos 【发布时间】:2017-11-01 10:29:17 【问题描述】:

只是想知道如何开始?需求:

大约有 10 张照片,能够制作一个 5-10 秒的小视频,例如带有动画(过渡?),如果有人知道,我想重现 facebook 视频过程,哪个技术堆栈是最好的,模块(ffmpeg,包装器 ffmpeg)(python,nodejs)。

谢谢

【问题讨论】:

“Facebook 视频流程”到底是什么? 【参考方案1】:

我将从这里开始回答:https://superuser.com/questions/833232/create-video-with-5-images-with-fadein-out-effect-in-ffmpeg/834035#834035

特别是ffmpeg混合过滤器示例:

ffmpeg \
-loop 1 -t 1 -i 001.png \
-loop 1 -t 1 -i 002.png \
-loop 1 -t 1 -i 003.png \
-loop 1 -t 1 -i 004.png \
-loop 1 -t 1 -i 005.png \
-filter_complex \
"[1:v][0:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b1v]; \
[2:v][1:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b2v]; \
[3:v][2:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b3v]; \
[4:v][3:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b4v]; \
[0:v][b1v][1:v][b2v][2:v][b3v][3:v][b4v][4:v]concat=n=9:v=1:a=0,format=yuv420p[v]" -map "[v]" out.mp4

这将为您提供一个输出 mp4,其中每个图像持续一秒钟,图像之间有 0.5 秒的淡入淡出。

-t 1 

这是图像的持续时间

T,0.5 

是你的褪色时间

如果你想使用 node,我会推荐 fluent-ffmpeg 库:https://github.com/fluent-ffmpeg/node-fluent-ffmpeg

我喜欢 node 作为解决方案,因为您可以使用单线程并发事件循环,它将作业传递给您的 ffmpeg 模块,并允许 ffmpeg 占用您机器上所有可用的内核。

你可能有一个看起来像这样的函数:

function runFfmpeg(inputParams, input, outputParams, output) 
    return new Promise((resolve, reject) => 
        const ffmpegCommand = new ffmpeg()
        ffmpegCommand.input(input)
        .inputOptions(inputParams)
        .on('start', (command) => 
            // log start
        )
        .on('progress', (progress) => 
            // log progress
        )
        .on('end', () => 
            resolve('SUCCESS!')
        )
        .on('error', (error) => 
            reject(error)
        )
        .outputOptions(outputParams)
        .output(output)
        .run()
    )

所以这只是将您的 ffmpeg 进程包装在一个 Promise 中,它将在完成时解决并在错误时拒绝。您将把该函数交给您的命令行输入参数、输入文件、输出参数和输出文件……至少类似的东西。您可能需要针对多个输入进行调整,但他们的 github 有很好的文档记录!

【讨论】:

谢谢你的回复,会检查一下:)

以上是关于如何使用nodejs制作视频模块,就像facebook对照片所做的那样的主要内容,如果未能解决你的问题,请参考以下文章

如何使用具有分辨率切换能力的原生 Android 制作视频播放器,就像我们在 YouTube 中看到的那样?

text 如何制作nodejs api模块

制作基于模块的社交网络 cms

请教如何制作一个简单的网页 就像网上浏览的图片视频的网站一样 把自己的相片视频放上去 不需要联网可

如何使用 Node JS 获取已排序的文件路径列表

nodejs中标准包的制作,上传,安装及卸载方法