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

标签 node.js reactjs ffmpeg html5-video video-processing

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

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

谢谢

最佳答案

我将从这里开始回答: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 文档非常齐全!

关于node.js - 如何使用nodejs制作视频模块,就像facebook对照片所做的那样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44287794/

相关文章:

Node.js v0.10 : Replace certain bytes in file without reading whole file

node.js - node.io 内置模块的问题

对于 PSNR 过滤器,FFMPEG 是修剪和 -t 被忽略?

node.js - 一般来说,Node.js 如何处理 10,000 个并发请求?

node.js - Mean Stack 安装在端口 80 或 iis 下

javascript - 如何使用 React-router-dom 版本 6 useNavigate 和 typescript 传递参数

ios - React Native libc++abi.dylib : terminating with uncaught exception of type NSException

reactjs - 如何在 React 中链接到另一个页面?

ffmpeg concat最后一个图像持续时间不正确

ffmpeg - 从特定视频帧中提取缩略图