|
|
import subprocess |
|
|
from glob import glob |
|
|
|
|
|
def convert_and_compress_video(input_video_path, output_video_path, crf=23, preset='medium'): |
|
|
""" |
|
|
使用ffmpeg转换并压缩视频 |
|
|
:param input_video_path: 输入视频文件路径 |
|
|
:param output_video_path: 输出压缩后视频文件路径 |
|
|
:param crf: Constant Rate Factor,值越小质量越好,但文件也越大,默认为23是一个平衡点 |
|
|
:param preset: 预设值,影响压缩速度和文件大小,如'ultrafast', 'fast', 'medium', 'slow', 'veryslow'等,默认'medium' |
|
|
""" |
|
|
|
|
|
if input_video_path.lower().endswith('.gif'): |
|
|
|
|
|
|
|
|
convert_cmd = f'ffmpeg -i "{input_video_path}" -vf "palettegen" -y palette.png' |
|
|
subprocess.run(convert_cmd, shell=True, check=True) |
|
|
convert_cmd = f'ffmpeg -i "{input_video_path}" -i palette.png -lavfi "paletteuse" -c:v libx264 -preset {preset} -crf {crf} -c:a copy "{output_video_path}"' |
|
|
else: |
|
|
|
|
|
convert_cmd = f'ffmpeg -i "{input_video_path}" -c:v libx264 -preset {preset} -crf {crf} -c:a copy "{output_video_path}"' |
|
|
|
|
|
|
|
|
try: |
|
|
subprocess.run(convert_cmd, shell=True, check=True) |
|
|
print(f"视频压缩完成,输出文件:{output_video_path}") |
|
|
except subprocess.CalledProcessError as e: |
|
|
print(f"视频压缩失败:{e}") |
|
|
|
|
|
video_paths = '/home3/Transformer' |
|
|
all_dirs = glob(video_paths+'/*') |
|
|
output_dirs = '/home3/robust/compress/Transformer_' |
|
|
|
|
|
for path in all_dirs: |
|
|
name = path.split('/')[-1] |
|
|
out_path = output_dirs + name.replace('.gif', '.mp4') if path.lower().endswith('.gif') else output_dirs + name |
|
|
print(name) |
|
|
convert_and_compress_video(path, out_path, crf=28) |
|
|
|