视频旋转翻转

90/180/270/镜像

409 次访问
🔄
VIDEO ROTATE/FLIP

视频旋转翻转

90/180/270 度旋转 + 水平 / 垂直翻转

FFmpeg 命令行(推荐)

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

# 顺时针 90° ffmpeg -i input.mp4 -vf "transpose=1" -c:a copy output.mp4 # 顺时针 180° ffmpeg -i input.mp4 -vf "transpose=2,transpose=2" output.mp4 # 顺时针 270°(逆时针 90°) ffmpeg -i input.mp4 -vf "transpose=2" output.mp4 # 水平翻转(镜像) ffmpeg -i input.mp4 -vf "hflip" -c:a copy output.mp4 # 垂直翻转 ffmpeg -i input.mp4 -vf "vflip" -c:a copy 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:等待处理完成

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

提示

关于本工具

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

将视频画面顺时针旋转 90°、180°、270° 或水平镜像翻转。视频创作者调整竖屏横屏、主播修正摄像头方向、剪辑师统一素材角度,无需重新拍摄。视频通过 FFmpeg 在服务端处理,上传后自动旋转,处理完毕即可下载。

使用场景

📱

竖屏视频修复

用手机拍摄的竖屏视频(1080×1920)上传到电脑播放器或剪辑软件后,有时会被强制横屏显示(1920×1080),人物被压扁或两侧出现黑边。使用本工具的 90°/270° 旋转功能,一次点击即可将视频恢复为正确的竖屏方向,确保在手机相册、微信朋友圈或抖音快手等平台正常显示,无需重拍。

🎬

GoPro 倒置素材

运动相机(如 GoPro、DJI Action)在车顶、头盔或自拍杆上倒置安装时,录制的视频画面是颠倒的。传统做法是在剪辑软件里手动旋转关键帧,效率低且容易出错。本工具提供 180° 旋转功能,批量上传倒置素材后统一旋转,几秒内得到正立画面,适合户外运动博主和 Vlog 创作者快速处理大量素材。

🖼️

镜像自拍调整

许多手机前置摄像头默认开启镜像模式,拍出的视频中文字、衣服上的 logo、手势方向都是左右相反的。用本工具的「镜像翻转」功能,上传自拍视频后一键将画面水平翻转,恢复真实方向,适合美妆教程、手势教学、产品展示等需要画面与实际一致的内容创作。

🔄

多角度画面统一

在拍摄多机位访谈或课程时,不同机位的摄像机安装方向不同(正面机位正常、侧面机位可能旋转了 90°),导致素材方向不统一,剪辑时需逐段调整。使用本工具将所有素材统一旋转到同一方向(如全部转为 0°),再导入剪辑软件,省去逐个片段旋转的时间,适合教育机构、播客团队等高频多机位拍摄场景。

📹

监控录像方向校正

部分安防摄像头因安装角度限制,录制的画面是倒置或侧向的(如天花板吊装、墙面侧装)。查看回放时需歪头或旋转显示器,极不方便。使用本工具的 180° 或 90° 旋转功能,将监控视频片段校正为正常观看方向,便于快速回放、截图取证或分享给物业/警方,适合家庭安防和商铺监控用户。

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

维度本工具竞品 A(Kapwing)传统方法(Premiere Pro)
数据隐私纯浏览器 WASM 处理,视频不上传服务器上传到 Kapwing 服务器处理视频文件保存在本地电脑
处理速度1 秒内完成(本地计算)5-15 秒(上传+服务器排队+处理+下载)30 秒-2 分钟(导入项目+渲染导出)
离线可用完全离线(浏览器内 WASM)必须联网必须安装软件,可离线使用
文件大小限制受浏览器内存限制(约 2GB)免费版 250MB,Pro 版 1GB无限制(取决于硬盘)
收费免费,无隐藏付费免费版有水印,Pro $16/月正版 $22.99/月(Creative Cloud)
注册要求无需注册,打开即用需注册账号需 Adobe 账号
批量处理单次 1 个文件单次 1 个文件可批量导入+批量导出
输出格式控制固定输出 MP4(H.264)可选 MP4/GIF 等任意格式/编码/分辨率

使用指南

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

使用步骤

  1. 点击「选择文件」或拖拽 MP4/MOV/AVI 视频到上传区,单文件 ≤ 500MB
  2. 在「旋转角度」下拉菜单选择 90°、180°、270° 或「水平镜像」
  3. 点击「开始处理」按钮,FFmpeg 引擎在服务端执行旋转/翻转
  4. 处理完成后点击「下载」按钮,保存旋转后的视频文件

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

输入输出说明
landscape.mp4 (横屏拍摄的视频)旋转 90° 后输出 portrait.mp4 (竖屏视频)典型场景:将横屏视频旋转为竖屏适配手机观看
selfie.mp4 (前置摄像头拍摄的视频)水平镜像后输出 mirrored_selfie.mp4 (左右翻转的视频)典型场景:修正前置摄像头自拍视频的镜像效果
video.mp4 (倒置拍摄的视频)旋转 180° 后输出 upright.mp4 (正立视频)典型场景:修复拍摄时手机拿反导致的倒置视频
slideshow.mp4 (屏幕录制,内容为从左到右的文字)旋转 270° 后输出 rotated_slideshow.mp4 (底部朝左)边界 case:旋转后内容阅读方向会改变,需确认效果
vertical.mp4 (已为竖屏的视频)旋转 90° 后输出 horizontal.mp4 (变为横屏)边界 case:对已竖屏视频再次旋转,会变成横屏
text_overlay.mp4 (视频内嵌有文字或图标)镜像后输出 mirrored_text.mp4 (文字和图标均左右颠倒)易错 case:镜像操作会导致文字反向,不适合含文字的视频
very_long_video.mp4 (时长 2 小时的视频)旋转 90° 后输出 rotated_long.mp4 (保持原时长,画幅改变)边界 case:处理长视频时耗时较长,需耐心等待

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

1. 旋转后视频黑边/裁切

错误
直接选择 90° 旋转,输出视频四周出现黑边或画面被裁掉一部分
修复
旋转前检查原视频分辨率(如 1920×1080 横屏),旋转 90° 后应手动设置输出分辨率为 1080×1920,或使用工具自动交换宽高选项

旋转不改变视频的原始宽高比,若容器尺寸不变,画面会缩放填满导致黑边或裁切。需要同时调整输出分辨率与旋转角度匹配。

2. 镜像翻转后字幕/水印反向

错误
对带文字水印或硬字幕的视频做水平镜像,输出文字变成镜像反字
修复
如果目标是保留文字可读性,应使用垂直镜像(上下翻转)而非水平镜像;或先提取字幕/水印层,翻转视频后再叠加

水平镜像(左右翻转)会反转所有像素的 X 坐标,包括叠加的文字层。垂直镜像只反转 Y 坐标,文字方向不变。

3. 旋转角度与期望方向反了

错误
需要将竖屏视频顺时针转 90° 变成横屏,选择了 270°(逆时针 90°),结果画面倒置
修复
确认原始视频的旋转方向:手机拍摄的竖屏视频通常 metadata 标记为 90° 或 270°。先用工具查看原始旋转元数据,再选择补足到目标角度的值

不同设备拍摄的视频 metadata 中旋转方向定义不同(Exif 旋转 vs 实际像素方向)。直接选 90° 或 270° 前最好先预览一帧确认。

4. 多次旋转导致质量损失

错误
先旋转 90°,不满意再旋转 90°,重复 4 次得到原方向,但视频画质明显下降
修复
一次性指定最终需要的角度(如直接 180° 而非两次 90°);或使用无损旋转(仅修改 metadata 不重编码)

每次旋转都涉及重新编码(解码→旋转→编码),有损编解码会产生累积质量损失。支持 metadata 旋转的工具(如 FFmpeg 的 -metadata:s:v rotate=90)可避免重编码。

5. 旋转后音频不同步

错误
旋转 180° 后,视频画面与音频出现明显延迟或超前
修复
检查旋转前视频是否有可变帧率(VFR)。若原视频是 VFR,旋转时需指定 -vsync vfr 或先转为恒定帧率(CFR)再旋转

可变帧率视频在旋转时,FFmpeg 等工具可能错误地重新分配时间戳,导致音画不同步。恒定帧率视频无此问题。

6. 对已旋转的视频再次应用旋转

错误
手机拍摄的竖屏视频 metadata 已标记 90° 旋转,工具自动读取后显示正常。用户又手动选择 90° 旋转,结果画面变成 180° 倒置
修复
先检查工具是否自动应用了 metadata 旋转。如果已自动旋转,手动旋转应在原始角度基础上叠加,而非直接覆盖

许多播放器和工具会自动读取视频文件的旋转 metadata 并显示正确方向。手动旋转时若忽略此 metadata,会导致双重旋转。

7. 旋转后文件体积异常增大

错误
一个 50MB 的短视频旋转 90° 后变成 200MB+
修复
旋转前检查原视频编码和码率。若原视频是高效编码(H.265/HEVC),旋转后工具可能默认用 H.264 编码且码率翻倍。手动指定输出编码和码率参数

不同编码器压缩效率差异大。H.265 转 H.264 通常体积增加 30-50%。旋转工具若未保留原编码参数,可能使用默认高码率设置。

工作原理

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

核心公式

新坐标 = 原坐标 × 旋转矩阵 R(θ) + 镜像矩阵 M

变量说明

  • 原坐标 — 视频帧中像素的原始 (x, y) 位置
  • R(θ) — 旋转矩阵,θ 为 90°、180° 或 270°
  • M — 镜像矩阵,水平翻转时 x 取反
  • 新坐标 — 变换后像素在输出帧中的 (x', y') 位置

示例

对 1920×1080 视频帧做 90° 顺时针旋转 + 水平镜像。原像素 (100, 200) 先旋转:x' = 200, y' = 1920 - 100 - 1 = 1819;再镜像:x'' = 1920 - 200 - 1 = 1719, y'' = 1819。最终新坐标为 (1719, 1819)。

适用范围

适用于任意分辨率视频帧的 90°/180°/270° 旋转与水平/垂直镜像组合变换。不涉及缩放或剪切,像素坐标取整后无插值误差。基于标准仿射变换矩阵(OpenCV/FFmpeg 实现)。

原理图

上传视频文件MP4 / AVI / MOV选择旋转/镜像90° / 180° / 270° / 镜像FFmpeg 处理浏览器内 WASM 执行下载结果旋转后视频文件隐私说明所有视频处理在浏览器本地完成,视频文件不会上传到服务器。处理完成后,结果直接下载到本地,不留存任何数据。
用户输入 本地处理 输出结果

开发者集成

3 种主流语言 · 复制即用

import subprocess
import os

# 使用 FFmpeg 旋转视频 90 度(顺时针)
input_path = "input.mp4"
output_path = "output_90.mp4"

# transpose=1: 顺时针90°; 2: 逆时针90°; 3: 顺时针180°; 0: 逆时针180°
# 镜像: hflip(水平翻转)或 vflip(垂直翻转)
result = subprocess.run([
    "ffmpeg", "-i", input_path,
    "-vf", "transpose=1",
    "-c:a", "copy",
    output_path
], capture_output=True, text=True)

if result.returncode != 0:
    print("FFmpeg 错误:", result.stderr)
else:
    print(f"已生成: {output_path}")
package main

import (
	"fmt"
	"os/exec"
)

func main() {
	input := "input.mp4"
	output := "output_270.mp4"

	// 旋转 270 度(transpose=2 逆时针90° 等效于顺时针270°)
	cmd := exec.Command("ffmpeg",
		"-i", input,
		"-vf", "transpose=2",
		"-c:a", "copy",
		output,
	)

	if err := cmd.Run(); err != nil {
		fmt.Println("FFmpeg 执行失败:", err)
	} else {
		fmt.Printf("已生成: %s\n", output)
	}
}
const { execSync } = require('child_process');
const path = require('path');

const input = 'input.mp4';
const output = 'output_mirror.mp4';

// 水平镜像(hflip)
try {
  execSync(
    `ffmpeg -i "${input}" -vf "hflip" -c:a copy "${output}"`,
    { stdio: 'pipe' }
  );
  console.log(`已生成: ${output}`);
} catch (err) {
  console.error('FFmpeg 错误:', err.stderr.toString());
}

常见问题

8 个高频疑问

上传视频后点旋转没反应,是工具坏了吗?
大概率不是工具问题,而是视频文件本身的原因。最常见的情况是:视频编码格式不被浏览器支持(如 HEVC/H.265 编码的 iPhone 视频在 Chrome 上无法直接解码),或视频尺寸过大(超过 500MB 时浏览器内存不够)。解决方法:先换用 Chrome 或 Edge 浏览器(Safari 兼容性最差);如果视频超过 200MB,建议用桌面端 FFmpeg 命令行处理,本工具适合 100MB 以下的短视频快速旋转。
为什么旋转 90 度后视频被拉伸变形了,不是直接转过来?
工具默认只修改视频的旋转元数据(rotate tag),不重新编码画面像素,所以播放器会按新方向拉伸显示。要真正改变画面分辨率(比如竖拍视频旋转后变成横屏,需要裁切或加黑边),目前本工具不支持像素级重编码。如果需要不拉伸的纯旋转,建议在手机相册自带的编辑功能里操作,那个会同时调整画面尺寸。
镜像翻转和水平翻转有什么区别?怎么选?
在视频处理中这两个词通常混用,本工具的「镜像」指左右镜像(像照镜子一样左右颠倒),也叫水平翻转。如果拍的是文字横幅或车牌,镜像后字会反;如果拍的是自拍视频,镜像后脸的方向会变。如果需求是上下颠倒(比如倒挂在屋顶的摄像头画面),应该选 180° 旋转,而不是镜像。
旋转后视频画质变模糊了,是不是被压缩了?
本工具使用 FFmpeg 的「流复制」模式(-c copy),只修改视频的旋转方向标签,不重新编码视频数据流,所以画质理论上零损失。如果感觉变模糊,通常是播放器在渲染旋转后的画面时做了缩放插值,可以下载原文件到本地用 VLC 或 PotPlayer 播放对比,如果在播放器里清晰,就是浏览器预览窗口的渲染问题。
支持旋转 MOV 或 AVI 格式的视频吗?
支持。FFmpeg 后端能处理绝大多数常见封装格式(MP4、MOV、AVI、MKV、WebM、FLV 等),输出格式默认与输入一致。但需要注意:某些老旧格式(如 AVI 的 MJPEG 编码)或版权保护格式(如苹果 ProRes 编码的 MOV)可能因浏览器解码限制无法预览或导出。如果上传后提示「不支持的文件格式」,可以先用格式工厂转成 MP4(H.264 编码)再操作。
在手机上能用吗?为什么上传按钮点不了?
本工具响应式适配手机浏览器,但 iOS 版 Safari 对 <input type='file'> 的兼容性较差——部分旧版本(iOS 15 以下)无法触发相册选择。解决方法:用 Chrome 或 Edge 浏览器打开,或者把视频先存到「文件」App 里,从文件选择器上传。Android 端各浏览器基本都正常。如果还是不行,可以长按上传按钮切换「相机」或「文件」模式。
视频旋转后为什么在电脑上正常,传到手机上还是原来方向?
因为 iOS/Android 系统的相册 app 会忽略视频文件内的旋转元数据,只依据视频本身拍摄时记录的「旋转角度传感器数据」来显示。本工具修改的是视频的显示旋转标志(displaymatrix),不是物理旋转。要彻底解决跨平台方向问题,需要在电脑上用 FFmpeg 命令行加 -vf 'transpose=1' 参数做像素级旋转(会重新编码,文件大小可能变化),或者用手机相册自带的旋转功能保存。
一次最多能处理多大的视频?
受浏览器内存限制,建议上传 200MB 以内的短视频。后端 FFmpeg 处理本身没有文件大小上限,但浏览器在上传和下载大文件时可能崩溃(尤其是 Chrome 的 2GB 内存限制)。如果视频超过 500MB,推荐直接用电脑安装 FFmpeg 后运行命令:ffmpeg -i 输入.mp4 -metadata:s:v rotate=90 -c copy 输出.mp4,效果完全一样且无大小限制。
选择 打开 +新窗口 esc关闭