功能
将NV12的视频序列转换至I420格式
代码
#include<iostream>
#include<stdint.h>
int main(int argc, char* argv[]) {
char const* input;
char const* output;
input = argv[1];//输入NV12序列路径
int num_frame = atoi(argv[2]);//处理帧数
uint64_t w = atoi(argv[3]);//宽
uint64_t h = atoi(argv[4]);//高
output = argv[5];//输出I420序列路径
int i = 1;
uint8_t* buffer[3];
buffer[0] = (uint8_t*)malloc(w * h);
buffer[1] = (uint8_t*)malloc((w >> 1) * (h >> 1));
buffer[2] = (uint8_t*)malloc((w >> 1) * (h >> 1));
FILE* fp;
fopen_s(&fp, input, "rb+");
FILE* fp1;
fopen_s(&fp1, output, "wb+");
while (i <= num_frame) {
fread(buffer[0], 1, w * h, fp);
for (int i = 0; i < (h >> 1); i++) {
for (int j = 0; j < (w >> 1); j++) {
fread(&buffer[1][i * (w >> 1) + j], 1, 1, fp);
fread(&buffer[2][i * (w >> 1) + j], 1, 1, fp);
}
}
fwrite(buffer[0], 1, w * h, fp1);
fwrite(buffer[1], 1, (w >> 1) * (h >> 1), fp1);
fwrite(buffer[2], 1, (w >> 1) * (h >> 1), fp1);
i++;
}
fclose(fp1);
fclose(fp);
free(buffer);
return 0;
}
使用方法
1、利用VS生成exe可执行文件。
2、利用bat文件调用exe,在bat文件中按顺序输入相关参数,参数之间用空格分开。
bat文件示例
NV12to420.exe D:\4K_NV12\nightLab_3840x2160_iso3200_8bit_30fps_850f_nv12.yuv 850 3840 2160 D:\4K_I420\nightLab_3840x2160_iso3200_8bit_30fps_850f_I420.yuv