FFMPEG 多截图命令
FFMPEG multiple screenshots command
我正在尝试编写一个使用 ffmpeg 从视频文件创建图像的函数。
但现在我想知道如何使用 ffmpeg commands 准确地做到这一点,因为我使用包装器,现在我有一些限制,所以我必须以本机方式进行.
所以,首先我决定使用一个名为 node-fluent-ffmpeg 的包装器。
这是我使用 Wrapper 的解决方法:
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好像有
一个糟糕的文档(我一直卡住了,很难理解)。
所以我的主要目标是:
我如何使用 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>"
然后解析JSON为format.duration
,然后除以你想要的屏幕数。
然后通过执行 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"
我正在尝试编写一个使用 ffmpeg 从视频文件创建图像的函数。
但现在我想知道如何使用 ffmpeg commands 准确地做到这一点,因为我使用包装器,现在我有一些限制,所以我必须以本机方式进行.
所以,首先我决定使用一个名为 node-fluent-ffmpeg 的包装器。
这是我使用 Wrapper 的解决方法:
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好像有 一个糟糕的文档(我一直卡住了,很难理解)。
所以我的主要目标是:
我如何使用 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>"
然后解析JSON为format.duration
,然后除以你想要的屏幕数。
然后通过执行 dateformat('H:i:s', i * (format.duration / 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"