问题描述
我已经尝试完成这项工作有一段时间了,我认为我只是缺乏一些知识。
我基本上是在尝试将 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