为什么 ffmpeg 加不上 rotate 旋转参数

2022-04-20 16:32:48 +08:00
 gtheone1
ffmpeg -i aa.mp4 -c copy -metadata:s:v:0 rotate=90 bb.mkv

附上输出日志: https://netcut.cn/p/e321491f1686d4a5

这条执行之后,并没有旋转成功。因为 potplayer 播放过,ffprobe.exe 也播放过,画面并没有旋转

用 ffprobe -v quiet -print_format json -show_format -show_streams ,来查看转换后的视频的参数:

https://netcut.cn/p/2326a8e35c3a0e22

如上,没看见 rotate 参数被添加?按理说,不是会多出一行"rotate": "90" 吗?
1970 次点击
所在节点    FFmpeg
9 条回复
em70
2022-04-20 16:38:56 +08:00
插件编译问题,换个更全的编译版吧
gtheone1
2022-04-20 16:46:49 +08:00
@em70 我在这下载的 https://www.gyan.dev/ffmpeg/builds/,选的是 ffmpeg-git-full.7z ,不知道全不全,英文太差
hxy100
2022-04-20 17:11:07 +08:00
我用你的命令试过了,貌似找到了原因,经过测试,输入文件名和输出文件名的后缀保持一致就能旋转成功,否则旋转不成功,具体原因暂未知;

你的命令中输入文件名是 aa.mp4 ,输出文件名是 bb.mkv ,后缀不一致,你把 bb.mkv 改成 bb.mp4 再试试
celeron533
2022-04-20 17:58:48 +08:00
`-c copy`复制所有流。然后你尝试在 metadata 里面加上旋转 90 度的信息,应该没问题
但最后你要输出 mkv ,这需要重新封装吧?试试看楼上的意见,后缀不变。
gtheone1
2022-04-20 19:50:44 +08:00
@hxy100
@celeron533
没错,我也得到相同结果。而且我又试了 avi mp4 mkv 作为输入,输出成 mp4 就成功。但无论输入哪种,只要输出不是 mp4 就会旋转失败。不过至少实现无损旋转了,至于扩展名什么的也不重要。
celeron533
2022-04-20 22:10:49 +08:00
https://stackoverflow.com/a/54989279/2075611
简单讲就是 mkv 不会记录旋转信息
flynaj
2022-04-21 08:56:36 +08:00
你那个它并不编码视频,只是改了下播放参数。老播放器不一定支持。
要旋转,需要重新编码!
ffmpeg -i i.mp4 -vf transpose=2 -c:v libx264 -crf 30 -c:a copy out.mp4
mingl0280
2022-04-21 09:17:14 +08:00
你那个命令复制码流到输出封装,MKV 封装里面好像没这种元数据。
你得重新压(不使用 copy ,重新编码)到 MKV 去。
wolfie
2022-04-21 13:59:33 +08:00
transpose +1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/848180

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX