我就是这么做的.

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 了__dirnameos.tmpdir()的绝对路由,但没有运气.它声称已经创建的屏幕截图并不在那里.

有谁能帮帮我吗?我已经被困在这里5个小时了,到目前为止还没有任何进展.

此外,我已经判断了repo根目录中的文件temp.它是空的.

UPDATE:已选中并可确认密钥"Folders"(temp/)中使用的路由是正确的,因为删除该文件夹将触发错误,指出找不到该文件夹.再次创建文件夹将消除此错误.但是,即使打印了"已成功生成"的日志(log),图像也不会保存在该文件夹中,并且在打印该日志(log)后,该文件夹仍然是空的.

fs.unlink也是无关的.移除它不会造成任何变化.

推荐答案

要做到这一点,您需要做两件事.

首先,将ffmpeg函数的参数从流更改为文件路径. ffmpeg({source: bufferToStream(mp4Buffer)})=>;ffmpeg("abc.mp4") 因为根据docs

它在输入流上不起作用

其次,从screenshot方法中删除folder属性,因为您已经在filename变量中指定了指定文件夹.

const filename = `temp/temp-${new Date().getTime()}.png`;

你的screenshot方法就变成了:

  .screenshots({
        timestamps: [timePosition],
        filename: filename,
        size: '320x240',
    });

Node.js相关问答推荐

使用Moongose处理node.js中重定向的then()块链

使用OpenAI API时遇到问题

利用Gemini:通过Vertex AI还是通过Google/generative-ai?

一个函数中的两个依赖的NodeJS数据库操作.如果第二个失败了怎么办?

Puppeteer 的 BrowserFetcher 发生了什么?

Playwright - 无法在 img 标签中使用 file:// 访问本地文件

Node.js 连接在查询完成之前终止

运行本地移动自动化测试时,在onPrepare钩子中,ERROR @wdio/cli:utils: A service failed in the 'onPrepare'

$not 的聚合版本是什么?

登录用户并获取他们的个人资料

module.exports=require('other') 和临时变量有什么区别?

如何从动态Typescript 文件加载模块

将 AllowDiskUse true 添加到 node.js 中的 MongoDB 聚合?

try 在 Heroku 中部署 PRN 应用程序并获得 404

Node js中向rest服务发送https请求的步骤

适用于 Windows 的 NVM 无法正常工作?

Node_redis - 如何删除密钥?

create-react-app,安装错误(找不到命令)

nodejs v10.3.0 的 gulp 任务问题:src\node_contextify.cc:629: Assertion `args[1]->IsString()' failed

`return function *(){...}` 是什么意思?