如何解决FFMPEG多个屏幕截图命令
但是现在我想知道如何使用ffmpeg 命令准确地做到这一点,因为我使用包装器并且现在我有一些限制,所以我必须采用本机方式。
因此,首先我决定使用一个称为node-fluent-ffmpeg的包装器。
这是我使用包装器的解决方法:
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中制作
-
拍摄的每个屏幕截图都将为每帧添加前缀和有序编号和名称。 例如::thumbnail-at-1.png,thumbnail-at-2.png,thumbnail-at-3.png,并且一直持续到达到60个屏幕截图限制为止。
-
每个屏幕截图都将以1600x900的分辨率保存。
-
每个屏幕截图都将保存在TMP文件夹中。
-
不要介意阅读:毕竟,我会将每个屏幕截图都上传到s3存储桶中。
-
我搜索了很多旧论坛,但ffmpeg似乎有 糟糕的文档(我被困住了,很难理解)。
所以我的主要目标是:
如何使用FFMPEG命令完全实现代码示例和快速注释中显示的功能? (不使用包装器)
(很抱歉,我正在尝试使其更简单)
我的意思是,在以下代码示例中,我必须使用哪些命令以及FFMPEG命令?
顺便说一句:它是node.js,
真的不知道该怎么办,对不起
spawnSync(
"/opt/ffmpeg/ffmpeg",[
"-i",``,"-f","",``
],{ stdio: "inherit" }
);
感谢您的耐心!
环境:
- Node.js 12.x
- FFMPEG(4.3.1)
解决方法
主要问题是获取视频的时长,因此,只要有ffprobe,您就应该能够做到:
获取持续时间,然后除以60,将数字转换为时间戳。
ffprobe -v quiet -print_format json -show_format -show_streams "<FILENAME>"
然后解析format.duration
的JSON,然后将其除以所需的屏幕数。
然后通过执行dateformat('H:i:s',i * (format.duration / 60))
(伪),循环60次以在特定的时间戳获得单个帧:
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"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。