【问题标题】:Rotate a video based on the rotate metadata with ffmpeg?使用 ffmpeg 根据旋转元数据旋转视频?
【发布时间】:2014-05-13 05:02:27
【问题描述】:

如果我知道视频是如何提前旋转的,我知道我可以使用transpose 视频过滤器转置视频,并使用类似-metadata:s:v:0 rotate=0 的方式更新元数据,但我如何才能使用正确的转置值取决于在视频中的元数据旋转位?基本上我想将旋转信息烘焙到视频数据本身,并清除旋转元数据。

是否可以单独使用 ffmpeg,或者我必须编写某种脚本来提取旋转值,并使用适当的选项调用 ffmpeg?如果是后者,是否有人已经有了工作脚本? :) 我认为this 是一个人使用exiftool 和rails 的方法;没有它可以做到吗?

【问题讨论】:

    标签: video ffmpeg rotation transpose exiftool


    【解决方案1】:

    旋转信息属于“视频流”,而不是视频文件(也有音频流)。所以你需要查看 AVStream.metadata。

    AVFormatContext *inputFormatCtx = ...;
    for(int i=0; i<inputFormatCtx->nb_streams; i++) {
            if(inputFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO) {
    
                AVDictionary* metadata = (AVDictionary*)inputFormatCtx->streams[i]->metadata;
    
                for(int i =0;i<metadata->count;i++)
                {
                    AVDictionaryEntry entity = (AVDictionaryEntry)(metadata->elems[i]);
                    LOGD("metadata %s %s",entity.key,entity.value);
                }
    
                break;
            }
    }
    

    【讨论】:

    • 啊,我想知道是否可以仅使用命令行工具来完成,而无需使用 lib 编写代码...
    • 如果需要禁用自动旋转怎么办?
    猜你喜欢
    • 2011-04-25
    • 2014-03-17
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 2013-02-27
    • 1970-01-01
    相关资源
    最近更新 更多