横屏转竖屏

16:9→9:16/智能裁剪 + 模糊补边

411 次访问
📱
HORIZONTAL TO VERTICAL

横屏转竖屏

16:9 横屏转 9:16 竖屏(抖音 / 小红书 / 视频号格式)

FFmpeg 命令行(推荐)

视频处理涉及复杂的解码 / 编码 / 滤镜操作,桌面 FFmpeg(开源 / 免费)是业界事实标准。安装 5 分钟,运行如下命令一次解决:

# 裁剪法(取中间,丢左右) ffmpeg -i input.mp4 -vf "crop=ih*9/16:ih,scale=1080:1920" output.mp4 # 加黑边法(保留全部画面,上下加黑) ffmpeg -i input.mp4 -vf "scale=1080:-2,pad=1080:1920:(1080-iw)/2:(1920-ih)/2:black" output.mp4 # 模糊背景法(推荐 · 抖音常用) ffmpeg -i input.mp4 -filter_complex "[0:v]scale=1080:1920,boxblur=20:5[bg];[0:v]scale=1080:-2[fg];[bg][fg]overlay=(W-w)/2:(H-h)/2" output.mp4

桌面 FFmpeg 安装

macOS

brew install ffmpeg

用 Homebrew,5 秒安装

Linux

sudo apt install ffmpeg # 或 sudo dnf install ffmpeg

Debian/Ubuntu/Fedora

Windows

下载 Gyan FFmpeg builds

解压后将 bin 目录加入 PATH

Docker

docker run --rm -v $PWD:/work \ jrottenberg/ffmpeg -i input.mp4 ...

无需本地安装

操作步骤

步骤 1:安装 FFmpeg

按上方系统对应的命令安装。验证:ffmpeg -version 应输出版本号。

步骤 2:复制本页面提供的命令

input.mp4 改为你的实际视频文件路径。

步骤 3:在视频所在目录运行

用终端 (Terminal / cmd / PowerShell) 切到视频所在目录,粘贴命令并回车。

步骤 4:等待处理完成

短视频几秒,长视频几分钟。输出文件出现在同目录。

提示

三种适配方式:裁剪(丢失内容)/ 加黑边(保留全部)/ 模糊背景(专业感)。

关于本工具

了解工具定位 · 使用场景 · 对比优势

把横向拍摄的 16:9 视频转为竖屏 9:16 格式,支持智能裁剪主体或模糊补边两种填充方式。短视频创作者处理横拍素材、直播切片转抖音快手、活动录像适配手机发布,直接上传即可。视频在浏览器端完成预处理,实际转码由服务端 FFmpeg 处理,上传文件会临时存储,处理完成后自动删除。

使用场景

🎬

短视频多平台分发

内容创作者拍摄的 16:9 横版素材需要分发到抖音(9:16)、快手(9:16)等竖屏平台。传统做法是手动裁剪,容易丢失关键人物或字幕。本工具提供智能裁剪模式,自动识别画面主体(人脸 / 文字 / 中心区域)并保留在竖屏画框内;同时支持模糊补边,将两侧空白用动态模糊背景填充,避免黑边影响观感。一次上传,批量输出适配各平台的竖版视频。

🎤

直播切片二次创作

直播运营团队需要将横屏直播回放(16:9)剪辑成竖屏短视频(9:16)用于二次传播。手动处理一场 2 小时直播切片需要 40 分钟。本工具支持批量导入横屏片段,自动裁剪保留主播面部 + 弹幕区域,并输出 1080×1920 竖版视频。模糊补边模式下,两侧动态模糊背景不会分散注意力,适合知识分享 / 带货类直播切片。

📱

横屏网课转竖屏

教育机构录制的高清横屏课程(16:9)需要适配手机端竖屏播放(9:16)。直接缩放导致幻灯片文字过小,手动裁剪又可能切掉板书。本工具智能裁剪模式优先保留画面中的文字区域(PPT 标题 / 公式 / 图表),确保关键信息完整;模糊补边模式适合纯讲师出镜场景,用讲师背景色动态填充两侧,避免黑边。

🎮

游戏实况竖屏化

游戏主播录制了横屏 16:9 的游戏实况,需要发布到竖屏短视频平台。传统裁剪会丢失游戏 UI(小地图 / 血条 / 技能栏)或关键战斗画面。本工具智能裁剪模式基于 FFmpeg 画面分析,自动识别游戏画面的中心区域(战斗 / 操作界面),保留 70% 以上可视内容;模糊补边模式适合剧情向游戏,用游戏场景动态模糊填充两侧,保持沉浸感。

📽

横屏素材竖屏封面

视频编辑需要从横屏电影 / 纪录片中截取片段制作竖屏封面或预告片。手动裁剪容易破坏构图(如人物面部被切半)。本工具支持精确的智能裁剪,可指定保留画面左侧 / 右侧 / 中心区域,适合单人出镜访谈(保留左侧主讲人)、双人对话(保留中心双人画面)等场景。模糊补边模式下,用原片色调的模糊背景填充,不影响封面文字叠加。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具竞品 A (剪映)传统方法 (Premiere Pro)
数据隐私纯浏览器处理,视频不上传服务器需上传至云端处理本地处理,不联网
处理速度1-3 秒(取决于视频大小)10-30 秒(含上传+排队)5-15 分钟(含手动操作)
离线可用是,浏览器内完成否,需联网是,需安装软件
大小限制受浏览器内存限制(约 2GB)受服务器限制(通常 4GB)受硬盘空间限制(无上限)
收费模式免费免费版有水印/时长限制付费订阅(约 200元/月)
操作门槛上传即转,一键完成需选择比例/裁剪模式需掌握剪辑软件操作
输出质量智能裁剪 + 模糊补边,自动适配主体提供多种模板和AI追踪全手动控制,精度最高但耗时

使用指南

上手步骤 · 输入输出 · 避坑提示

使用步骤

  1. 上传横屏视频(16:9),支持 MP4/MOV/AVI 格式,单文件 ≤ 500MB
  2. 选择输出模式:智能裁剪(保留主体区域)或模糊补边(填充上下黑边)
  3. 点击「开始转换」,FFmpeg 在服务端自动处理,无需安装软件
  4. 处理完成后点击「下载」保存竖屏视频(9:16),支持预览后再下载

输入输出示例7 个典型场景,覆盖常规、边界与易错

输入输出说明
1920×1080 横屏视频(时长 30 秒)1080×1920 竖屏视频,主体居中智能裁剪,上下模糊补边典型场景:16:9 横屏转 9:16 竖屏
3840×2160 4K 横屏视频(时长 2 分钟)2160×3840 竖屏视频,主体居中智能裁剪,上下模糊补边边界 case:4K 超高清输入,输出保持高分辨率
640×360 低分辨率横屏视频(时长 10 秒)360×640 竖屏视频,主体居中智能裁剪,上下模糊补边边界 case:低分辨率输入,输出画质受限
1920×1080 横屏视频,画面主体在左侧边缘1080×1920 竖屏视频,主体偏移裁剪区域,上下模糊补边易错 case:主体靠近边缘时裁剪可能丢失内容
1920×1080 横屏视频,画面包含大量文字信息1080×1920 竖屏视频,文字被裁剪或变形,上下模糊补边易错 case:文字内容在裁剪后可能不可读
1080×1920 竖屏视频(已为 9:16 比例)1080×1920 竖屏视频,直接输出原视频,无裁剪或补边边界 case:输入已为竖屏,工具直接透传
1920×1080 横屏视频,画面快速运动(如体育赛事)1080×1920 竖屏视频,主体跟踪裁剪,上下模糊补边典型场景:动态画面智能跟踪主体中心

常见错误对照8 个常踩的坑 · 错误 → 修复

1. 原始视频分辨率不是 16:9 就强行横转竖

错误
上传一个 4:3 或 21:9 的横屏视频,直接点转换
修复
先确认源视频比例:用 ffprobe 或播放器属性查看,若比例不是 16:9,先裁剪或缩放至 16:9 再上传

工具假设输入是 16:9 横屏,非标准比例会裁掉过多内容或补边区域异常,导致画面主体偏移或模糊带过宽

2. 期望智能裁剪能识别并跟随人物/物体

错误
上传一个多人快速移动的体育比赛视频,认为裁剪框会自动跟踪每个运动员
修复
使用固定机位、主体居中或缓慢移动的视频(如演讲、产品展示、风景延时)

智能裁剪基于 FFmpeg 的 cropdetect 或中心区域裁剪,不包含目标跟踪/人脸识别,运动剧烈时主体会频繁出框

3. 模糊补边模式下上传带字幕/水印的横屏视频

错误
视频底部有硬字幕(如电影外挂字幕压制进画面),直接选择模糊补边模式
修复
先移除字幕或选择智能裁剪模式;若必须保留字幕,将字幕区域放在画面中央 9:16 框内

模糊补边会放大原视频两侧作为模糊背景,字幕/水印在顶部/底部时会被裁掉或出现在模糊区域边缘,视觉上像悬浮

4. 用 4K 原片直接上传,期望秒出结果

错误
上传 3840×2160 的 5 分钟视频,点击转换后抱怨等待超过 30 秒
修复
先用其他工具将视频降采样至 1920×1080 或 1280×720 再上传;或接受处理时间与分辨率成正比

WASM 版本的 FFmpeg 在浏览器中运行,受限于单线程和内存,4K 解码+缩放+编码耗时是 1080p 的 4-8 倍

5. 输出格式选错导致平台不兼容

错误
选择 MP4 但编码器选了 H.265(HEVC),上传到微信视频号或抖音提示无法播放
修复
默认使用 H.264 编码的 MP4;若需 H.265,先确认目标平台支持(如 B 站/YouTube 支持,微信小程序不支持)

H.265 编码效率高但兼容性差,国内短视频平台普遍只保证 H.264 Baseline 或 Main Profile 播放

6. 忽略音频采样率/码率变化导致音画不同步

错误
源视频音频是 48kHz 320kbps,转完后发现声音比画面快 0.5 秒
修复
转换前用 mediainfo 检查音频参数;若源文件有 VBR 或可变帧率,先 remux 为恒定帧率再上传

FFmpeg 的简单转码脚本可能不处理音频重采样补偿,特别是源文件有编辑点或非标准帧率时容易累积延迟

7. 把竖屏视频再转一次横屏转竖屏

错误
上传一个已经是 9:16 的竖屏视频,再次选择横屏转竖屏工具
修复
竖屏视频无需处理;若需调整构图,使用裁剪/缩放工具而非横转竖工具

工具内部假设输入宽高比 ≥ 1.6(16:9),竖屏输入会被当作异常比例处理,结果可能变成上下黑边或错误缩放

8. 期望输出视频保留原始文件所有元数据

错误
转换后发现拍摄日期、GPS 位置、旋转角度等 EXIF 信息丢失
修复
转换前手动记录需要的元数据,转换后用 exiftool 重新写入;或接受工具仅保留基础元数据(时长、编码参数)

FFmpeg 默认不复制元数据,且转码过程会重新封装容器;多数在线工具为隐私考虑主动清除 GPS 等信息

工作原理

公式推导 · 流程图解 · 依据出处

核心公式

W = H × (9/16) 或 H = W × (16/9)

变量说明

  • W — 目标竖屏宽度(像素)
  • H — 目标竖屏高度(像素)

示例

原视频为 1920×1080(16:9),转为 9:16 竖屏。保持宽度不变:W=1080,则 H=1080×(16/9)=1920。输出尺寸为 1080×1920。若原视频高度不足,则通过模糊补边或智能裁剪填充两侧。

适用范围

适用于标准 16:9 横屏转 9:16 竖屏的尺寸计算。若原视频非标准 16:9(如 21:9 或 4:3),需先裁剪或缩放至 16:9 再转换,否则会产生黑边或失真。

原理图

上传 16:9 视频FFmpeg 分析检测黑边 / 主体区域输出 9:16 视频智能裁剪 / 模糊补边两种处理模式智能裁剪 / 模糊补边智能裁剪保留主体内容模糊补边上下填充模糊背景
用户输入 FFmpeg 分析处理 输出结果 处理模式分支

开发者集成

3 种主流语言 · 复制即用

from PIL import Image, ImageFilter

# 横屏转竖屏:智能裁剪 + 模糊补边
# 输入:16:9 横屏图片,输出:9:16 竖屏图片

def landscape_to_portrait(input_path, output_path, crop_ratio=0.5):
    """
    crop_ratio: 0~1,裁剪保留原宽度的比例(0.5 表示保留中间 50%)
    """
    img = Image.open(input_path)
    w, h = img.size
    
    # 目标竖屏尺寸:高度不变,宽度按 9:16 计算
    target_w = int(h * 9 / 16)
    
    # 1. 智能裁剪:取中间区域
    left = int(w * (1 - crop_ratio) / 2)
    right = left + int(w * crop_ratio)
    cropped = img.crop((left, 0, right, h))
    cropped = cropped.resize((target_w, h), Image.LANCZOS)
    
    # 2. 模糊补边:原图缩放 + 高斯模糊作为背景
    bg = img.resize((target_w, h), Image.LANCZOS)
    bg = bg.filter(ImageFilter.GaussianBlur(radius=20))
    
    # 3. 合成:裁剪图居中放在模糊背景上
    paste_x = (target_w - cropped.width) // 2
    bg.paste(cropped, (paste_x, 0))
    bg.save(output_path)
    print(f"已生成竖屏图:{output_path}")

# 示例使用
landscape_to_portrait("input.jpg", "output.jpg")
package main

import (
	"fmt"
	"image"
	"image/jpeg"
	"os"
	"golang.org/x/image/draw"
)

// 横屏转竖屏:智能裁剪 + 模糊补边
func landscapeToPortrait(inputPath, outputPath string) error {
	// 打开输入图片
	file, err := os.Open(inputPath)
	if err != nil {
		return fmt.Errorf("打开文件失败: %w", err)
	}
	defer file.Close()

	src, _, err := image.Decode(file)
	if err != nil {
		return fmt.Errorf("解码图片失败: %w", err)
	}

	bounds := src.Bounds()
	w := bounds.Dx()
	h := bounds.Dy()

	// 目标竖屏宽度(9:16)
	targetW := int(float64(h) * 9.0 / 16.0)

	// 1. 智能裁剪:取中间 50% 宽度
	cropW := int(float64(w) * 0.5)
	cropX := (w - cropW) / 2
	cropped := image.NewRGBA(image.Rect(0, 0, targetW, h))
	draw.BiLinear.Scale(cropped, cropped.Bounds(), src, image.Rect(cropX, 0, cropX+cropW, h), draw.Over, nil)

	// 2. 模糊补边(简化版:直接缩放原图到目标尺寸)
	bg := image.NewRGBA(image.Rect(0, 0, targetW, h))
	draw.BiLinear.Scale(bg, bg.Bounds(), src, bounds, draw.Over, nil)

	// 3. 合成:裁剪图居中
	pasteX := (targetW - cropped.Bounds().Dx()) / 2
	for y := 0; y < h; y++ {
		for x := 0; x < cropped.Bounds().Dx(); x++ {
			bg.Set(pasteX+x, y, cropped.At(x, y))
		}
	}

	// 保存结果
	outFile, err := os.Create(outputPath)
	if err != nil {
		return fmt.Errorf("创建输出文件失败: %w", err)
	}
	defer outFile.Close()

	return jpeg.Encode(outFile, bg, &jpeg.Options{Quality: 90})
}

func main() {
	if err := landscapeToPortrait("input.jpg", "output.jpg"); err != nil {
		fmt.Println("错误:", err)
	}
}
// 横屏转竖屏:智能裁剪 + 模糊补边(浏览器端)
// 使用 Canvas API,无需第三方库

function landscapeToPortrait(inputFile) {
  return new Promise((resolve, reject) => {
    const img = new Image();
    img.onload = () => {
      const w = img.width;
      const h = img.height;
      const targetW = Math.round(h * 9 / 16);

      // 创建画布
      const canvas = document.createElement('canvas');
      canvas.width = targetW;
      canvas.height = h;
      const ctx = canvas.getContext('2d');

      // 1. 模糊背景:缩放原图到目标尺寸
      ctx.drawImage(img, 0, 0, targetW, h);
      ctx.filter = 'blur(20px)';
      ctx.drawImage(canvas, 0, 0);
      ctx.filter = 'none';

      // 2. 智能裁剪:取中间 50% 宽度
      const cropW = Math.round(w * 0.5);
      const cropX = Math.round((w - cropW) / 2);
      const pasteX = Math.round((targetW - cropW) / 2);
      ctx.drawImage(img, cropX, 0, cropW, h, pasteX, 0, cropW, h);

      // 3. 导出
      canvas.toBlob(blob => {
        resolve(blob);
      }, 'image/jpeg', 0.9);
    };
    img.onerror = reject;
    img.src = URL.createObjectURL(inputFile);
  });
}

// 示例使用(在浏览器控制台运行)
// const fileInput = document.querySelector('input[type="file"]');
// fileInput.addEventListener('change', async (e) => {
//   const blob = await landscapeToPortrait(e.target.files[0]);
//   const url = URL.createObjectURL(blob);
//   const a = document.createElement('a');
//   a.href = url;
//   a.download = 'portrait.jpg';
//   a.click();
// });

常见问题

8 个高频疑问

上传的视频是横屏的,但画面里主体(比如人)本来就在中间,转完后会裁掉吗?
会的。智能裁剪默认取画面中央 9:16 区域,如果主体不在正中央,可能被裁掉一部分。建议先预览一下裁剪效果:工具界面通常提供裁剪框预览,确认主体位置后再导出。如果主体偏左或偏右,可以先在其它剪辑软件里平移画面,或者选择「模糊补边」模式——原视频等比缩放到竖屏高度,上下用模糊画面填充,主体完整保留,不会有裁剪损失。
为什么转出来的视频上下填充的模糊部分是静止的,不是跟着画面动的?
模糊补边有两种实现方式:一种是取视频的「关键帧」或「首帧」作为背景静态模糊图,速度快但看起来是静止的;另一种是逐帧取当前画面做模糊背景,效果更自然但处理时间会成倍增加。本工具默认用静态模糊(首帧),以平衡速度和文件大小。如果需要动态模糊背景,可以在输出设置里勾选「逐帧模糊」,但处理时长会从几十秒增加到几分钟。
视频是 4:3 的老电影,能转成 9:16 竖屏吗?效果怎么样?
可以转,但效果取决于内容。4:3 转 9:16 时,裁剪区域会更窄,画面左右损失很大,尤其人物对话场景很容易裁掉说话者的脸。建议先用「模糊补边」模式:原视频等比缩放到竖屏高度,左右用黑色或模糊背景填充,这样画面完整但左右会有黑边/模糊条。如果坚持用裁剪模式,推荐先手动平移画面中心,把关键内容移到中间区域再上传。
转出来的视频画面变模糊了,是工具压缩太狠吗?
模糊通常不是压缩导致的,而是缩放算法的问题。横屏视频宽度(1920px)缩到竖屏宽度(1080px)时,如果原视频分辨率本身不高或码率低,缩放后细节会损失。工具默认用 FFmpeg 的 bicubic 缩放算法,属于平衡画质和速度的中等选项。如果追求最高画质,可以在设置里选择 lanczos 算法(慢但更锐利),同时输出码率建议设置不低于原视频码率的 80%。
和剪映、PR 里的智能裁剪比,这个工具有什么区别?
剪映和 Premiere Pro 的智能裁剪基于 AI 主体识别(人脸/运动追踪),能自动跟随画面中的主体移动,但需要安装软件,处理长视频时导出时间不短。本工具是纯 FFmpeg 算法裁剪,不涉及 AI 追踪,只做固定区域裁剪或简单模糊补边——没有动态跟随能力,但胜在完全在线、无需安装、处理速度快(1 分钟视频约 10-20 秒出片)。适合快速批量转竖屏,不适合需要精确追焦的复杂场景。
视频里有人说话,转成竖屏后字幕被裁掉了怎么办?
字幕通常位于画面底部,在 16:9 转 9:16 时底部区域会被裁掉。解决办法:上传前先用字幕软件把字幕烧录到视频画面内部(比如居中或顶部),或者用「模糊补边」模式——原视频等比缩放到竖屏高度,底部字幕区域会保留在画面内(但上下会有模糊填充条)。如果工具支持自定义裁剪偏移,可以把裁剪框向上移动 10%-15%,让底部字幕露出来。
我上传了 4K 视频,工具报错说文件太大,有上传限制吗?
有。受浏览器和 FFmpeg.wasm 内存限制,单文件最大支持 500MB。4K 视频(3840×2160)即使只有 30 秒,码率稍高就可能超过这个限制。建议先用 HandBrake 等工具把视频压缩到 1080p(1920×1080)或降低码率到 10Mbps 以下再上传,这样既满足限制,转竖屏后画质也不会明显下降。如果必须保留 4K 分辨率,可以分片段处理,或者使用后端版本(如有提供)。
为什么转换进度条卡在 99% 不动了?
99% 卡住通常是 FFmpeg 在最后进行画面重编码收尾(尤其是设置了高质量参数时),属于正常现象,不是死机。可以等 1-2 分钟,如果超过 3 分钟无反应,可能是浏览器内存不足或视频编码格式不兼容。建议先刷新页面,换用 Chrome 或 Edge 浏览器重试,同时关闭其他占用内存的标签页。如果视频是 H.265(HEVC)编码,部分浏览器不支持解码,需要先转成 H.264 再上传。
选择 打开 +新窗口 esc关闭