首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何像facebook一样用nodejs制作视频模块

如何像facebook一样用nodejs制作视频模块
EN

Stack Overflow用户
提问于 2017-05-31 14:42:44
回答 1查看 561关注 0票数 1

只是想知道怎么开始?需要:

有了大约10张照片,可以制作一个5到10秒的小视频,比如动画(转换?),如果有人知道的话,我想复制facebook视频过程,哪个技术栈是最好的,模块(ffmpeg,包装ffmpeg)(python,nodejs)。

Thx

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-31 18:31:20

我首先回答如下:https://superuser.com/questions/833232/create-video-with-5-images-with-fadein-out-effect-in-ffmpeg/834035#834035

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

代码语言:javascript
复制
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,其中每个图像持续1秒,图像之间有0.5秒的淡出。

代码语言:javascript
复制
-t 1 

这是图像的持续时间。

代码语言:javascript
复制
T,0.5 

是你的淡出时间

如果您想使用节点,我建议使用fluent-ffmpeg库:https://github.com/fluent-ffmpeg/node-fluent-ffmpeg

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

您可能有一个如下所示的函数:

代码语言:javascript
复制
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过程包装在一个承诺,它将解决的完成和拒绝的错误。您可以将该函数交给命令行输入参数、输入文件、输出参数和输出文件.至少类似的事。您可能需要将其调整为多个输入,但是它们的github已经有了很好的文档!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44287794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档