【问题标题】:Output a video file from ffmpeg directly to google cloud storage将ffmpeg中的视频文件直接输出到谷歌云存储
【发布时间】:2021-09-07 19:07:47
【问题描述】:

问题的背景

我们正在尝试使用托管在 Google App Engine (GAE) 中的服务器中的 FFmpeg 压缩视频。输入文件在谷歌云存储(GCS)中,可以很容易地作为输入传递给 FFmpeg 并完成处理,但是,我想直接将文件输出到 GCS。我在这里参考了https://ffmpeg.org/ffmpeg-protocols.html#http 的文档,他们提供并使用了正确的标题和方法来使用签名的 URL 上传文件,但它似乎不起作用。到目前为止,我什至不确定这是否可能。

当前实施

目前,我们首先将输出文件保存在 GAE 工作区中,然后将文件上传到存储桶。在我们遇到另一个问题之前,这个流程运行良好。每当文件太大时,处理时间超过 10 分钟,这似乎是灵活环境中自动缩放实例的阈值。为了解决这个问题,我们可以在标准环境中使用 basic_scaling,但我们似乎无法在 GAE 工作区中写入文件。我可以选择写入/tmp 目录,但它使用 RAM,而且我们可以一次上传许多文件,所以这不是一个选项。

可能的未来

目前我看到的一种解决方案是使用具有手动扩展功能的灵活环境,但在扩展和成本效益方面这是一个坏主意。另一个我不太确定的方法是使用 Google Compute Engine,但我还没有尝试过。

结论

由于无法从 FFmpeg 向 Google Cloud Storage 发出 PUT 请求,导致我遇到了围绕 GAE 及其奇怪的实例和功能集组合的数十个问题。

如果我遗漏任何东西,我将非常感谢您的建议或可能的解决方案。如果我们能让 FFmpeg 将文件输出到 GCS 就好了。

【问题讨论】:

    标签: google-app-engine ffmpeg google-cloud-storage google-compute-engine


    【解决方案1】:

    如果您选择使用 Compute Engine。有很多选项可供您选择,具体取决于您选择的编程语言。

    您可以从 NodeJS 将内容上传到 Google Storage,也可以使用 NodeJS 的 FFMpeg 库。他们都没有实际保存文件。直接从输入文件管道/流式传输到 Google Cloud Storage。

    更多信息:

    Node.js 的 FFmpeg 模块。这个库提供了一组函数和实用程序来抽象 ffmpeg 的命令行使用。要使用这个库,需要已经安装了 ffmpeg(包括所有必要的编码库,如 libmp3lame 或 libx264)

    https://www.npmjs.com/package/ffmpeg

    createWriteStream(optionsopt) → {WritableStream} 创建一个可写流以覆盖存储桶中文件的内容。

    https://www.npmjs.com/package/@google-cloud/storage

    【讨论】:

    • 感谢领导,我会进一步调查。需要说明的是,如果 node js 的 FFMpeg 库支持直接流式输出到 GCS,那么只使用 GAE 就足够了,我们不必切换到 Compute Engine,对吗?
    • 不确定是否可以在 GAE 上安装 ffmpeg 模块。试试看
    猜你喜欢
    • 2023-04-10
    • 2016-12-20
    • 2020-10-22
    • 2020-07-20
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    相关资源
    最近更新 更多