You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于输入分辨率使用ffmpeg自动调整视频尺寸

解决方案:批量适配不同分辨率的视频缩放脚本

我之前做过类似的批量视频处理任务,刚好能解决你的需求——针对不同分辨率的视频自动匹配缩放比例,下面是完整的实现思路和可直接用的脚本:

核心思路

  1. 遍历目标目录下的所有视频文件
  2. 用ffprobe(ffmpeg配套工具)提取每个视频的分辨率
  3. 判断分辨率类型:
    • 1280×720 → 缩放到640×360(等比例缩小一半)
    • 720×1280 → 缩放到360×640(同样等比例缩小一半)
  4. 调用ffmpeg执行缩放,同时保留原音频编码节省时间

完整Bash脚本

#!/bin/bash

# 目标视频目录(可以改成你需要的路径,比如./videos)
VIDEO_DIR="./"
# 输出目录(自动创建,避免覆盖原文件)
OUTPUT_DIR="./scaled_videos"
mkdir -p "$OUTPUT_DIR"

# 检查ffmpeg和ffprobe是否安装
if ! command -v ffmpeg &> /dev/null || ! command -v ffprobe &> /dev/null; then
    echo "错误:请先安装ffmpeg和ffprobe工具!"
    exit 1
fi

# 遍历目录下的常见视频格式(可根据需要添加,比如.mov .flv等)
for file in "$VIDEO_DIR"/*.{mp4,mkv,avi,webm}; do
    # 跳过不存在的文件(比如目录里没有avi格式时的空匹配)
    [ -f "$file" ] || continue

    # 获取文件名(不含路径)
    filename=$(basename "$file")
    # 输出文件路径
    output_file="$OUTPUT_DIR/scaled_$filename"

    # 用ffprobe提取视频分辨率,输出格式为"宽x高"(比如1280x720)
    resolution=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 "$file")
    # 拆分宽和高
    IFS=x read -r width height <<< "$resolution"

    # 根据分辨率执行不同的缩放逻辑
    if [ "$width" -eq 1280 ] && [ "$height" -eq 720 ]; then
        echo "处理文件:$filename → 缩放至640×360"
        ffmpeg -i "$file" -vf "scale=640:360" -c:a copy -y "$output_file"
    elif [ "$width" -eq 720 ] && [ "$height" -eq 1280 ]; then
        echo "处理文件:$filename → 缩放至360×640"
        ffmpeg -i "$file" -vf "scale=360:640" -c:a copy -y "$output_file"
    else
        echo "跳过文件:$filename,分辨率$resolution不在处理范围内"
    fi
done

echo "所有文件处理完成!输出文件在$OUTPUT_DIR目录下"

关键部分解释

  • ffprobe提取分辨率:ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 "$file"

    • -v error:只输出错误信息,屏蔽冗余日志
    • -select_streams v:0:选择第一个视频流(避免多视频流的情况)
    • -show_entries stream=width,height:只提取宽和高信息
    • -of csv=s=x:p=0:用x分隔宽高,且不输出表头
  • ffmpeg缩放命令:ffmpeg -i "$file" -vf "scale=640:360" -c:a copy -y "$output_file"

    • -vf "scale=W:H":视频滤镜,指定目标宽高
    • -c:a copy:直接复制原音频编码,不重新编码,大幅节省时间
    • -y:自动覆盖已存在的输出文件(如果不需要可以去掉)
  • 文件遍历与命名:用*.{mp4,mkv,avi,webm}匹配多种视频格式,输出文件加scaled_前缀并放到单独目录,避免覆盖原文件

注意事项

  1. 先测试:建议先拿一两个视频文件测试脚本,确认输出符合预期后再批量处理
  2. 自定义格式:如果你的视频是其他格式(比如.mov),可以在for file那行的括号里添加对应的后缀
  3. 编码参数:如果需要调整视频编码(比如用H.265压缩),可以在ffmpeg命令里添加-c:v libx265 -crf 28这类参数(crf值越小画质越好,文件越大)
  4. 空格处理:脚本里所有变量都用双引号包裹,避免文件名含空格时出错

内容的提问来源于stack exchange,提问作者Masoud92m

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:26:01