如果我使用:
ffmpeg -i in.mov -vf "transpose=1" out.mov
所有.mov
文件都旋转了,但我需要的是自动检测旋转的视频并仅更改这些视频的方向。
如何在上传过程中自动检测视频的旋转或方向并在需要时进行旋转,以便所有.mov
文件都以正确的方向播放?如何获取视频当前旋转角度的元数据?
答案1
针对您的问题,具体来说,您可以通过以下方式获得旋转:
ffprobe -loglevel error -select_streams v:0 -show_entries stream_tags=rotate -of default=nw=1:nk=1 -i in.mov
传奇:
-loglevel error
:仅显示旋转字段,没有其他信息。
-select_streams v:0
:处理第一个视频流(如果存在多个视频流则忽略)
-show_entries stream_tags=rotate
:返回输入视频的旋转信息
-of default=nw=1:nk=1
:使用默认输出格式,不显示其他任何内容,即无包装器(nw)和无密钥(nk)
答案2
使用 ffprobe,像这样。
ffprobe -i in.mov
如果文件中存在这样的字段,则这将导致在输出的某处显示“rotate:”字段。
答案3
ffmpeg 中方向/旋转元数据的位置从 stream_tag 更改为 side_data,名称从“rotate”更改为“rotation”。
@Agile Bean 的更新版本将是:
fprobe -loglevel error
-select_streams v:0
-show_entries side_data="rotation"
-of default=nw=1:nk=1 -i in.mov
答案4
为了使其更加完整,以防 FFMPEG 的元数据结构再次发生变化,这里有一个适合脚本的版本,仅使用和获取旋转grep
值sed
:
ffprobe input.mp4 2>&1 | grep rotation | sed -e 's#.*rotation of \(.*\).00 degrees#\1#'
解释:信息转到 stderr,因此重定向;然后grep
过滤行;然后sed
用正则表达式组替换。
case $ROTATION in
0) ... ;;
90|-270) ... ;;
180|-180) ... ;;
270|-90) ... ;;
esac