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过滤器不接受角度值,只接受上述的旋转方向值。 # """
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构