如何确定 PHP/FFMPEG/PhoneGap 中的视频旋转/方向?

问题描述 投票:0回答:2

将视频上传到服务器后,我将使用 FFMPEG 创建屏幕截图。问题是,如果用户以纵向模式拍摄视频,屏幕截图会旋转 90°。可笑的是,PhoneGap、FFMEG-php 和 FFMPEG 似乎没有提供读取视频旋转/方向值的机制。

我找到了另一个名为 mediainfo 的库,它将提供信息,但不是以易于阅读/消化的方式,我试图避免使用另一个库。

我对 PhoneGap/FFMPEG 的看法有误吗?有没有直接的方法来确定视频方向?


这是我作为 PHP 函数的解决方案:

function get_video_orientation($video_path) {
    $cmd = FFMPEG_PATH . "ffprobe " . $video_path . " -show_streams 2>/dev/null";
    $result = shell_exec($cmd);

    $orientation = 0;
    if(strpos($result, 'TAG:rotate') !== FALSE) {
        $result = explode("\n", $result);
        foreach($result as $line) {
            if(strpos($line, 'TAG:rotate') !== FALSE) {
                $stream_info = explode("=", $line);
                $orientation = $stream_info[1];
            }
        }
    }

    return $orientation;
}
php cordova ffmpeg
2个回答
0
投票

聚会迟到了,但分享这个是因为我花了一整天的时间试图弄清楚如何在 php 中使用 ffmpeg 获取视频的方向,所以这里是(使用 laravelffmepg 但与原生 ffmpeg 的工作原理几乎相同):

$video = LaravelFFMpeg::fromDisk('uploads')->open($media->文件名);

        // Get video stream info
        $videoStreams = $video->getVideoStream();

        // Check if metadata exists
        if (!isset($videoStreams->all()['side_data_list'][1]['rotation'])) {
            // If rotation info is not available, use original width and height
            $media->width = $videoStreams->get('width');
            $media->height = $videoStreams->get('height');
        } else {
            // If rotation info is available, reverse width and height
            $media->width = $videoStreams->get('height');
            $media->height = $videoStreams->get('width');
        }

-1
投票

使用MediaCodec求旋转值。然后使用 FFMPEG 旋转视频。

例如:ffmpeg -i in.avi -vf "transpose=1" out.avi

这会将视频顺时针翻转 90 度。

© www.soinside.com 2019 - 2024. All rights reserved.