视频压缩 - ffmpeg【python遍历】
- 汇总
# 1 和 3 同时修改
ffmpeg -i yasuo.mp4 -r 20 -s 428*240 out2.mp4
ffmpeg -i yasuo.mp4 -r 20 -vf scale=428:-1 out3.mp4 # 同上
# 1 和 4 同时修改
ffmpeg -i yasuo.mp4 -r 20 -b:v 300k out6.mp4
- 改变帧率【效果好】
ffmpeg -i Desktop/吉他.mp4 -r 20 Desktop/output1.mp4
-r 20:表示帧率设置为 20fps
- 指定文件大小【视频截取-不好】
ffmpeg -i Desktop/吉他.mp4 -fs 15MB Desktop/output1.mp4
-fs 20 : 表示文件大小最大值为15MB
- 改变分辨率【视频变模糊】
ffmpeg -i Desktop/1.mov -s vga Desktop/1.mp4
-s vga : 指定分辨率, vga 代表 600*480,也可以换成其他的值
ffmpeg -i 1.mp4 -strict -2 -vf scale=-1:480 4.mp4
-1表示按照比例缩放,可保证视屏不会变形
- 改变码率【不明显】
ffmpeg -i Desktop/1.mov -b:v 1.5M Desktop/1.mp4
-b:v 1.5M : 指定码率 -b:v :指定视频的码率 -b:a : 指定音频的码率1.5M:码率的值 1.5M 表示 1.5Mb/s
视频的原码率是 2.1Mb/s ,压缩为 1.5Mb/s
当码率设置为小于 1.5Mb/s 后视频的清晰度会降低很多
# 查看码率
ffmpeg -i Desktop/1.mov
https://zhuanlan.zhihu.com/p/255042580
- python遍历
import os
import subprocess
source_dir = '/path/to/source/directory'
output_dir = '/path/to/output/directory'
for root, dirs, files in os.walk(source_dir):
for file in files:
input_file = os.path.join(root, file)
if input_file.endswith('.mp4') or input_file.endswith('.mov'): # 只处理 MP4 和 MOV 文件
print(f'正在处理 {input_file}...')
output_file = os.path.join(output_dir, file)
subprocess.call(['ffmpeg', '-i', input_file, '-b:v', '1000k', '-fs', '10M', output_file]) # 执行 ffmpeg 命令
print(f'{input_file} 压缩完成!')
在上述代码中,我们通过 os.path.join 方法创建了输入和输出文件的完整路径,并使用 subprocess.call 方法执行了 ffmpeg 命令。在该命令中,我们指定了输入文件名、目标视频比特率和输出文件大小限制。
请注意,在这个示例中,我们假设您的所有视频文件都是 .mp4 或 .mov 格式。如果您需要处理其他类型的文件,请相应地更改 if input_file.endswith('.mp4') or input_file.endswith('.mov'): 行。
另外,subprocess.call 方法将阻塞主线程,直到 ffmpeg 命令完成。如果您需要同时处理多个视频文件,您可以考虑使用 subprocess.Popen 方法来启动异步进程。