【发布时间】: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——诚然不是最好的用户名选择。