问题标签 [fluent-ffmpeg]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
19258 浏览

node.js - 如何使用 Node.js 通过 ffmpeg 流式传输 MP4 文件?

几天来,我一直在尝试解决这个问题,并且非常感谢有关该主题的任何帮助。

通过将文件的位置作为字符串传递并将其转码为 mp3,我能够使用 fluent-ffmpeg 成功地流式传输存储在 Node.js 服务器上的 mp4 音频文件。如果我从同一个文件创建文件流并将其传递给 fluent-ffmpeg,则它适用于 mp3 输入文件,但不适用于 mp4 文件。在 mp4 文件的情况下,不会引发错误,它声称流已成功完成,但浏览器中没有播放任何内容。我猜这与存储在 mp4 文件末尾的元数据有关,但我不知道如何编写代码。当它的位置被传递给 ffmpeg 而不是流时,这是完全相同的文件。当我尝试将流传递给 s3 上的 mp4 文件时,再次没有抛出错误,但没有流到浏览器。这并不奇怪,因为 ffmpeg 不会

如何从 s3 流式传输 mp4 文件,而不先将其作为文件存储在本地?如何让 ffmpeg 在不对文件进行转码的情况下执行此操作?以下是我目前无法使用的代码。请注意,它尝试将 s3 文件作为流传递给 ffmpeg,并且还将其转码为 mp3,我不希望这样做。

这是在调用 aws.s3 时使用 knox 库...我也尝试使用 Node.js 的标准 aws sdk 编写它,如下所示,但我得到与上面相同的结果。

======================================

更新

我将一个 mp3 文件放在同一个 s3 存储桶中,我在这里的代码可以工作,并且能够将文件流式传输到浏览器,而无需存储本地副本。所以我面临的流媒体问题与 mp4/aac 容器/编码器格式有关。

我仍然对将 m4a 文件从 s3 完全下载到 Node.js 服务器的方法感兴趣,然后将其传递给 ffmpeg 进行流式传输,而无需将文件实际存储在本地文件系统中。

======================================

再次更新

我已经设法让服务器将文件作为 mp4 直接传输到浏览器。这一半回答了我原来的问题。我现在唯一的问题是我必须先将文件下载到本地商店,然后才能流式传输。我仍然想找到一种从 s3 流式传输而不需要临时文件的方法。

在接收端,我在一个空的 html 页面中只有以下 javascript:

======================================

答案

上面标题为“再次更新”的代码将通过 Node.js 服务器将 mp4 文件从 s3 流式传输到浏览器,而无需使用 flash。它确实需要将文件临时存储在 Node.js 服务器上,以便将文件中的元数据从文件末尾移动到前面。为了在不存储临时文件的情况下进行流式传输,您需要先在 S3 上实际修改文件并更改此元数据。如果您在 S3 上以这种方式更改了文件,那么您可以修改标题为“再次更新”下的代码,以便 S3 的结果直接通过管道传输到 ffmpeg 构造函数,而不是传输到 Node.js 服务器上的文件流,然后将该文件位置提供给 ffmepg,就像现在的代码一样。您可以将最终的“管道”命令更改为“保存(位置)” 在本地获取 mp4 文件的版本,并将元数据移到前面。然后,您可以将该文件的新版本上传到 S3 并尝试端到端流式传输。就我个人而言,我现在将创建一个任务,在文件首先上传到 s3 时以这种方式修改文件。这允许我在 mp4 中录制和流式传输,而无需在 Node.js 服务器上转码或存储临时文件。

0 投票
1 回答
1467 浏览

node.js - fluent-ffmpeg 模块:“结束”事件不会触发

我正在使用fluent-ffmpegnpm 模块

我已经从我的客户端发布了一个视频,并且正在使用new stream.Readable“读取”视频缓冲区。

ffmpeg 正在转换和保存文件,一切看起来都很漂亮,但“结束”事件永远不会触发。

我的代码如下:

我得到了每个进度事件的日志,它确实保存了视频,但“结束”事件的回调永远不会被调用。

我认为这是一个错误,因为其他一切都很好。

0 投票
1 回答
5116 浏览

ffmpeg - ffmpeg 以代码 1 退出:配置复杂过滤器时出错

我正在使用fluent-ffmpeg节点包来合并视频。我完全按照文档进行操作,但出现以下错误:Error: ffmpeg exited with code 1: Error configuring complex filters. 这是代码:

这是错误输出(我将 fluent-ffmpeg 生成的命令记录到控制台):

我可以在我的机器上运行 ffmpeg 来完成其他任务,而且效果很好。我不确定“-filter_complex”标志应该做什么。我正在使用 fluent-ffmpeg 2.0.1 版和 ffmpeg windows static build git-9d1fb9e (2015-12-17)。

0 投票
1 回答
1579 浏览

node.js - 使用 fluent-ffmpeg 添加字幕

我正在尝试将字幕刻录到视频中。此命令可从命令行完美运行: ffmpeg -i in.mp4 -vf subtitles=sub.srt:force_style='Fontsize=20' out.mp4

我在服务器端的代码似乎没有做太多(虽然它创建了 test.mp4)

我收到以下错误:Error: ffmpeg exited with code 1: Error opening filters!

0 投票
1 回答
1955 浏览

javascript - NodeJS - 寻找更快的方法来创建 FFMPEG 缩略图

我在节点中使用 fluent-ffmpeg 和 ffmpeg:

通常,拍摄一张缩略图需要 2-3 秒。我需要它是 0.5-1 秒进行实时开发。我的意思是,这里有什么问题 - 在我的计算机上下载单个 png 文件需要不到 2-3 秒才能完成,为什么 ffmpeg 滞后这么多?似乎有些不对劲。

0 投票
0 回答
342 浏览

node.js - 如何在 node.js 脚本中使用 fluent-ffmpeg 模块?

我正在使用 fluent-ffmpeg 来压缩图像。使用命令提示符 png 图像压缩工作正常。
我尝试使用节点脚本来压缩图像。压缩 jpg 图像工作正常,但不支持 png 图像。压缩以下代码抛出错误的PNG图像时。是否缺少任何属性?

请帮我解决这个问题。

0 投票
1 回答
2600 浏览

ffmpeg - 在一个命令中运行 FFMPEG 多个覆盖命令

我正在使用 ffmpeg 对一个视频进行更多
操作,我想做的操作是在不同的时间、音频和图像中添加许多文本。我可以做所有这些,但不能在一个命令中,单独做所有

在一个命令中执行多个文本、叠加图像和音频的任何建议

谢谢

0 投票
1 回答
2580 浏览

ffmpeg - FFmpeg 在转换过程中冻结

我正在尝试在 mp4 视频和 m4a 音频文件之间进行合并。其他几个已正确生成,但这个在时间 00:02:54.08 开始并冻结。如果我在几分钟后停止它(ctrl+c),则 output.mp4 文件有 0 个字节。我没有很多线索为什么会发生这种情况。有人经历过类似的事情吗?

0 投票
0 回答
1272 浏览

node.js - 在 FFmpeg 中组合超过 32 个输入文件

我通过 Node.js 通过 fluent-ffmpeg 使用 FFmpeg 将多个小音频文件合并为一个。我正在组合的每个音频文件都有一个延迟的开始时间(因此它既不会在同一开始合并,也不会合并)。我可以使用并将我音频文件成功地做到这一点,然后将所有内容都记录下来。但是,虽然我在文档中找不到对最大输入数的引用,但我在尝试78 个文件时得到了参考。显然有 32 个输入文件的限制。aevalsrc=0concatamix[amix @ 0x3fcd920] Value 78.000000 for parameter 'inputs' out of range [1 - 32]amix

鉴于此限制,我不确定进行此操作的最佳方式。我知道amerge存在,但它在最短的文件长度后停止,所以我需要apad一切,我只是测试了它并确定amerge有 64 个输入文件的限制,这并不总是适合我的需要(我有一个任意数字输入)。

可以 amix存储 32 个文件,将其存储在某个地方,再存储amix32 个,等等,以及amix结果。我宁愿不处理将临时文件写入磁盘然后必须稍后清理的问题。我考虑将“临时”输出写入双工节点流并在我的最终混音中读取它们,但我担心这可能效率很低。

以下是我目前正在做的事情。如果这是一个XY 问题,并且这是一种愚蠢的方式来完成我想要的,请告诉我。

0 投票
1 回答
449 浏览

javascript - 转译的 webpack 包不会通过 require 导出带连字符的包名

我正在导入fluent-ffmpegimport ffmpeg from 'fluent-ffmpeg'在一个文件中。

运行 webpack 后,我收到此错误: Uncaught Exception: ReferenceError: fluent is not defined

我查看了转译文件,发现fluent-ffmpeg包含如下: function(e,t){e.exports=fluent-ffmpeg}

将行更改为读取后:function(e,t){e.exports=require("fluent-ffmpeg")}程序工作。

有没有办法在转译fluent-ffmpeg时配置 webpack 以正确要求?

编辑:我正在使用这个电子反应 webpack 样板来构建桌面应用程序 - https://github.com/chentsulin/electron-react-boilerplate

更新: 我创建了一个 repo 来显示错误 - https://github.com/the4dpatrick/congenial-barnacleelectron-react-boilerplate和这个 repo之间的区别可以在单个提交中看到

要查看错误:

  • npm i
  • 打包电子应用程序 ( npm run package)
  • 打开发布目录下的应用程序。
  • 警报打开时出现错误