FFmpeg给图片生成的视频添加rotate=90参数报错如何解决
FFmpeg添加旋转参数实现竖屏输出方案
报错原因
你遇到的Unable to find suitable output format for 'rotate=90'报错,核心原因是rotate="90"不属于FFmpeg全局命令参数,不能随意插入到命令任意位置,旋转需要通过视频滤镜或者视频流元数据两种合法方式实现,具体方案如下:
方案1:转码修改像素(兼容性最高,优先选择)
该方案会直接调整视频的像素排列,所有播放器都会默认显示为竖屏,不存在元数据不识别的问题。你需要在所有输入文件之后、视频编码参数之前添加-vf(视频滤镜)参数,顺时针旋转90度的滤镜规则为transpose=1。
修改后的完整命令:
const ffmpegCommand = `-hide_banner -loglevel error -loop 1 -i ${imageUri} -f lavfi -i anullsrc=cl=mono:r=48000 -vf "transpose=1" -c:v libx264 -profile:v high -level:v 4.0 -video_track_timescale 90k -t ${duration} -pix_fmt yuv420p -r ${resolution[0]/resolution[1]} ${outputUri}`;
补充规则:
- 逆时针旋转90度:将滤镜值替换为
transpose=2 - 旋转180度:将滤镜值替换为
transpose=1,transpose=1
方案2:仅添加旋转元数据(转码速度快,兼容性一般)
如果不需要修改原视频像素,仅需要给视频流添加旋转标记,可以在输出文件路径之前添加元数据参数,该方式仅支持识别旋转元数据的播放器:
const ffmpegCommand = `-hide_banner -loglevel error -loop 1 -i ${imageUri} -f lavfi -i anullsrc=cl=mono:r=48000 -c:v libx264 -profile:v high -level:v 4.0 -video_track_timescale 90k -t ${duration} -pix_fmt yuv420p -r ${resolution[0]/resolution[1]} -metadata:s:v rotate="90" ${outputUri}`;
额外提示
你当前命令中的-r ${resolution[0]/resolution[1]}参数需要注意:-r是FFmpeg用于设置视频帧率的参数,如果你原本是想设置视频的宽高比,应该将该参数替换为-aspect ${resolution[0]}:${resolution[1]},如果本来就是设置帧率可忽略该提示。
内容的提问来源于stack exchange,提问作者Asp1re
相关产品推荐
相关产品推荐

