如何用FFmpeg修复宽高标识为横向但画面实际为纵向的视频问题
如何用FFmpeg修复宽高标识为横向但画面实际为纵向的视频问题
嘿,我懂你遇到的麻烦了——用ffprobe查出来视频是横向宽高比,但实际播放画面却是纵向的,这种元数据和实际内容不匹配的情况确实挺闹心。先看你提供的ffprobe输出:你的视频分辨率是3072x1728(宽×高),是标准16:9横向比例,但画面实际是竖的,大概率是拍摄时的旋转信息没被正确记录到元数据里,或是宽高标识给搞反了。
别担心,用FFmpeg有两种靠谱的解决办法,你可以按需选择:
方案一:快速添加旋转元数据(不重新编码)
如果只是播放器没识别到视频的旋转方向,咱们直接给视频加个旋转元数据就行,全程不用重新编码视频内容,速度特别快。
执行这个命令:
ffmpeg -i my_video.mp4 -c copy -metadata:s:v:0 rotate=90 fixed_video.mp4
-c copy:直接复制原视频的音频和视频流,不做编码处理,省时间;-metadata:s:v:0 rotate=90:给第一个视频流添加“顺时针旋转90度”的元数据,播放器读到这个信息就会自动把画面转成纵向。
你可以用ffprobe验证修复后的视频:
ffprobe.exe fixed_video.mp4 -show_streams -of json
这时候看视频流字段里应该会出现"rotate": "90",播放时画面就正常了。
方案二:重新编码调整宽高(兼容所有播放器)
要是碰到一些老播放器不支持读取旋转元数据,那就得直接修改视频的实际分辨率,把宽高交换过来,同时旋转画面。执行这个命令:
ffmpeg -i my_video.mp4 -vf "transpose=1" -c:v libx265 -crf 20 -c:a copy fixed_video.mp4
-vf "transpose=1":用transpose滤镜顺时针旋转90度(需要逆时针转就改成transpose=2);-c:v libx265:因为你的原视频是HEVC编码,所以用libx265编码器重新编码,保证画质和原视频一致;如果原视频是H.264编码,换成libx264就行;-crf 20:控制画质的参数,数值越小画质越好,20是兼顾画质和文件大小的均衡选择;-c:a copy:复制原音频流,不用重新编码,节省时间。
修复完之后,不管新老播放器都能正确显示纵向画面啦。
备注:内容来源于stack exchange,提问作者sthlm58
相关产品推荐
相关产品推荐

