x264.c 可解析形如abc100x200.yuv的文件名,从文件名中取到长和宽

本文介绍x264源码中如何从文件名解析视频宽度和高度参数的方法,并提供了一个测试用例来验证不同文件名格式的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    //x264.c中的代码

    psz_filename = argv[optind++];

    psz = psz_filename + strlen(psz_filename) - 1; 
    while( psz > psz_filename && *psz != '.' )
 {
        psz--; 
 }

 //这儿psz代表后缀“.avi /.avs/.y4m”

    if( !strncasecmp( psz, ".avi", 4 ) || !strncasecmp( psz, ".avs", 4 ) ) 
        b_avis = 1; 

    if( !strncasecmp( psz, ".y4m", 4 ) )

        b_y4m = 1;


    if( !(b_avis || b_y4m) )

    {      
        if( optind > argc - 1 )
        {

           //psz这儿重新赋值了,又是完整的文件名了

            for( psz = psz_filename; *psz; psz++ )
            {
                if( *psz >= '0' && *psz <= '9'
                    && sscanf( psz, "%ux%u", &param->i_width, &param->i_height ) == 2

                {
                    if( param->i_log_level >= X264_LOG_INFO )
                        fprintf( stderr, "x264 [info]: file name gives %dx%d\n", param->i_width, param->i_height );
                    break;
                }
            }
        }
        else
        {
            sscanf( argv[optind++], "%ux%u", &param->i_width, &param->i_height );

        }
    }
       
    if( !(b_avis || b_y4m) && ( !param->i_width || !param->i_height ) )
    {
        fprintf( stderr, "x264 [error]: Rawyuv input requires a resolution.\n" );
        return -1;
    }

 

   

测试:

#include "stdafx.h"
#include <string.h>
#include <iostream.h>

int main(int argc, char* argv[])
{

  char *psz_filename;
 char *psz;

 int i_width;
 int i_height;

 psz_filename = "abc100x200def.yuv";

   for( psz = psz_filename; *psz; psz++ )
    {
        if( *psz >= '0' && *psz <= '9'
            && sscanf( psz, "%ux%u", &i_width, &i_height ) == 2 )
        {
            printf("\n\nx264 [info]: file name gives %dx%d\n\n", i_width, i_height );
            break;
        }
    }

 return 0;
}

 x264.c 可解析形如abc100x200.yuv的文件名,从文件名中取到长和宽 - 加菲 -  . 

   经测试,以下格式是可正确解析的:

  abc100x200.yuv

        100x200.yuv

   abc100x200def.yuv  

   以下格式是不正确的:

   100_200.yuv

   100xx200.yuv

 

   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值