x264命令输出文件名后缀的多种尝试

 

亲自体验:

 测试命令:x264 --crf 22 -o test.mp4 hall_cif.yuv 352x288

 操作系统:xp

版本:

x264.exe:$Id: x264.c,v 1.1 2004/06/03 19:24:12 fenrir Exp $

libx264.lib:不会看,是x264-060805-vc6工程里的

 

 后缀  是否支持  备注
 .mp3  支持,用ffplay播放正常  
 .mp4  不支持,x264 [error]: not compiled with MP4 output support  
 .mp5    open_file_bsf(...)被调用
 .mp6  支持,用ffplay播放正常  open_file_bsf(...)被调用
 .mkv  支持,用ffplay播放正常,用暴风影音播放正常  open_file_mkv(...)被调用
 .avi  支持,用ffplay播放正常  open_file_bsf(...)被调用
 .txt  支持,用ffplay播放正常  open_file_bsf(...)被调用
 .doc  支持,用ffplay播放正常  open_file_bsf(...)被调用
 .rmv  支持,用ffplay播放正常  open_file_bsf(...)被调用
 .rmvb  支持,用ffplay播放正常  open_file_bsf(...)被调用
 .rar    
 .china    
 .cn    
 .中国  支持,用ffplay播放正常  open_file_bsf(...)被调用
 .com  支持,用ffplay播放正常  open_file_bsf(...)被调用
 .1  支持,用ffplay播放正常  open_file_bsf(...)被调用
 .exe  支持,用ffplay播放正常  open_file_bsf(...)被调用
 .264  支持,用ffplay播放正常  open_file_bsf(...)被调用
 .avc  支持,用ffplay播放正常  open_file_bsf(...)被调用
      

可以看出,除了特殊的mp4外,其它已知的后缀和未知的后缀,编码都被作为一种来处理了。两种处理生成的文件是不一样的。如下:

test.mkv 683 KB (699,747 字节)

test.1、test.txt等,679 KB (695,328 字节)

 

生成的不同后缀的名字,图标受操作系统的规则显示,但是都可以用ffplay播放,包括中文的后缀名。

x264命令输出文件名后缀的多种尝试

实际播放截图
 

x264命令输出文件名后缀的多种尝试

 

 

这些后缀是旧瓶装新酒,如果直接双击按默认打开是不正确的
 
 
x264命令输出文件名后缀的多种尝试
 
直接打开test.txt就是错的,要用ffplay test.txt才行
 
 
以上是用最笨的办法来测试的,实际本质上,当然是源程序里的区别对待,下面尝试在源码中找到答案:
 
 ->main(...)
->Parse(...)
            {
               //这儿提前赋值了,不另外单独识别的,都用此处理
                p_open_outfile = open_file_bsf;    /*函数指针赋值*/
                p_set_outfile_param = set_param_bsf;  /*函数指针赋值*/
                p_write_nalu = write_nalu_bsf;    /*函数指针赋值*/
                p_set_eop = set_eop_bsf;     /*函数指针赋值*/
                p_close_outfile = close_file_bsf;   /*函数指针赋值*/
 
               //mp4和mkv两种输出格式,单独进行了处理
                //mp4文件
                if( !strncasecmp(optarg + strlen(optarg) - 4, ".mp4", 4) ) /* strncasecmp:比较字符串s1和s2的前n个字符但不区分大小写 */
                {
                 #ifdef MP4_OUTPUT
                  p_open_outfile = open_file_mp4;//muxers.c
                  p_write_nalu = write_nalu_mp4;
                  p_set_outfile_param = set_param_mp4;
                  p_set_eop = set_eop_mp4;
                  p_close_outfile = close_file_mp4;
                  printf("\n (x264.c\case 'o')");//zjh
                 #else
                  fprintf( stderr, "x264 [error]: not compiled with MP4 output support\n" );
                  return -1;
                 #endif
                            }
                        }
                //MKV文件
                else if( !strncasecmp(optarg + strlen(optarg) - 4, ".mkv", 4) 
               { 
                    p_open_outfile = open_file_mkv;//muxers.c
                    p_write_nalu = write_nalu_mkv;
                    p_set_outfile_param = set_param_mkv;
                    p_set_eop = set_eop_mkv;
                    p_close_outfile = close_file_mkv;
                }