1.h265转码
subprocess.run(["ffmpeg", "-i", file_path, "-c:v", "libx265", "-preset", "medium", "-x265-params", "crf=25", dest_file_path], check=True)
其中subprocess.run()函数是Python 3.5及更高版本的新特性,用于运行外部命令
ffmpeg是要执行的外部命令
-
-i file_path指定输入文件的路径。
-
-c:v libx265指定使用libx265编解码器进行视频压缩。
-
-preset medium选项指定压缩速度和质量的预设级别为中等级别,根据需要可替换为其他预设。
-
ultrafast:快速编码,但文件大小较大。
-
superfast:比ultrafast略慢,但压缩@
def sub_frames(self, input_file, output_file):
# 构造FFmpeg命令
ffmpeg.input(input_file).output(output_file, vf='select=not(mod(n,5))', vsync='1').run()
ffmpeg:是一个音视频处理工具。
-
input(input_file):指定要转换的输入文件,input_file是要转换的文件路径。
-
output(output_file):指定转换的输出文件和其路径,output_file是输出文件的路径。
-
vf=’select=not(mod(n,5))’ 表示使用视频筛选器。vf指定视频筛选器选项,将每5个帧中的一帧选择出来。
-
vsync=’1′ 表示输出视频中的音频与视频同步, ‘0’ 意味着不同步
压缩效果
fpsdemo 目录下所有文件大小:122933532, 共0.11449077352881432G
sub_frame目录下所有文件大小:66270482,共0.061719195917248726G
---压缩率 = 46.09%
3.分辨率压缩
算法模型对于大于720P的视频文件,实际是按720P尺寸处理,因此对视频文件可进行分辨率压缩
def resolution_720P(self, input_file, output_file):
probe = ffmpeg.probe(input_file)
video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None)
if video_stream is None:
raise Exception('没有找到视频流.')
# 算法侧模型是按720P处理
if video_stream['width'] > 1280 and video_stream['height'] > 720:
resolution = "1280x720" # 720P分辨率
subprocess.run(["ffmpeg", "-i", input_file, "-vf", "scale={}".format(resolution), "-c:a", "copy", output_file], check=True)
else:
# subprocess.run(["ffmpeg", "-i", input_file, output_file], check=True)
FileMgr.copy_file(input_file, "sub_frame")
执行ffmpeg命令操作的效果
fpsdemo 目录下所有文件大小:122933532, 共0.11449077352881432G
sub_frame目录下所有文件大小:95149232,共0.08861462771892548G
---压缩率 = 22.60%
因FFmpeg转换处理的视频文件会进行压缩,因此文件大小通常会比原始视频文件的文件大小要小
大于720P的视频文件执行文件拷贝操作的效果
fpsdemo 目录下所有文件大小:122933532, 共0.11449077352881432G
sub_frame目录下所有文件大小:112876595,共0.10512452106922865G
---压缩率 = 8.18%
4.fps压缩
fps控制在20不影响算法效果,因此,fps参数设定为20
subprocess.run(["ffmpeg", "-i", file_path, "-r", "20", "-vcodec", "libx264", dest_file_path], check=True)
压缩效果
fps目录下所有文件大小:7538707398,共7.020968383178115G
fps_res目录下所有文件大小:7578761862, 共7.058272009715438G
---FPS超过25的视频采用20fps压缩方式的压缩率 = -0.53%
压缩效果较差
原文始发于微信公众号(ksnowlv):Python ffmpeg压缩mp4文件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/254647.html