【问题标题】:From multiple video files to single output从多个视频文件到单个输出
【发布时间】:2019-11-30 07:17:37
【问题描述】:

假设我有一个包含数百个可能的视频文件的列表。使用 ffmpeg 可以很容易地获取多个文件并将它们拼接到一个视频输出中,但这就是事情变得棘手的地方。

我正在寻找一种方法让他们直播并在直播进行时动态添加视频到队列中。想想像SSAI 这样的东西,但对于整个视频。

Stream live 在那里,所以我们在等待 ffmpeg 完成整个视频时没有延迟,而是尽快开始,而且我们可以选择下一个文件在直播期间排队。

简化,看起来像这样:

[v] [v] [v] [v] - stored video files, eg. on S3 

      [v] - chosen file

      | | 
      | | - during the live stream
      | |
      \ /
       V    
   _________             ___________              ___________
   \       /             |         |              ||       ||
    \     /    =====>    |         |    =====>    ||  |:>  ||
     \___/               |_________|              ||_______||
  Video queue              FFMPEG?                Live stream
                      Transcoding module?
                            Magic?

如果这有什么不同的话,我会用 Node.js 写这个。

这甚至可能吗?如果您需要更多信息,请随时提出,我们非常感谢您提出的每一个建议!

【问题讨论】:

  • 所有视频是否都具有相同的属性 - 编解码器、分辨率等?
  • 我们的目标是实现这一点
  • 如果是真的,可以使用稍微复杂的方式来完成。
  • 能否请您指出正确的方向,因为我是这个领域的新手?这真的意味着很多!
  • 您应该可以通过虚幻媒体服务器的“实时播放列表”功能实现这一点。如果所有文件的编码相同,则不需要任何 ffmpeg 或转码。

标签: node.js video ffmpeg video-streaming streaming


【解决方案1】:

执行此操作的基本方法是使用 2 级 concat demuxer 并循环顶级 concat 输入。

创建两个文本文件。

root.txt:

file nested.txt
file nested.txt

nested.txt:

file current-video.mp4

然后,

ffmpeg -re -f concat -safe 0 -stream_loop -1 -i root.txt -c copy {output options}

在当前文件播放结束之前用新文件名更新nested.txt。

FFmpeg git 版本 > 2019 年 1 月或 4.2+ 是必需的。

所有文件必须具有相同编码的流​​。流的时基应该相同。一个文件中所有流的持续时间应该相同,以保持同步。

【讨论】:

  • 非常感谢,我会尽快试试这个
  • 如何用不同编码的不同视频输出适合dvb广播的ts文件?
  • 您必须在添加之前将所有文件重新编码为相同的参数。
猜你喜欢
  • 2019-07-08
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2020-06-14
  • 2013-07-05
  • 2017-04-23
  • 2020-02-18
  • 1970-01-01
相关资源
最近更新 更多