opencv+python+ffmpeg为视频添加文字滚动动画效果代码

代码语言:python

所属分类:其他

代码描述:opencv+python+ffmpeg为视频添加文字滚动动画效果代码,先分解每一帧成图片,然后在每一帧计算动画出现的文字位置,最后ffmpeg合成完整视频。

代码标签: opencv python ffmpeg 视频 添加 文字 滚动 动画

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

#!/usr/local/python3/bin/python3
# -*- coding: utf-8 -*
#pip install python-opencv
import cv2
import numpy as np
import subprocess
import os
import sys

def add_text_animation(video_path, output_path, text):
    # 打开视频
    cap = cv2.VideoCapture(video_path)
    
    # 获取视频属性
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    fps = cap.get(cv2.CAP_PROP_FPS)
    
    # 检查 fps 是否有效
    if fps <= 0:
        fps = 30  # 如果无法获取有效的 fps,使用默认值 30
    
    print(f"视频属性: 宽度={width}, 高度={height}, FPS={fps}")
    
    # 创建临时目录来存储帧
    temp_dir = 'temp_frames'
    os.makedirs(temp_dir, exist_ok=True)
    
    # 设置初始文字位置
    text_position = [width, height // 2]
    
    frame_count = 0
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break
        
        # 更新文字位置
        text_position[0] -= 5  # 每帧向左移动5个像素
        if text_position[0] < -len(text) * 20:  # 当文字完全移出画面时
            text_position[0] = width  # 重置到右侧
        
        # 在帧上添加文字
        cv2.putText(frame, text, tuple(text_position), cv2.FONT_HERSHEY_SIMPLEX, 
                    1, (255, 255, 255), 2, cv2.LINE_AA)
        
        # 保存帧为图像文件
        cv2.imwrite(f'{temp_dir}/frame_{frame_count:06d}.png', frame)
        
        frame_count += 1
        if frame_count % 100 == 0:
            print(f"已处理 {frame_count} 帧")
    
    # 释放资源
    cap.release()
    cv2.destroyAllWindows()
    
    print(f"总共处理的帧数: {frame_count}")
    
    # 检查是否有帧被处理
    if frame_count == 0:
        print("没有处理到任何帧。请检查输入视频文件。")
        return
    
    print("正在使用FFmpeg处理最终输出...").........完整代码请登录后点击上方下载按钮下载查看

网友评论0