├── single_video_cut.py ├── batch_video_cut.py └── README.md /single_video_cut.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import subprocess 3 | import datetime 4 | import sys 5 | 6 | # 检查参数是否正确 7 | if len(sys.argv) != 2: 8 | print("Usage: python script.py input_video_path") 9 | sys.exit(1) 10 | 11 | # 获取输入视频文件路径 12 | input_video_path = sys.argv[1] 13 | 14 | # 构建输出视频文件路径 15 | output_video_name = "output_" + datetime.datetime.now().strftime("%Y%m%d_%H%M%S") + ".mp4" 16 | output_video_path = output_video_name 17 | 18 | # 构建 ffmpeg 命令行 19 | ffmpeg_command = [ 20 | "ffmpeg", "-hide_banner", "-y", "-i", input_video_path, 21 | "-vf", "eq=contrast=1.06:brightness=0.03:saturation=1.06:brightness=0.01:contrast=1.01:gamma=1.01,crop=iw*0.99:ih*0.99:ow-iw:oh-ih,unsharp,trim=start_frame=6,hflip,hqdn3d,setpts=PTS/1.06,drawtext=text='@puppylove.top':x=w-mod(t*30\,w+tw):y=h-th-168:fontsize=36:fontcolor=white", 22 | "-b:v", "20000k", "-bufsize", "20000k", "-maxrate", "20000k", "-vcodec", "libx264", "-acodec", "aac", 23 | "-shortest", "-force_key_frames", "expr:gte(t,n_forced*0.99)", "-r", "60", "-s", "1080x1920", "-preset", "slow", 24 | "-metadata", "title=My Title", output_video_path 25 | ] 26 | 27 | # 执行 ffmpeg 命令行 28 | subprocess.run(ffmpeg_command) 29 | -------------------------------------------------------------------------------- /batch_video_cut.py: -------------------------------------------------------------------------------- 1 | import os 2 | import subprocess 3 | import datetime 4 | 5 | # 输入文件夹和输出文件夹路径 6 | input_folder = "input" 7 | output_folder = "output" 8 | 9 | # 确保输出文件夹存在 10 | os.makedirs(output_folder, exist_ok=True) 11 | 12 | # 获取输入文件夹中的所有文件 13 | input_files = [file for file in os.listdir(input_folder) if os.path.isfile(os.path.join(input_folder, file))] 14 | 15 | # 循环处理每个视频文件 16 | for input_file in input_files: 17 | # 构建输入和输出文件路径 18 | input_path = os.path.join(input_folder, input_file) 19 | output_file_name = "output_" + os.path.splitext(input_file)[0] + ".mp4" 20 | output_path = os.path.join(output_folder, output_file_name) 21 | 22 | # 构建 ffmpeg 命令行 23 | ffmpeg_command = [ 24 | "ffmpeg", "-hide_banner", "-y", "-i", input_path, 25 | "-vf", "eq=contrast=1.06:brightness=0.03:saturation=1.06:brightness=0.01:contrast=1.01:gamma=1.01,crop=iw*0.99:ih*0.99:ow-iw:oh-ih,unsharp,trim=start_frame=6,hflip,hqdn3d,setpts=PTS/1.06,drawtext=text='@test':x=w-mod(t*30\,w+tw):y=h-th-168:fontsize=36:fontcolor=white", 26 | "-b:v", "20000k", "-bufsize", "20000k", "-maxrate", "20000k", "-vcodec", "libx264", "-acodec", "aac", 27 | "-shortest", "-force_key_frames", "expr:gte(t,n_forced*0.99)", "-r", "60", "-s", "1080x1920", "-preset", "slow", 28 | "-metadata", "title=My Title", output_path 29 | ] 30 | 31 | # 执行 ffmpeg 命令行 32 | subprocess.run(ffmpeg_command) 33 | 34 | print("All videos processed successfully.") 35 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # single_video_cut.py 单视频剪辑 2 | 适用于抖音、Tiktok等,1080x1920(可自行修改参数适配不同规格的视频)。 3 | 4 | # 使用方法 5 | 命令语法: 6 | ```sh 7 | python3 video_cut.py 视频文件名 8 | ``` 9 | 10 | 命令行示例: 11 | ```sh 12 | python3 video_cut.py 01.mp4 13 | ``` 14 | 15 | # 参数详解 16 | 17 | -hide_banner 命令行执行时隐藏Banner,简化输出信息\ 18 | -vf 视频滤镜\ 19 | hqdn3d 画质增强\ 20 | eq=contrast=1.06 对比度增加到 1.06 倍\ 21 | brightness=0.03 亮度提升0.03\ 22 | saturation=1.06 饱和度101%\ 23 | contrast=1.01 白色(Whites)\ 24 | brightness=0.1 黑色(Blacks)\ 25 | gamma=1.5 阴影(Shadows)\ 26 | hflip 水印翻转\ 27 | crop=iw*0.99:ih*0.99:ow-iw:oh-ih 右下角 99% 的内容,裁剪掉了左上角的部分\ 28 | unsharp 锐化,使用默认参数\ 29 | trim=start_frame=6 掐头,从第6帧开始\ 30 | drawtext=text='@test':x=168:y=1680:fontsize=32:fontcolor=white" 插入字幕\ 31 | -r 60 输出帧率\ 32 | -y 直接覆盖输出同名文件\ 33 | -b:v 20000k 输出视频码率\ 34 | -bufsize 20000k 输出Buffer缓存,和-b:v搭配用,让码率更稳定\ 35 | -maxrate 20000k 最大码率\ 36 | -force_key_frames "expr:gte(t,n_forced\*0.99)" 每间隔0.99秒 强制关键帧\ 37 | -s 1080x1920 输出视频尺寸\ 38 | -preset slow 编码速度和质量\ 39 | -vcodec libx264 视频使用Libx264编码\ 40 | -acodec aac 音频使用AAC编码\ 41 | -an 输出不带音频【不需要声音时使用这个参数】\ 42 | -metadata title="My Title" 设置视频文件头信息:Title\ 43 | -shortest 音视频适配,根据短的截断\ 44 | -filter:v "setpts=1.03*PTS" 变速\ 45 | output_$(date +"%Y%m%d_%H%M%S").mp4 输出文件名:output_年月日_时分钟秒.mp4 46 | 47 | # ffmpeg命令行 48 | 这段Python代码,也可以直接使用ffmpeg命令行实现同样的功能,命令行: 49 | ```sh 50 | ffmpeg -hide_banner -y -i 08.mp4 -vf "eq=contrast=1.06:brightness=0.03:saturation=1.06:brightness=0.01:contrast=1.01:gamma=1.01,crop=iw\*0.99:ih\*0.99:ow-iw:oh-ih,unsharp,trim=start_frame=6,hflip,hqdn3d,setpts=PTS/1.06,drawtext=text='@test':x=w-mod(t\*30\\,w+tw):y=h-th-168:fontsize=36:fontcolor=white" -b:v 20000k -bufsize 20000k -maxrate 20000k -vcodec libx264 -acodec aac -shortest -force_key_frames "expr:gte(t,n_forced*0.99)" -r 60 -s 1080x1920 -preset slow -metadata title="My Title" output_$(date +"%Y%m%d_%H%M%S").mp4 51 | ``` 52 | # batch_video_cut.py 多视频剪辑 53 | 在batch_video_cut.py所在位置创建文件夹input,将需要剪辑的视频放到input文件夹中。\ 54 | 运行batch_video_cut.py,会批量剪辑input文件夹中所有视频,保存在output文件夹。 55 | 56 | # 声明 57 | 个人学习总结,可应用于任何用途。\ 58 | 联系:lesishu@qq.com 59 | --------------------------------------------------------------------------------