FFMPEG - 60fps 到 30fps,在一行中刻录

问题描述

我已经尝试完成这项工作有一段时间了,我认为我只是缺乏一些知识。

我基本上是在尝试将 60fps 的视频转换为 30fps 并同时刻录时间码。

到目前为止我有

ffmpeg -y -r 60  -i IN.mov -pix_fmt yuv420p -timecode 10:03:13:27 -filter:v fps=30 -vf "[in]drawtext=fontfile='C\:/Windows/Fonts/arial.ttf': timecode='10\:03\:13\:27':timecode_rate=30:x=((w-text_w)/2)/3:y=((h-text_h)-h)+text_h:fontsize=24:fontcolor=white:Box=1:Boxcolor=black:Boxborderw=5[out]"  -r 30 OUT.mov

对于某些值,我手动将 60 fps tc 转换为 30(最终将其移至 python)

一切似乎都运行良好,直到您查看似乎在 30 处计数但在 2 处计数的燃烧。我可以说它与 60/30 转换有关,因为显然我们将帧减半。我真的很想避免多次调用和“临时”文件

如果有人能告诉我我做错了什么并教育我一点那就太棒了

先谢谢大家

解决方法

llogan 为我提供的答案适用于输入视频的一两次编辑。

ffmpeg -i input.mov -timecode 10:03:13:27 -vf "fps=30,drawtext=fontfile='C\:/Windows/Fonts/arial.ttf':timecode='10\:03\:13\:27':timecode_rate=30:x=(w-text_w)/2:y=h-th-10:fontsize=24:fontcolor=white:box=1:boxcolor=black:boxborderw=5,format=yuv420p" output.mov

不完全确定这里的巫术是如何运作的,但确实有效!

,

因为 -r 60 必须是 30

ffmpeg -y -r 30  -i IN.mov -pix_fmt yuv420p -timecode 10:03:13:27 -filter:v fps=30 -vf "[in]drawtext=fontfile='C\:/Windows/Fonts/arial.ttf': timecode='10\:03\:13\:27':timecode_rate=30:x=((w-text_w)/2)/3:y=((h-text_h)-h)+text_h:fontsize=24:fontcolor=white:box=1:boxcolor=black:boxborderw=5[out]"   out30fps.mp4

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...