我就是这么做的.
const ffmpegPath = require('@ffmpeg-installer/ffmpeg');
import ffmpeg from 'fluent-ffmpeg';
import path from 'path';
const os = require('os');
ffmpeg.setFfmpegPath(ffmpegPath.path);
export const generateThumbnailFromVideo = async (mp4Buffer) => {
console.log('generateThumbnailFromVideo is triggered');
const timePosition = '00:00:00.500';
const filename = `temp/temp-${new Date().getTime()}.png`;
return new Promise((resolve, reject) => {
ffmpeg({
source: bufferToStream(mp4Buffer)
})
.on('error', (err) => {
console.error('An error occurred: ' + err.message);
reject(err);
})
.on('end', () => {
console.log('Thumbnail generated successfully');
fs.readFile(filename, (err, data) => {
if (err) {
console.error('An error occurred while reading the thumbnail file:', err);
reject(err);
return;
}
fs.unlink(filename);
uploadBuffer(data, filename, data.length)
})
resolve(filename);
})
.screenshots({
timestamps: [timePosition],
filename: filename,
folder: 'temp/',
size: '320x240',
});
});
}
这就是出现的日志(log).
generateThumbnailFromVideo is triggered
Thumbnail generated successfully
createProjectMedia is triggered
userId: 1
projectId: 25
mediaArray: [
{
mediaUrl: 'medias/1/1686843801535/medias_1_1684753043519_1_(1)_(4)_(1).mp4',
thumbnailUrl: 'medias/1/1686843801535/medias_1_1684753043519_1_(1)_(4)_(1)_thumbnail.jpg',
mediaType: 2
}
]
An error occurred while reading the thumbnail file: [Error: ENOENT: no such file or directory, open 'temp/temp-1686843802255.png'] {
errno: -2,
code: 'ENOENT',
syscall: 'open',
path: 'temp/temp-1686843802255.png'
}
它声称屏幕截图已经创建,但我在任何地方都找不到它.try 了__dirname
和os.tmpdir()
的绝对路由,但没有运气.它声称已经创建的屏幕截图并不在那里.
有谁能帮帮我吗?我已经被困在这里5个小时了,到目前为止还没有任何进展.
此外,我已经判断了repo根目录中的文件temp
.它是空的.
UPDATE:已选中并可确认密钥"Folders"(temp/
)中使用的路由是正确的,因为删除该文件夹将触发错误,指出找不到该文件夹.再次创建文件夹将消除此错误.但是,即使打印了"已成功生成"的日志(log),图像也不会保存在该文件夹中,并且在打印该日志(log)后,该文件夹仍然是空的.
这fs.unlink
也是无关的.移除它不会造成任何变化.