小甲鱼的二师兄 发表于 2025-6-15 13:55:41

使用FFMPEG进行视频转码

使用FFMPEG进行视频转码

比如我们要将 4k 的视频压缩为 1080p,其它参数保持不变,命令如下:

ffmpeg -i input4k.mp4 -vf scale=1920:1080 -c:v libx264 -crf 18 -c:a copy output1080p.mp4
在这个命令中:


[*]ffmpeg 是调用 FFmpeg 程序的命令。
[*]-i input.mp4 指定输入文件,input4k.mp4 是你想要转换的 4k 视频文件。
[*]-vf scale=1920:1080 使用视频过滤器(Video Filter),将分辨率缩放到 1920x1080
[*]-c:v libx264 指定视频编码器为 H.264(x264),即输出视频采用 H.264 编码
[*]-crf 18 设置恒定质量系数(Constant Rate Factor),值越小质量越高(18为高画质,常用范围18-28)
[*]-c:a copy 音频流直接拷贝,不重新编码音频,保留原音频质量
[*]output1080p.mp4 输出文件名为 output1080p.mp4

批量处理

有时候,我们可能需要让计算机批量处理,那么大家可以直接使用这个 Python 脚本:

import os
import subprocess

# 获取当前目录下所有 mp4 文件
mp4_files =

for file in mp4_files:
    # 构建输出文件名
    name, ext = os.path.splitext(file)
    output_file = f"{name}_1080p{ext}"
   
    # 跳过已存在的输出文件
    if os.path.exists(output_file):
      print(f"已存在: {output_file},跳过。")
      continue
   
    # 构建 ffmpeg 命令
    cmd = [
      'ffmpeg',
      '-i', file,
      '-vf', 'scale=1920:1080',
      '-c:v', 'libx264',
      '-crf', '18',
      '-c:a', 'copy',
      output_file
    ]
   
    print(f"正在转换: {file} -> {output_file}")
    # 执行命令
    result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
   
    # 检查是否成功
    if result.returncode == 0:
      print(f"成功: {output_file}\n")
    else:
      print(f"失败: {output_file}\n错误信息: {result.stderr.decode('utf-8')}\n")

print("全部处理完毕。")

FishC 发表于 2025-6-15 13:59:32

下面是用Python批量转码视频的完整脚本,已补充缺失的`mp4_files`和`cmd`部分:

import os
import subprocess

# 获取当前目录下所有 mp4 文件
mp4_files =

for file in mp4_files:
    # 构建输出文件名
    name, ext = os.path.splitext(file)
    output_file = f"{name}_1080p{ext}"
   
    # 跳过已存在的输出文件
    if os.path.exists(output_file):
      print(f"已存在: {output_file},跳过。")
      continue
   
    # 构建 ffmpeg 命令
    cmd = [
      'ffmpeg',
      '-i', file,
      '-vf', 'scale=1920:1080',
      '-c:v', 'libx264',
      '-crf', '18',
      '-c:a', 'copy',
      output_file
    ]
   
    print(f"正在转换: {file} -> {output_file}")
    # 执行命令
    result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
   
    # 检查是否成功
    if result.returncode == 0:
      print(f"成功: {output_file}\n")
    else:
      print(f"失败: {output_file}\n错误信息: {result.stderr.decode('utf-8')}\n")

print("全部处理完毕。")

使用说明:
1. 保存为.py文件(如batch_convert.py)
2. 确保已安装FFmpeg并添加到系统PATH
3. 将需要转换的MP4文件放在同一目录
4. 运行脚本:在终端执行 python batch_convert.py

特性说明:
o 自动检测当前目录所有MP4文件
o 跳过已生成的1080p文件(文件名带_1080p后缀)
o 保留原始音频质量(不重新编码)
o 使用CRF18高画质预设
o 实时显示转换进度和错误信息

注意事项:
1. 视频缩放使用默认双线性插值,如需高质量缩放可修改参数:
   -vf 'scale=1920:1080:flags=lanczos'
2. 需要调整画质时,修改 -crf 18 的值(18-28,值越小画质越好)
3. 处理HDR视频时需添加色彩映射参数防止色偏
cmd = [
    'ffmpeg',
    '-i', file,
    '-vf', 'scale=1920:1080,zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=hable:desat=0,zscale=t=bt709:m=bt709:r=tv,format=yuv420p',
    '-c:v', 'libx264',
    '-crf', '18',
    '-c:a', 'copy',
    output_file
]

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

某一个“天” 发表于 2025-6-15 15:07:08

{:10_256:}

pyzyd 发表于 2025-6-15 15:21:15

{:10_257:}

kebi 发表于 2025-6-15 17:06:37

操作挺好~!我看的到是碎片,没有理解,没有思维架构·····{:10_266:}

快速收敛 发表于 2025-6-16 08:30:57

学习了
页: [1]
查看完整版本: 使用FFMPEG进行视频转码