bash中的视频方向检测

时间:2014-12-29 22:25:35

标签: bash video ffmpeg orientation

我需要检测视频是以纵向还是横向模式录制,然后以脚本方式将它们转换为正确的方向。

if [ "$v_orient" ==  "landscape" ]
  then
    ffmpeg -i file.mp4 -vf "transpose=1" file.ogv
  else 
    ffmpeg -i file.mp4 file.ogv
fi

我查看了ffmpeg在线文档并用Google搜索,

我尝试过exiftool

exiftool -Rotation -Rotate file.mp4

但是,对于横向和背景,输出旋转:90我有的肖像视频。


如何在bash中检测视频方向?

2 个答案:

答案 0 :(得分:6)

ffprobeffmpeg包的一部分,它将报告视频元数据。

ffprobe somevideo.mp4

grep可用于仅选择旋转信息。在旋转的视频中,我看到了这个输出:

$ ffprobe somevideo.mp4 2>&1 | grep rotate
      rotate          : 90

在我尝试的未旋转视频上,上面的命令没有产生输出。

此命令取决于视频文件的元数据。如果您的源代码不能生成可靠的rotate代码,则可能需要查找其他代码。

没有加速度计(重力传感器)的旧相机无法判断它们是纵向还是横向,因此无法生成任何有用的标签。

答案 1 :(得分:1)

我发现 grep 本身提供了一种获取单个元数据值的方法,因此我们可以轻松地直接获取旋转的值,而无需在输出中使用 rotate=$(ffprobe -v error -select_streams v:0 -show_entries stream_tags=rotate -of csv=s=x:p=0 "${sourceFile}") if [ "$rotate" != "" ]; then echo "We need to rotate: $rotate" fi

$ ffprobe ~/Videos/test.mp4 -v error -select_streams v:0 -show_entries stream_tags=rotate -of csv=s=x:p=0
90

在纵向模式下,这个选择调用只会给你度数:

        Vendor.find({location: req.params.location}, {
            vendorpassword: 0
        }, function (err, vendor) {
            if (err) {
                res.status(500).json({
                    error: 'An error occurred'
                });
            } else if (!vendor) {
                Vendor.find({},{
                    vendorpassword: 0
                },
                function (err, vendor) {
                        res.status(400).json({
                            vendor
                        })});
                
            } else {
                res.status(200).json({
                    vendor
                })
            }
        })
    },```
相关问题