【问题标题】:Can I use ffmpeg to output JPEGs to a memory stream instead of a file?我可以使用 ffmpeg 将 JPEG 输出到内存流而不是文件吗?
【发布时间】:2013-11-07 05:20:28
【问题描述】:

我有一个 C# 应用程序。我有 100 个 JPEG(例如)。

我可以轻松地将其编码成视频文件。

当它在客户端应用程序上完成编码后,我 FTP 上传到我的服务器。

如果我不能将视频文件写入光盘而是将其写入内存流(或字节数组)并通过网络服务上传,那会更“整洁”吗?

我查看了 ffmpeg 文档,但作为 C# 开发人员,我发现理解 C 示例并不自然。

我想我的第一个问题是可能的,如果可以的话,任何人都可以在 C# 中发布示例代码吗?目前我正在使用C#中的进程类来执行ffmpeg。

【问题讨论】:

标签: ffmpeg c#


【解决方案1】:

你的工艺方法已经不错了,只是需要调整一下:

  1. 设置StartupInfo.RedirectStandardOutput = trueStartupInfo.UseShellExecute = false
  2. 使用pipe: 调用ffmpeg,而不是输出文件名,这将使其写入标准输出。此外,由于无法再根据文件名确定格式,因此请确保也使用-f <format> 开关。
  3. 开始进程。
  4. Process.StandardOutput.BaseStream 读取(.BaseStream,因此StreamReader.StandardOutput 不会搞砸任何事情),而进程正在运行到您的内存流中。
  5. 读取Process.StandardOutput.BaseStream 中仍缓冲的任何内容。
  6. 利润。

我不久前编写了一个thumbnailer(BSD 2 条款),其中包含演示这一点的实际代码。不管最后是从ffmpeg出来的图片还是视频。

【讨论】:

  • 出现了一个有趣的情况。您是否曾经遇到过在执行此操作时流程“挂起”的情况?我只有。如果我将它输出到硬盘驱动器上的文件没有问题,但输出和捕获基本流我的代码挂起......
  • 并非如此。但是通过不耗尽标准输出(或标准错误,如果重定向)或不填充标准输入(如果重定向)很容易使某些东西陷入僵局。见RedirectOutputStream的备注部分。如果没有您使用的实际代码,就很难说出任何事情。无论如何,你应该提出一个新问题。
猜你喜欢
  • 2016-12-26
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-20
相关资源
最近更新 更多