JSON如何调整视频比例?原理、方法与实战指南
在视频处理领域,"调整视频比例"(如从16:9转为9:16,或修正畸变的4:3)是一个常见需求,而JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,本身并不直接"修改"视频文件,但它可以通过描述视频参数、控制处理逻辑、传递配置信息等方式,成为视频比例调整流程中的"指挥官",本文将详细拆解JSON在视频比例调整中的角色、具体方法及实战应用。
先明确:JSON不直接改视频,但它能"指挥"改视频
首先要明确一个核心概念:JSON是一种数据存储格式,像一张"说明书"或"任务清单",它本身无法直接操作视频像素或改变视频宽高比,真正的视频比例调整需要依赖视频处理工具(如FFmpeg、OpenCV、Adobe Premiere Pro等),而JSON的作用是向这些工具传递"如何调整"的指令——比如告诉工具"目标比例是9:16""用裁剪方式还是缩放方式""保留哪些区域"等。
核心原理:JSON通过参数定义视频比例调整规则
视频比例调整的本质是修改视频的分辨率(宽度和高度),同时可能涉及内容裁剪、缩放、填充(黑边)等操作,JSON通过定义这些操作的具体参数,让视频处理工具执行比例调整,以下是JSON中常见的参数字段及含义:
基础比例参数:定义"输入"与"输出"
input_resolution:输入视频的原始分辨率(宽×高),如[1920, 1080](1920×1080,16:9)。output_resolution:目标分辨率(宽×高),如[1080, 1920](1080×1920,9:16,抖音竖屏比例)。input_aspect_ratio:输入视频的原始宽高比(如"16:9"),可由input_resolution计算得出,通常JSON中可不存,但保留可提升可读性。output_aspect_ratio:目标宽高比(如"9:16"),直接定义调整后的比例。
调整方式参数:决定"怎么改"
视频比例调整的核心是解决"原始比例≠目标比例"时的内容处理问题,JSON需明确调整方式,常见有以下几种:
mode:调整模式,可选值:"crop"(裁剪):从原始视频中裁剪出符合目标比例的区域(适合保留核心内容,可能损失边缘部分)。"scale"(缩放):将视频等比缩放至目标比例,若比例不匹配则留黑边(适合完整保留内容,但可能影响构图)。"stretch"(拉伸):强制拉伸视频至目标比例(会变形,仅适用于特殊场景,如文字类视频)。"fit"(适应):缩放视频至完全包含在目标区域内,留黑边(类似scale,但更灵活控制缩放逻辑)。
裁剪/缩放细节参数:控制"调整范围"
若选择"crop"或"scale",JSON需进一步定义调整的细节:
crop_params(裁剪参数):x/y:裁剪起始坐标(原始视频中的左上角位置)。width/height:裁剪区域的宽高(需满足width/height = output_aspect_ratio)。
示例:{"x": 440, "y": 0, "width": 1040, "height": 1080},表示从1920×1080视频中裁剪出1040×1080区域(16:9→9:16的常见裁剪方式)。
scale_params(缩放参数):width/height:缩放后的目标尺寸(需满足width/height = output_aspect_ratio)。keep_aspect_ratio:是否保持原始宽高比(通常为true,避免变形)。
高级参数:优化视觉效果
padding(填充):当使用"scale"或"fit"模式时,可定义黑边的颜色(如{"color": "#000000", "top": 0, "bottom": 0, "left": 0, "right": 0})。focus_area(重点区域):指定视频中的核心区域(如人脸、主体),裁剪时优先保留(需配合AI工具实现,JSON中可标记区域坐标,如{"x": 960, "y": 540, "radius": 200})。
实战案例:用JSON控制FFmpeg调整视频比例
FFmpeg是开源的音视频处理工具,支持通过命令行参数读取JSON配置文件,实现自动化比例调整,以下是具体步骤:
案例1:将16:9横屏视频裁剪为9:16竖屏(适合抖音/快手)
第一步:创建JSON配置文件(config_crop.json)
{
"input_resolution": [1920, 1080],
"output_resolution": [1080, 1920],
"output_aspect_ratio": "9:16",
"mode": "crop",
"crop_params": {
"x": 440,
"y": 0,
"width": 1080,
"height": 1920
},
"output_format": "mp4",
"video_codec": "libx264",
"audio_codec": "aac"
}
说明:
- 原始视频1920×1080(16:9),目标1080×1920(9:16)。
- 裁剪区域:从x=440(左右各裁剪440px,1920-880=1080)开始,裁剪1080×1920区域,保留中间主体内容。
第二步:用FFmpeg读取JSON并执行调整
ffmpeg -i input.mp4 -filter_complex "crop=1080:1920:440:0" -c:v libx264 -c:a aac output_crop.mp4
若想直接从JSON读取参数(需FFmpeg 4.0+支持-filter_complex_script或结合脚本解析),可写一个Shell脚本解析JSON并生成FFmpeg命令:
#!/bin/bash
# 解析JSON文件中的参数
INPUT=$(jq -r '.input_file' config_crop.json)
OUTPUT=$(jq -r '.output_file' config_crop.json)
CROP_WIDTH=$(jq -r '.crop_params.width' config_crop.json)
CROP_HEIGHT=$(jq -r '.crop_params.height' config_crop.json)
CROP_X=$(jq -r '.crop_params.x' config_crop.json)
CROP_Y=$(jq -r '.crop_params.y' config_crop.json)
# 执行FFmpeg命令
ffmpeg -i "$INPUT" -filter_complex "crop=$CROP_WIDTH:$CROP_HEIGHT:$CROP_X:$CROP_Y" \
-c:v libx264 -c:a aac "$OUTPUT"
案例2:将4:3老视频缩放为16:9并保留黑边(适合怀旧内容)
JSON配置文件(config_scale.json)
{
"input_resolution": [640, 480],
"output_resolution": [1280, 720],
"output_aspect_ratio": "16:9",
"mode": "scale",
"scale_params": {
"width": 1280,
"height": 720,
"keep_aspect_ratio": true
},
"padding": {
"color": "#000000",
"top": 0,
"bottom": 0,
"left": 0,
"right": 0
},
"output_format": "mp4"
}
说明:
- 原始视频640×480(4:3),目标1280×720(16:9)。
- 缩放模式:保持原始比例缩放至宽度1280,高度按比例缩放(480×(1280/640)=960),因此上下会留黑边(720-960=-240,实际需通过
pad滤镜添加黑边)。
FFmpeg命令
ffmpeg -i input_4by3.mp4 -vf "scale=1280:-1,pad=1280:720:(ow-iw)/2:(oh-ih)/2" -c:v libx264 output_16by9.mp4
scale=1280:-1:宽度固定1280,高度按原始比例自动计算(-1表示自适应)。pad=1280:720:(ow-iw)/2:(oh-ih)/2:将缩放后的视频填充至1280×720,黑边居中。



还没有评论,来说两句吧...