<p>使用OpenCV和Python,您的任务应该相对容易完成。看来你对OpenCV还不熟悉,所以我会尽量把我的解释保持透彻,但如果你需要澄清的话,请尽管问。</p>
<p>我不确定你是从现场摄像机视频源获取数据,还是正在对录制的视频进行后期处理。不管怎样。。。</p>
<p>获取数据。
如果使用实时源:</p>
<pre><code>capture = cv2.VideoCapture(0)
</code></pre>
<p>如果使用录制的录像:</p>
<pre><code>capture = cv2.VideoCapture("your_reading_file.avi")
</code></pre>
<p>初始化视频编写器。查找<a href="https://stackoverflow.com/questions/1136989/creating-avi-files-in-opencv/1137034#1137034">at this question</a>以获取有关编解码器的帮助-查找工作的编解码器并非易事。我也在使用Windows7x64,下面提到的编解码器是唯一一个对我有效的。另外,将变量<code>fps</code>设置为尽可能接近实际输入的视频帧速率-一旦开始写入帧,就不能更改它。</p>
<pre><code>flag, frame = capture.read() # **EDIT:** to get frame size
width = np.size(frame, 1) #here is why you need numpy! (remember to "import numpy as np")
height = np.size(frame, 0)
writer = cv2.VideoWriter(filename="your_writing_file.avi",
fourcc=cv2.cv.CV_FOURCC('I', 'Y', 'U', 'V'), #this is the codec that works for me
fps=15, #frames per second, I suggest 15 as a rough initial estimate
frameSize=(width, height))
</code></pre>
<p>处理此数据并添加文本。最后,将编辑后的帧写入视频文件。</p>
<pre><code>while True:
flag, frame = capture.read() #Flag returns 1 for success, 0 for failure. Frame is the currently processed frame
if flag == 0: #Something is wrong with your data, or the end of the video file was reached
break
x = width/2
y = height/2 #change to the desired coordinates
text_color = (255,0,0) #color as (B,G,R)
cv2.putText(frame, "your_string", (x,y), cv2.FONT_HERSHEY_PLAIN, 1.0, text_color, thickness=1, lineType=cv2.CV_AA)
writer.write(frame) #write to the video file
</code></pre>
<p>就这么简单!我几乎每天都用上面的代码向视频文件中写入文本,所以它肯定能工作。我能预见的唯一潜在问题是编解码器,不幸的是,我不太了解。我希望这可以解决你的问题,请随时提出更多的问题。</p>
<p><strong>编辑:</strong>对评论问题的回答。</p>
<p>1.)据我所知,你只能使用.avi,因为你必须在OpenCV中使用未压缩格式。恐怕我不知道如何使用其他(压缩)格式。也许你可以使用第三方程序来进行转换前/转换后的工作?出现<code>frame</code>异常的原因是我的错误,我已编辑了答案以包含缺少的行。</p>
<p>2)恐怕我不知道如何阅读元数据。如果我知道我会让你知道的。我自己寻找视频帧速率的方法是让OpenCV在视频中运行一次,使用<code>Time</code>模块计算平均帧速率。然后,可以在写入视频文件时使用此估计值。</p>
<p>3.)我发现,根据几个因素,结果视频的大小可能与原始视频有很大的不同,最重要的是所选的<code>fps</code>与实际原始帧率的接近程度。</p>
<p>4)至于其他字体,有几种可用。我可以让你参考<a href="https://stackoverflow.com/questions/11917124/opencv-how-to-use-other-font-than-hershey-with-cvputtext-like-arial">this question</a>来快速了解一下。以下是相关文件:</p>
<pre><code>fontFace – Font type. One of FONT_HERSHEY_SIMPLEX,
FONT_HERSHEY_PLAIN,
FONT_HERSHEY_DUPLEX,
FONT_HERSHEY_COMPLEX,
FONT_HERSHEY_TRIPLEX,
FONT_HERSHEY_COMPLEX_SMALL,
FONT_HERSHEY_SCRIPT_SIMPLEX, or
FONT_HERSHEY_SCRIPT_COMPLEX,
where each of the font ID’s can be combined with FONT_HERSHEY_ITALIC to get the slanted letters.
</code></pre>