gpt4 book ai didi

encoding - 尝试实用地确定 h.264 配置文件和级别

转载 作者:行者123 更新时间:2023-12-02 21:56:04 25 4
gpt4 key购买 nike

理想情况下,解决方案是在 python 和跨平台中,但这可能不太可能,所以我所需要的只是它在 Linux 中工作,并且如果需要,我可以使用 c 扩展来与 python 接口(interface)。我看到有一个用于 ffmpeg 的 python 绑定(bind),我正在考虑使用它,但是我无法弄清楚如何使用 fmmpeg 或其他任何东西来确定配置文件和级别,更不用说实用了。谷歌在这件事上也没有提供太多帮助。

如果我需要手动确定配置文件和级别,我已经能够确定我要寻找哪些功能,那么我可以做到这一点,但这就引出了一个问题,ffmpeg 可以确定视频是否是使用该功能集进行编码?我想我想知道的是,编码后是否可能无法完全确定级别和特定配置文件?我认为你必须知道才能解码它,但也许不是;这可以解释为什么我找不到任何相关信息。我已经断断续续地考虑这个问题有一段时间了,但最近决定考虑一个我一直在考虑的项目,但这是阻碍我的重大事情之一。

最佳答案

这是我写的一个小程序。它打印使用 h264 作为视频编解码器的 MP4 文件的配置文件和级别。您可以使用以下命令行编译它:

gcc -std=c99 printProfileAndLevel.c -o printProfileAndLevel

这是 C 源代码:

#include <stdio.h>
#include <stdlib.h>

void printProfile(int profile_idc, int profile_iop, int level_idc) {
switch(profile_idc) {
case 0x42: printf("Baseline Profile"); break;
case 0x4D: printf("Main Profile"); break;
case 0x58: printf("Extended Profile"); break;
case 0x64: printf("High Profile"); break;
default: printf("Unknown profile (%x)", profile_idc);
}

switch(level_idc) {
case 0x15: printf(" @ Level 2.1\n"); break;
case 0x1F: printf(" @ Level 3.1\n"); break;
case 0x29: printf(" @ Level 4.1\n"); break;
case 0x33: printf(" @ Level 5.1\n"); break;
default: printf(" @ unknown level (%x)", level_idc);
}
}

int main(int argc, char* argv[])
{
if(argc < 2) {
printf("syntax: %s <files>\n", argv[0]);
exit(-1);
}

int buffsize = 1024;
char *buffer = malloc(buffsize + 1);

for(int nArg = 1; nArg < argc; nArg++) {
printf("File %s:\n", argv[nArg]);
FILE *file = fopen(argv[nArg], "r+");
if(file == NULL) {
printf("Cannot open input file %s\n", argv[nArg]);
continue;
}

int nRead = 0;
nRead = fread(buffer, 1, buffsize, file);

for(int i = 0; i < nRead - 7; i++) {
if(buffer[i] == 0x61 && buffer[i+1] == 0x76 && buffer[i+2] == 0x63 && buffer[i+3] == 0x43) {
printProfile(buffer[i+5], buffer[i+6], buffer[i+7]);
}
}
fclose(file);
}
free(buffer);
return 0;
}

关于encoding - 尝试实用地确定 h.264 配置文件和级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8063904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com