无忧启动论坛
标题:
用ai写的批量视频快速无损旋转脚本[python]
[打印本页]
作者:
cpanel
时间:
20 小时前
标题:
用ai写的批量视频快速无损旋转脚本[python]
本帖最后由 cpanel 于 2025-12-14 03:26 编辑
脚本是基于ffmpeg的,
需要与ffmpeg.exe同目录
因为有很多视频存在拍摄方向不一样的问题,又一直找不到合适的软件,
所以就找AI开发了这个脚本。
优点,可以批量多线程无损快速旋转视频[平均几秒钟一个视频]。
缺点,只支持部分编码视频,视频格式也只支持mp4mpv等常用格式,
当然格式可以自行往代码中添加,但是有些编码是无法用这种方式旋转的。
若有大佬帮忙改进,请把完善后的代码发我一份,谢谢。
下面是代码:
import os
import subprocess
from tkinter import Tk, filedialog, simpledialog, messagebox
# 支持的视频扩展名
SUPPORTED_EXTENSIONS = ('.mp4', '.mov', '.m4v', '.mkv')
def select_directory(title):
"""弹出窗口选择目录"""
root = Tk()
root.withdraw()
folder = filedialog.askdirectory(title=title)
return folder
def get_user_input(prompt, default_value, value_type=str, allowed_values=None):
"""弹出窗口获取用户输入"""
root = Tk()
root.withdraw()
while True:
try:
value = simpledialog.askstring("输入参数", prompt + f"(默认:{default_value})")
if value is None or value.strip() == "":
return default_value
typed_value = value_type(value)
if allowed_values and typed_value not in allowed_values:
raise ValueError()
return typed_value
except ValueError:
messagebox.showerror("输入错误", f"请输入有效的值(允许: {allowed_values})")
def rotate_video(input_path, output_path, angle, threads):
"""调用 ffmpeg 设置 display_rotation,无损旋转"""
cmd = [
'ffmpeg',
'-threads', str(threads),
'-display_rotation:0', str(angle),
'-i', input_path,
'-c', 'copy',
output_path
]
try:
print(f"正在处理: {os.path.basename(input_path)}")
subprocess.run(cmd, check=True)
print(f"完成: {output_path}")
except subprocess.CalledProcessError as e:
print(f"处理失败: {input_path}")
print(e)
def process_videos(input_dir, output_dir, angle, threads):
"""处理所有视频文件"""
for filename in os.listdir(input_dir):
if filename.lower().endswith(SUPPORTED_EXTENSIONS):
input_path = os.path.join(input_dir, filename)
output_path = os.path.join(output_dir, filename)
rotate_video(input_path, output_path, angle, threads)
if __name__ == "__main__":
print("请选择输入目录:")
input_folder = select_directory("选择包含视频的输入文件夹")
if not input_folder:
print("未选择输入目录,程序退出。")
exit()
print("请选择输出目录:")
output_folder = select_directory("选择用于保存视频的输出文件夹")
if not output_folder:
print("未选择输出目录,程序退出。")
exit()
# 获取用户输入的旋转角度(符合人类直觉:顺时针旋转)
user_rotation = get_user_input(
"请输入顺时针旋转角度(可选:0, 90, 180, 270)",
default_value=90,
value_type=int,
allowed_values=[0, 90, 180, 270]
)
# 映射为 FFmpeg 所需的角度(绕 Y 轴顺时针 → 逆时针角度)
angle_map = {
0: 0,
90: 270,
180: 180,
270: 90
}
rotation_angle = angle_map[user_rotation]
# 获取线程数
threads = get_user_input(
"请输入要使用的 CPU 线程数(建议 1-8)",
default_value=2,
value_type=int
)
print(f"\n开始处理视频...\n输入目录: {input_folder}\n输出目录: {output_folder}\n旋转角度: {user_rotation}°(实际写入 {rotation_angle}°)\n线程数: {threads}\n")
process_videos(input_folder, output_folder, rotation_angle, threads)
print("全部处理完成!")
复制代码
作者:
wang1126
时间:
17 小时前
谢谢楼主分享
作者:
小龙飞
时间:
17 小时前
感谢您的分享!
作者:
ebaqiang
时间:
16 小时前
很不错,很nice
作者:
nie956
时间:
16 小时前
感谢分享
作者:
PCHH
时间:
16 小时前
谢谢分享
作者:
bj6688
时间:
16 小时前
感谢楼主分享.
作者:
win98se
时间:
15 小时前
谢谢分享
作者:
bilvnet
时间:
15 小时前
没有Python
作者:
smile_z
时间:
15 小时前
学习一下
作者:
好好学些
时间:
14 小时前
谢谢楼主分享
作者:
mouse723
时间:
14 小时前
驚為天人的神作,看了讓人熱血沸騰,感謝分享。
作者:
yzw92
时间:
14 小时前
谢谢楼主分享
作者:
hhcha
时间:
14 小时前
感谢分享!
作者:
ylac
时间:
14 小时前
谢谢楼主分享
作者:
a66
时间:
14 小时前
支持~
作者:
a272121742
时间:
13 小时前
感谢分享!
作者:
wn168cn@163.com
时间:
13 小时前
支持原创
作者:
liuyang2025
时间:
13 小时前
感谢开源
作者:
womwom
时间:
12 小时前
感谢分享!
作者:
yzszh64
时间:
12 小时前
感谢楼主了。
作者:
100308223
时间:
12 小时前
感谢分享!
作者:
kedion
时间:
12 小时前
速度倒是快,但是有些播放器是不支持的,还是重新编码比较保险
作者:
sulong
时间:
12 小时前
谢谢楼主分享
作者:
guong
时间:
12 小时前
谢谢分享了
作者:
fegr
时间:
10 小时前
感谢分享!
作者:
hmaaaa
时间:
10 小时前
感謝大大辛苦分享!感恩!^^
作者:
lnjxgx
时间:
9 小时前
感谢分享
作者:
董大
时间:
8 小时前
支持一下原创,谢谢楼主分享!!
作者:
2011yousu
时间:
5 小时前
谢谢楼主分享
作者:
handsome_xiang
时间:
5 小时前
感谢楼主分享!
作者:
renchmin
时间:
5 小时前
这个用ai写的批量视频快速无损旋转脚本确实很不错的
作者:
lnjxgx
时间:
1 小时前
感谢分享
欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/)
Powered by Discuz! X3.3