python3.6版本代码:
import subprocess import re from threading import Thread def print_ffmpeg_progress(process): """ 从ffmpeg进程中读取并打印进度信息 """ pattern = re.compile(r'frame=\s+(\d+)') # 正则表达式,用于匹配帧数 for line in iter(process.stderr.readline, ''): if 'progress' in line: match = pattern.search(line) if match: frame = int(match.group(1)) print(f"Processing frame: {frame}") def rotate_video_with_ffmpeg(input_path, output_path): # 构建ffmpeg命令 command = [ 'ffmpeg', '-i', input_path, '-vf', 'transpose=2', # 顺时针旋转90度 '-c:a', 'copy', output_path, '-loglevel', 'error' # 设置日志级别为error以获取更多错误信息 ] # 启动ffmpeg进程 with subprocess.Popen(command, stderr=subprocess.PIPE, universal_newlines=True) as process: # 创建并启动一个新线程来打印进度 progress_thread = Thread(target=print_ffmpeg_progress, args=(process,)) progress_thread.daemon = True progress_thread.start() # 等待ffmpeg进程结束 process.wait() # 读取 FFmpeg 进程的错误输出 error_output, _ = process.communicate() # 确保进度线程结束 progress_thread.join() # 检查ffmpeg进程的状态 if process.returncode != 0: print("FFmpeg process failed with error code:", process.returncode) print("Error output:\n", error_output) else: print("Video rotation completed successfully.") # 使用示例 input_video_path = "E:\\pian\\fanchang.mp4" output_video_path = "E:\\pian\\fanchang_旋转90.mp4" rotate_video_with_ffmpeg(input_video_path, output_video_path) # """ # # ffmpeg中的transpose过滤器接受的参数值与旋转角度的表示方式不同。在ffmpeg中,transpose过滤器的参数值用来指定旋转的方向,而不是旋转的角度。参数值与旋转方向的对应关系如下: # # 0:不旋转(默认) # 1:逆时针旋转90度 # 2:顺时针旋转90度 # 3:旋转180度 # 所以,如果你想要顺时针旋转90度(将竖屏视频转换为横屏),应该使用transpose=2。逆时针旋转90度则使用transpose=1。 # # 根据你提供的错误信息,你已经尝试使用transpose=90,这不是一个有效的参数值,因为transpose过滤器不接受角度值,只接受上述的旋转方向值。 # """