基于FFmpeg中的旋转元数据,如何旋转视频?

3
我知道如果事先知道视频旋转了多少度,我可以使用“transpose”视频过滤器来转置视频,并使用类似于“-metadata:s:v:0 rotate = 0”的东西来更新元数据,但是如何根据视频中的元数据旋转位使用正确的转置值?基本上,我想将旋转信息嵌入到视频数据中,并清除旋转元数据。
使用ffmpeg单独完成这项任务是否可能,还是必须编写某种脚本以提取旋转值并使用适当的选项调用ffmpeg? 如果是后者,是否有人已经有工作脚本? :) 我看到这个人使用exiftool和rails的方法; 是否可以不使用它来完成此操作?
1个回答

3

旋转信息属于“视频流”,而不是具有音频流的视频文件。因此,您需要查看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;
        }
}

啊,我在想是否能够仅使用命令行工具完成它,而不需要使用库编写代码... - qix
如果有人需要禁用自动旋转,该怎么办? - Davood Falahati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接