[python]mp4极限压缩

import subprocess
import os

def convert_to_h266(input_file, output_file):
    # 检查输入文件是否存在
    if not os.path.exists(input_file):
        raise FileNotFoundError(f"Input file {input_file} does not exist.")
    
    # 调用ffmpeg命令进行转换
    ffmpeg_command = [
        'ffmpeg',
        '-i', input_file,          # 输入文件
        '-c:v', 'vvc',             # 视频编码器,H.266(又称为VVC)
        '-strict', '-2',           # 宽松模式以确保兼容性
        output_file                # 输出文件
    ]

    try:
        subprocess.run(ffmpeg_command, check=True)
        print(f"Conversion to H.266 successful: {output_file}")
    except subprocess.CalledProcessError as e:
        print(f"Error during conversion: {e}")

input_mp4 = "input_video.mp4"      # 替换为你的输入MP4文件路径
output_h266 = "output_video.mp4"  # 替换为你的输出H.266文件路径

convert_to_h266(input_mp4, output_h266)

多线程

import subprocess
import os

def convert_to_h266(input_file, output_file, crf, threads):
    """
    使用FFmpeg将MP4文件转换为H.266 (VVC)格式,并优化转换速度。
    
    :param input_file: 输入MP4文件路径
    :param output_file: 输出H.266文件路径
    :param crf: 压缩质量系数 (CRF, Constant Rate Factor),值越高压缩率越高,质量越低
    :param threads: 使用的线程数,可以根据CPU核心数调整
    """
    # 检查输入文件是否存在
    if not os.path.exists(input_file):
        raise FileNotFoundError(f"Input file {input_file} does not exist.")
    
    # 构造FFmpeg命令
    ffmpeg_command = [
        'ffmpeg',                    # 不需要提供完整路径,环境变量中已经配置
        '-i', input_file,            # 输入文件
        '-c:v', 'vvc',               # 使用VVC (H.266)编码器
        '-crf', str(crf),            # 设置压缩质量参数
        '-threads', str(threads),    # 指定使用的线程数
        '-preset', 'faster',         # 使用较快的预设(可选:ultrafast、superfast、fast、medium、slow、veryslow)
        '-strict', '-2',             # 宽松模式以确保兼容性
        output_file                  # 输出文件
    ]

    try:
        # 使用subprocess执行FFmpeg命令
        subprocess.run(ffmpeg_command, check=True)
        print(f"Conversion to H.266 successful: {output_file}")
    except subprocess.CalledProcessError as e:
        print(f"Error during conversion: {e}")

# 示例调用
input_mp4 = "input_video.mp4"  # 替换为你的输入MP4文件路径
output_h266 = "output_video.mp4"  # 替换为你的输出H.266文件路径

# 必须传入 crf 和 threads 的值
convert_to_h266(input_mp4, output_h266, crf=25, threads=8)

ffmpeg下载

https://github.com/BtbN/FFmpeg-Builds