![]() |
1
3
简短的回答,不。 回答很长,是的,但不是不使用单独的库来创建带有渲染时间代码的帧,透明填充其余帧,然后使用ffmpeg覆盖现有视频上的帧。我不知道该怎么做,但我敢肯定,如果你有创造力的话,你一定能想出办法。
编辑:
我一直在研究这个问题,因为它对我来说是一个有趣的问题/项目。我通过写作在解决问题上走得更远了一点。
a Perl script
会产生一个
仍在研究如何在视频上定位和覆盖渲染的字幕,并以相同的格式重新编码。我会更新这篇文章,因为我知道的更多。 |
![]() |
2
22
ffmpeg的drawtext过滤器适用于我,您可以指定开始时间代码及其格式:
您必须以hh:mm:ss[:;,]ff的格式指定时间代码格式。请注意,必须在时间代码格式字符串中转义冒号,并且必须指定时间代码速率(此处为25fps)。您还可以指定其他文本-这里是“TCR:” 您可以使用ffprobe和一点shell fu获得帧速率:
所以您可以很容易地将它们全部插入到批处理脚本中,例如
这将在1920x1080帧底部中心的半不透明框中添加剪辑的名称和滚动时间代码。 编辑 既然我已经走到了黑暗的一面,我现在在Windows PowerShell环境中这样做,这就是我使用的方法:
这将在给定包含.mov、.mp4和.mts文件的文件夹(使用
|
![]() |
3
14
这个
drawtext
中提到的筛选器
@stib
答案是插入时间的关键。使用
存在其他选项,例如
为了得到一个时钟,我不得不使用不推荐使用的
另一个例子:在黑框中插入日期+时间的命令,左上角的一些像素和“一些填充”(实际上,边缘有两个空格和换行符):
另一个获得时钟以下微秒的示例:
这使用了这样一个事实:文本实际上有三行长,并且两个文本都有一个换行符(回车,
其他提示:
|
![]() |
4
2
在最近的生成中,可以使用 drawtext 过滤器(它的示例中的“t”是框架的时间戳)来插入文本。它也适用于“当前”系统时间的srtftime。 |
![]() |
5
1
我找到的最简单的解决方案是显示文件被捕获时的时钟,而不是它的持续时间和它的工作/基于这篇文章,谢谢!是
这么简单的时间代码-把你的开始时间,然后计数就可以了!该示例适用于Windows |
![]() |
6
0
这是我的解决方案,我相信它是正确的,因为它避免了手动设置速率,并且允许您格式化输出。
这将生成hh:mm:ss格式的图章;您可以使用 strftime .
它看起来像是要放入一个时间戳
注意 三倍的 pts函数中的转义冒号,如果您像上面所做的那样输入它,就必须这样做。另外,您可以看到我复制了Arial粗体的字体文件,并将其直接放到了工作目录中,这样做很简单。 |
![]() |
7
-1
ffmpeg将能够完成大部分工作,但并不是全部打包。使用ffmpeg,您可以让它按顺序解码所有帧,并给您“表示时间戳”(在某些格式上可能提供额外的与时间相关的元数据,但pts是您希望开始查找的内容。)然后,您自己就可以真正地将文本绘制到解码后的帧上。我使用qt来处理类似的事情,通过使用qImage上的qPainer来处理帧数据,但是可能还有其他一些API来绘制您发现更明显的图像。然后,使用ffmpeg api制作一个压缩视频,其中有您新绘制的帧。如果你也想要音频的话,会更复杂一点。我自己的工作并不真正关心音频,所以我没有费心学习API的音频方面。基本上,当你进行读循环,从文件中取出数据包时,其中一些数据包将是音频的。您不必像我那样丢弃它们,而是需要保留它们,并在得到它们时将它们写入输出文件。 我只使用了C API,而不是C,所以我不知道是否有什么特别的问题需要担心。 |
![]() |
Manjot Singh · FFMPEG-流媒体在几秒钟后停止 6 年前 |
![]() |
Yang Chen · 如何使ffmpeg自动填充帧? 6 年前 |
![]() |
user3313834 · 在文件名中使用空格读取时 6 年前 |
![]() |
vcamargo · 如何使ffmpeg在Docker容器中可用? 6 年前 |
|
Marvin von Rappard · 剪切多个视频的结尾 6 年前 |
![]() |
Edward · 当ffmpeg中的音频较长时,将黑色帧附加到视频 6 年前 |