node.js - nodejs Lambda函数中的FFMPEG意外行为

标签 node.js amazon-web-services ffmpeg aws-lambda aws-lambda-layers

我正在尝试使用 FFMPEG 将字幕刻录到视频中。我在无服务器 lambda 架构中工作,我们之前通过使用层将 FFMPEG 与 lambda 结合使用,一切正常。
现在我正在尝试使用以下命令在视频中刻录字幕:

ffmpeg -i https://some-bucket.s3.region.amazonaws.com/my-video.mp4 -f mp4 -vf subtitles=sub.srt subtitled-video.mp4
问题是,该命令在我的本地机器或我尝试的任何其他实例中完美运行。但是在我的 lambda 函数中,我只得到没有字幕的原始视频。
起初我认为它可能是我正在使用的 ffmpeg 构建,但在尝试使用它之后,它在我尝试过的所有其他环境中都可以工作。
此外,我在 lambda 中的 ffmpeg 作业的输出中没有收到任何错误,一切似乎都可以正常工作。只是它不烧字幕
我希望你能帮助我解决这个问题。或者至少指出我正确的方向。
提前致谢

最佳答案

Lambda 会截断日志,而您只会看到日志的结尾。如果日志中间有警告消息,您将无法看到它。
我正在处理同样的问题,我发现的错误是没有字体。对于 EC2 实例和 Lambda 函数,如果您不提供字体,则不会像您的本地计算机那样提供系统字体。
如果没有字体,ffmpeg 命令将无法生成字幕。
我的解决方案是

  • 将字体和字体配置添加到您的 Lambda 层
  • 将环境变量 (FONTCONFIG_PATH) 添加到您的 lambda 函数,以便它知道在哪里可以找到字体。该值应该是您的字体所在的文件夹。就我而言,它是/opt/fonts,因为这就是我捆绑 Lambda 层的方式。
  • 为您的字幕规范添加强制样式
    subtitles=sample.srt:force_style="FontName=ArialUnicodeMS"

  • 希望它可以帮助您解决问题。

    关于node.js - nodejs Lambda函数中的FFMPEG意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68072428/

    相关文章:

    node.js - Socket.io 从 nodejs Controller 发出,我做得对吗?

    javascript - 传递 ajax header 信息时出现问题

    amazon-web-services - 通过 cloudformation 为 fargate launchtype 任务为 cloudwatch 事件规则创建 'Target'

    ios - 在 iOS 中从 bash 调用 ffmpeg 转换?

    javascript - NodeJs 堆 js 模块 : Heap is not a constructor

    node.js - 我可以从 package.json bin 脚本运行命令吗?

    javascript - 使用 createWriteStream 为通过 FTP 下载的 txt 文件分配变量

    amazon-web-services - Cloudformation,无法创建类型为 `AWS::MSK::Configuration` 的资源

    android - FFMPEG 图像到显示空白视频的视频

    c# - 如何使用 uwp c# 代码为 ffmpeg.exe 设置环境变量?