ffmpeg使用记录②

type
status
slug
title
category
tags
summary
date
password

🤖 Assistant

为了将视频压缩后输出为 720p 分辨率(通常是 1280x720),并确保文件大小小于 4GB,我们可以使用 Intel QSV 硬件加速编码(h264_qsvhevc_qsv)。我会提供详细的 FFmpeg 命令,并解释如何通过调整分辨率和比特率来控制文件大小,同时满足你的需求。

基本思路

  1. 调整分辨率到 720p:使用 FFmpeg 的缩放滤镜(vf scale=1280:720)将视频分辨率调整为 1280x720。
  1. 使用 QSV 硬件编码:通过 c:v h264_qsvc:v hevc_qsv 使用 Intel Quick Sync Video 硬件加速。
  1. 控制文件大小:通过设置视频比特率(b:v)和音频比特率(b:a),确保输出文件小于 4GB。
  1. 选择编码器:根据兼容性和压缩效率选择 H.264 或 H.265。

前提条件

  • 硬件支持:确保你的电脑有支持 QSV 的 Intel 集成显卡,并已安装最新驱动。
  • FFmpeg 支持:确认 FFmpeg 支持 QSV(运行 ffmpeg -encoders | findstr qsv 应显示 h264_qsv 和/或 hevc_qsv)。
  • 分辨率处理:如果输入视频分辨率低于 720p,可能会被拉伸(导致画质变差),可以选择保持原始分辨率或添加填充(下面会说明)。

压缩命令(输出 720p)

以下是两个命令,分别使用 h264_qsvhevc_qsv 编码,输出分辨率为 720p,并尽量将文件大小控制在 4GB 以内。由于视频时长未知,我先设置一个保守的比特率,之后可以根据实际情况调整。

使用 H.264 QSV 编码(更高兼容性)

使用 HEVC QSV 编码(更高压缩效率)

参数解释

  • i "E:\\path\\to\\input.video":输入文件路径,请替换为你的实际视频路径。
  • c:v h264_qsvc:v hevc_qsv:选择 QSV 硬件编码器。H.264 兼容性更好,H.265 压缩效率更高(文件更小)。
  • preset slower:QSV 的编码预设,slower 提供较好的画质和压缩效率。如果编码速度太慢,可以改为 mediumfast(画质略降)。
  • b:v 2500kb:v 1800k:视频比特率。720p 视频通常在 2-3 Mbps (H.264) 或 1.5-2 Mbps (H.265) 下能提供较好画质。我选择了保守值以确保文件大小小于 4GB。
    • H.264: 2500 kbps(2.5 Mbps)
    • H.265: 1800 kbps(1.8 Mbps)
  • vf scale=1280:720:将输出视频缩放到 720p 分辨率(1280x720)。如果输入视频的长宽比不是 16:9,可能会变形(下面会提供解决方法)。
  • c:a aac -b:a 128k:音频编码为 AAC,比特率 128 kbps,适合大多数用途。如果文件大小仍接近 4GB,可以降低到 96k。
  • y:如果输出文件已存在,自动覆盖。
  • 输出文件:使用 MP4 容器(.mp4),支持 H.264/H.265 和 AAC。

确保文件大小小于 4GB

由于视频时长未知,上述比特率是基于常见情况(如 1-2 小时视频)设置的。以下是确保文件大小小于 4GB 的方法:

方法 1:根据时长计算比特率

  1. 获取视频时长:运行以下命令查看输入视频时长(单位:秒): 输出示例:Duration: 01:30:00.00(即 5400 秒)。
    1. 计算比特率
        • 目标大小 = 4GB = 4,000,000 KB
        • 总比特率 = (4,000,000 × 8) / 时长(秒)
        • 视频比特率 = 总比特率 - 音频比特率(128 kbps)
        • 示例:时长 5400 秒,总比特率 = (4,000,000 × 8) / 5400 ≈ 5926 kbps,视频比特率 ≈ 5926 - 128 = 5798 kbps(约 5.8M)
        • 由于是 720p,实际比特率需求较低,通常 H.264 用 2.5-3M,H.265 用 1.5-2M 即可。
    1. 调整命令:如果计算出的比特率低于上述值,保持默认;如果高于 4GB 限制,说明时长很短,可以提高 b:v 以提升画质。

    方法 2:手动调整比特率

    • 如果输出文件大于 4GB,降低 b:v 值(如 H.264 降到 2000k,H.265 降到 1500k)。
    • 如果文件远小于 4GB 且画质不佳,提高 b:v 值(如 H.264 提到 3000k,H.265 提到 2000k)。

    方法 3:限制文件大小

    • 使用 fs 参数直接限制输出文件大小(单位:字节,4GB = 4294967296 字节): FFmpeg 会自动调整比特率以接近目标大小,但可能会导致画质波动。

      处理长宽比问题(避免变形)

      直接缩放到 1280x720 可能会导致视频变形(如果输入视频不是 16:9 比例)。以下是两种解决方法:

      方法 1:自动调整并填充黑边

      使用 scalepad 滤镜,确保视频内容不被拉伸,空白部分用黑边填充:
      • scale=1280:720:force_original_aspect_ratio=decrease:保持原始长宽比,缩小到不超过 1280x720。
      • pad=1280:720:(ow-iw)/2:(oh-ih)/2:在空白区域添加黑边,确保输出为 1280x720。

      方法 2:裁剪到 16:9

      如果不想要黑边,可以裁剪视频以匹配 16:9 比例:
      • crop=ih*16/9:ih:裁剪到 16:9 比例(可能会切掉部分画面)。
      • scale=1280:720:缩放到 720p。

      注意事项和故障排除

      1. QSV 不可用
          • 如果报错(如 "No device available for encoder"),说明 QSV 不可用。检查 Intel 驱动,或回退到软件编码:
        1. HEVC 支持
            • 如果硬件不支持 hevc_qsv(运行 ffmpeg -encoders | findstr qsv 确认),改用 h264_qsv
        1. 输入分辨率低于 720p
            • 如果输入视频分辨率低于 720p,拉伸会导致画质下降。可以用黑边填充(上述方法 1)或保持原始分辨率(去掉 vf scale 参数)。
        1. 文件大小超出 4GB
            • 降低 b:v(如 2000k 或 1500k)或音频比特率(b:a 96k)。
        1. 兼容性
            • 如果使用 hevc_qsv,确保播放设备支持 H.265;否则用 h264_qsv

        如何执行和后续步骤

        1. 替换路径:将命令中的输入和输出路径替换为你的实际文件路径。
        1. 选择编码器:优先尝试 hevc_qsv(更小文件),如果硬件不支持或播放设备不兼容,改用 h264_qsv
        1. 运行命令:在 PowerShell 或命令提示符中运行。
        1. 检查输出
            • 确认文件大小小于 4GB(右键文件 -> 属性)。
            • 用播放器(如 VLC)检查分辨率(应为 1280x720)和画质。
        1. 反馈结果:如果有问题(如文件过大、画质不佳、视频变形),告诉我输入视频的时长、分辨率和原始大小,我会进一步调整参数。
        如果你有其他需求(如特定长宽比、添加字幕)或硬件信息(Intel CPU 型号),请提供,我会优化方案! 😊
        Loading...

        没有找到文章