Javascript FFMPEG多屏幕截图命令
我正在尝试编写一个函数,该函数使用ffmpeg从视频文件创建图像 但现在我想知道如何使用ffmpeg命令准确地做到这一点,因为我使用包装器,现在我有一些限制,所以我必须采用本机方式 所以,首先,我决定使用一个名为node fluent ffmpeg的包装器 这是我在包装方面的工作:Javascript FFMPEG多屏幕截图命令,javascript,node.js,amazon-web-services,ffmpeg,fluent-ffmpeg,Javascript,Node.js,Amazon Web Services,Ffmpeg,Fluent Ffmpeg,我正在尝试编写一个函数,该函数使用ffmpeg从视频文件创建图像 但现在我想知道如何使用ffmpeg命令准确地做到这一点,因为我使用包装器,现在我有一些限制,所以我必须采用本机方式 所以,首先,我决定使用一个名为node fluent ffmpeg的包装器 这是我在包装方面的工作: ffmpeg({ source: `The video file...`, }) .on("filenames", async (filenames)
ffmpeg({
source: `The video file...`,
})
.on("filenames", async (filenames) => {
})
.on("error", function (err) {
console.log("Error in filenames section: " + JSON.stringify(err));
})
.on("end", function () {
console.log("Screenshots taken");
})
.screenshots({
count: 60,
folder: "tmp/",
filename: "thumbnail-at-%i.png",
size: "1600x900",
})
.on("end", function (stdout, stderr) {
let newImg = await fs.createReadStream(`/tmp/${img}`);
destparams = await {
Bucket: dstBucket,
Key: "uploaded-" + img,
Body: newImg,
ContentType: "image",
};
await s3.putObject(destparams).promise();
}))
了解我的注意事项:
- 我仍然想在node.js中实现它
- 假设文件是:“视频文件…”
- 我用随机的方式从视频中截取了60张截图,就像这样 不管视频的长度,从开始到结束只需要60个截图
- 每个截图都有一个前缀,每个帧都有一个有序的编号和名称。 例如:thumbnail-at-1.png、thumbnail-at-2.png、thumbnail-at-3.png,并一直持续到60个屏幕截图限制
- 每个屏幕截图将以1600x900分辨率保存
- 每个屏幕截图都将保存在TMP文件夹中
- 不要介意读这篇文章:毕竟我会将每个屏幕截图上传到s3存储桶中
- 我在很多老论坛上搜索过,但似乎ffmpeg已经搜索过了 糟糕的文档(我被卡住了,很难理解)
spawnSync(
"/opt/ffmpeg/ffmpeg",
[
"-i",
``,
"-f",
"",
``
],
{ stdio: "inherit" }
);
感谢您的耐心等待强>
环境:
- Node.js 12.x
- FFMPEG(4.3.1)
ffprobe-v quiet-print\u format json-show\u format-show\u streams”“
然后将JSON解析为格式.duration
,然后将其除以所需的屏幕数
然后通过执行dateformat('H:i:s',i*(format.duration/60))
(pseudo),循环60次,以获得特定时间戳的单个帧:
哇,巴迪谢谢你,但我有两个问题:1-有了这个命令,我怎么能以特定的分辨率拍摄这些截图?2-r和-f是什么意思?(对不起,我是本地ffmpeg的新手)
ffmpeg -ss 00:00:00 -i "infile.mp4" -t 00:00:01 -r 1 -f mjpeg "thumbnail-at-0.png"
ffmpeg -ss 00:00:10 -i "infile.mp4" -t 00:00:01 -r 1 -f mjpeg "thumbnail-at-1.png"
ffmpeg -ss 00:00:20 -i "infile.mp4" -t 00:00:01 -r 1 -f mjpeg "thumbnail-at-2.png"
...
ffmpeg -ss 00:09:30 -i "infile.mp4" -t 00:00:01 -r 1 -f mjpeg "thumbnail-at-57.png"
ffmpeg -ss 00:09:40 -i "infile.mp4" -t 00:00:01 -r 1 -f mjpeg "thumbnail-at-58.png"
ffmpeg -ss 00:09:50 -i "infile.mp4" -t 00:00:01 -r 1 -f mjpeg "thumbnail-at-59.png"