【问题标题】:FFmpeg pipe input for concat用于 concat 的 FFmpeg 管道输入
【发布时间】:2021-01-10 13:30:21
【问题描述】:

我正在尝试使用 ffmpeg 制作实时录像机(不是屏幕录像机,特定尺寸的统一播放器录像机)

我能够获取 ARGB 数据,到目前为止,我一直将其写入一堆 bmp,然后运行 ​​ffmpegs concat 命令,如

ffmpeg -i files.txt -i pictures/pic%06d.bmp output.mp4

使用不同的编解码器等,我的 files.txt 本质上是(伪)

ffconcat version 1.0 file pic000000.bmp duration 0.016 #etc, basically the durations were generated from time stamps

无论如何,不​​管你信不信,但是将文件以 bmp 格式写入磁盘(或者甚至将它们编码为压缩格式然后将其写入磁盘)会占用大量额外时间,我更愿意通过管道传输数据直接到ffmpeg

我知道在某些情况下,您可以使用 - 运算符输入文件,然后在任何编程语言中,价格都是从通过标准输入传递字节数据开始的,我很确定,尽管问题:

我只能找到如何使用设置的帧速率来执行此操作,而不是使用 concat,我(想?)我需要在这里使用 concat,因为图像具有准确的时间戳非常重要在身体上与音频对齐,因为在捕获帧时会有轻微的延迟,到目前为止,我一直在根据它们的时间戳计算每个帧的持续时间(最后一个没有持续时间),以便排列它们与音频完美融合,但据我所知,concat 功能似乎要求文件已经写入磁盘,然后在文本文件中指定..

那么有什么方法可以为每个帧获得自定义帧速率,而无需先将帧写入磁盘,然后将它们通过管道输入? concat 是否以任何方式支持-?还有另一种方法可以将帧与音频对齐吗?其他视频录制软件是否也面临类似问题?

【问题讨论】:

  • 我不完全明白为什么你不能使用实时输出的管道。应该保留时间。
  • @ilogan 我只是不知道将管道放入什么格式以保持自定义持续时间,我见过的所有示例都有一个设定的帧率,你能告诉我一个命令的例子吗?应该使用看起来会保持相同的时间戳吗?问题是它不是实时的,这里和那里有一些延迟
  • @llogan 不确定你的名字是大写 i 的 Ilogan 还是小写 L 的 Llogan,所以..
  • 这是两个 L——诚然不是最好的用户名选择。

标签: c# unity3d ffmpeg


【解决方案1】:

管道

我无权访问您的图像/视频/数据生成器,所以我不知道它在做什么,但您至少可以尝试使用管道:

your_data_process - | ffmpeg -f rawvideo -framerate 25 -pixel_format argb -video_size 640x480 -i - output.mp4
  • 在此示例中,your_data_process 只是一个占位符示例,用于生成视频。
  • -f 应该是 your_data_process 输出的任何格式。请参阅ffmpeg -demuxers 以获取长列表。此示例假定为原始视频。
  • 必须设置帧速率,但这并不一定意味着它会打乱您的时间。
  • 如果您的播放器确实喜欢该输出,请添加-vf format=yuv420p 输出选项。

图片

另一种方法是输出到单个图像文件并在每次更改时自动覆盖文件。然后ffmpeg 将使用该文件作为输入,并在更新时通知。

ffmpeg -f image2 -loop 1 -framerate 25 -i input.bmp output.mp4
  • 通常您不必为大多数图像输入手动设置-f image2。在这种情况下,您必须这样做,否则它不会注意到图像更新。这是因为它会为某些图像格式选择更简单的解复用器。

  • 在此示例中,ffmpeg 将复制帧以填充 25 fps,直到下一次图像更新,因此应保留时间。

  • 如果您的播放器确实喜欢该输出,则添加 -vf format=yuv420p 输出选项。

【讨论】:

  • 嗨,谢谢,虽然我对第一种方法有点困惑,但我怎样才能仍然为每一帧保留我的自定义时间戳,似乎我输入的静态帧速率越高,视频播放的速度就越快,因此与音频不一致(但感谢那里的 argb 部分,我想知道如何设置格式)
  • 另外,对于第二种方式,它需要时间来写入位图,直到现在我只是记录了开始收集像素数据的确切时间戳,然后当它被写入文件时我仍然这样做考虑从拍摄的时间开始,而不是写下来,所以这里可能会有延迟
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-11
  • 1970-01-01
  • 2015-11-16
  • 2019-05-17
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多