文档章节

利用简单工具进行客观视频质量分析

张旭0512
 张旭0512
发布于 2016/07/11 11:06
字数 633
阅读 314
收藏 3

#利用简单工具进行客观视频质量分析

1. 主要工具:

ffmpeg, eavlvid

其中eavlvid的下载地址:http://www2.tkn.tu-berlin.de/research/evalvid/EvalVid/evalvid-2.7.tar.bz2

其实只使用了psnr,编译的时候,用“make psnr”即可。

psnr命令行使用方法: psnr x y <YUV format> <src.yuv> <dst.yuv> [multiplex] [ssim]

psnr使用方法图

例如: ./psnr 1920 1080 420 haoshengyin_420.yuv qsv-1080p.yuv ssim > qsv_ssim.csv

2. 主要流程

源YUV文件 -> ffmpeg编码(硬编或软编)-> ffmpeg解码生成YUV文件 -> YUV文件比对,生成psnr和ssim数据 -> 图表分析数据 -> 得出结论

3. 代码设计

编码语言用shell即可。

用例生成模块:

因子: 编码方式(软编或硬编), 码率, GOP值, preset, profile, 生成用例 -> 调用单个文件比对单元

单个文件比对单元:

源YUV文件 -> ffmpeg编码 -> 解码成YUV -> 利用工具获取yuv比对数据 -> 删除解码生成的yuv文件 传入参数: 源YUV文件路径, YUV比对数据路径, 编码方式(软编或硬编), 码率, GOP值, preset, profile

附代码:


#!/bin/bash

# functions
function exit_if_error()
{
    if [ "$?" != "0" ]; then
        echo "error!!!!!  "
        echo "++++++++++stack top++++++++++"
        declare i
        declare level=${#FUNCNAME[@]}
        for((i=1;i<level;i++))
        do
            [ x"${FUNCNAME[$i]}" != x ] && \
                echo -e "in ${FUNCNAME[$i]}()   at ${BASH_SOURCE[$i]}: ${BASH_LINENO[((i-1))]}"
        done

        echo "----------stack buttom-------"
        exit 1
    fi

}


function do_one_analysis()
{
    echo "use encode_type:"$1 "bit_rate:"$2 "gop_size:"$3 "preset:"$4 "profile:"$5
    encode_type=$1
    bit_rate=$2
    gop_size=$3
    preset=$4
    profile=$5


    # to generate ffmpeg command, 
    #e.g: ./ffmpeg -s 1920x1080 -i haoshengyin_420.yuv  -vcodec h264_qsv -b 1000k -s 1280x720 -f mp4 -y qsv.mp4
    dst_path="$dst_dir/${encode_type}_${bit_rate}_gop${gop_size}_${preset}_${profile}.mp4"
    encod_cmd="${ffmpeg_path} -s ${src_width}x${src_height} -i $src_yuv -vcodec $encode_type -b $bit_rate -s ${src_width}x${src_height} -g ${gop_size} -preset $preset -profile $profile -f mp4 -y $dst_path" 
    echo "encod_cmd: $encod_cmd"

    # to encode
    ${ffmpeg_path} -s ${src_width}x${src_height} -i $src_yuv -vcodec $encode_type -b $bit_rate -s ${src_width}x${src_height} -g ${gop_size} -preset $preset -profile $profile -f mp4 -y $dst_path
    exit_if_error

    dst_yuv_path="${dst_path}.yuv"
    decode_com="${ffmpeg_path} -i ${dst_path} -pix_fmt yuv420p -y ${dst_yuv_path}"
    echo "decode_com: $decode_com"

    # to decode
    ${ffmpeg_path} -i ${dst_path} -pix_fmt yuv420p -y ${dst_yuv_path}
    exit_if_error

    # to generate analysis cmd
    # e.g: ./psnr 1920 1080 420 haoshengyin_420.yuv qsv-1080p.yuv ssim > qsv_ssim.csv

    analysis_cmd_psnr="${analysis_bin} ${src_width} ${src_height} 420 ${src_yuv} ${dst_yuv_path} > ${dst_path}_psnr.csv"
    echo "analysis_cmd_psnr:${analysis_cmd_psnr}"
    ${analysis_bin} ${src_width} ${src_height} 420 ${src_yuv} ${dst_yuv_path} > ${dst_path}_psnr.csv
    exit_if_error

    analysis_cmd_ssim="${analysis_bin} ${src_width} ${src_height} 420 ${src_yuv} ${dst_yuv_path} ssim > ${dst_path}_ssim.csv"
    echo "analysis_cmd_ssim:${analysis_cmd_ssim}"
    ${analysis_bin} ${src_width} ${src_height} 420 ${src_yuv} ${dst_yuv_path} ssim > ${dst_path}_ssim.csv
    exit_if_error

    # clean the no need yuv file
    rm -rf ${dst_yuv_path}
}

function Analysis()
{
    echo "Analysis begin"

    for rate in $g_bit_rate
    do
        #echo "use bit_rate:"$rate
        for gop in $g_gop_size
        do
            #echo "use gop_size:"$gop
            for preset in $g_presets
            do
                #echo "use preset:"$preset
                for profile in $g_profiles
                do
                    #echo "use profile:"$profile
                    for codec in $g_encode_type
                    do
                        #echo "use codec:"$codec
                        do_one_analysis $codec $rate $gop $preset $profile

                    done

                done

            done

        done

    done

}



# globle params
g_encode_type="libx264 h264_qsv"
g_bit_rate="1000k 1500k 2000k 2500k"
g_gop_size="25 50 100"
g_presets="veryfast medium veryslow"
g_profiles="baseline main high"

# the source yuv path
src_yuv="/home/haoshengyin_420_deinterlace.yuv"
src_width=1920
src_height=1080
dst_dir="/home/test"

ffmpeg_path="/home/ffmpeg"
analysis_bin="/home/psnr"

# to analysis
Analysis 

© 著作权归作者所有

共有 人打赏支持
张旭0512
粉丝 41
博文 136
码字总数 30203
作品 0
朝阳
程序员
私信 提问
[总结]视频质量评价技术零基础学习方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leixiaohua1020/article/details/16359465 前段时间略忙,因此一直计划要总结的很多东西都没来得及写,这两天...

雷霄骅
2014/04/21
0
0
音视频技术:视频质量评价方法简介

视频质量评估(VQA)一直是个很活跃的研究领域,原因其一是业内一直缺少一种统一且准确的评估标准,其二是影响视频质量的因素过多,且包含很多主观因素,难以客观、定量地评价。经过这么多年...

netease_im
11/12
0
0
降低30%视频码率,窄带高清技术实现揭秘

尽量降低视频码率又不影响视频的主观观看质量,这是视频平台最关心的问题之一,因为降低码率意味着视频播放带宽的下降,节约成本。 2018年3月,又拍云自研的“窄带高清”功能,通过码率控制优...

又拍云
11/20
0
0
如何做好 Android 端音视频测试?

  网易云信(https://netease.im/)主要有四款音视频产品,有实时音SDK、直播SDK、播放SDK以及短视频SDK。实时音SDK主要覆盖安卓、IOS、PC、Mac、Web端;直播和播放SDK主要覆盖安卓、IOS、P...

yinengronghe
03/17
0
0
【省带宽、压成本专题】降低30%视频码率,深挖“窄带高清”的实现原理

过去几年,又拍云一直在点播、直播等视频应用方面潜心钻研,取得了不俗的成果。我们结合点播、直播、短视频等业务中的用户场景,推出了“省带宽、压成本”系列文章,从编码技术、网络架构等角...

又拍云
05/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JVM问题排查也不是很难--工具使用

目录 概述 环境准备 工具介绍 远程连接方式 开启JMX 工具远程连接 参考文献 概述 线上环境中,程序越来越慢,一头雾水?遇到程序经常宕机,但找不到原因?排查问题却经常记不住命令? 那是没找到好...

java_龙
6分钟前
2
0
MySQL

1、查看数据库中所有的数据表: SHOW DATABASES; 2、连接数据库: use (数据库名); 3、显示已经打开的数据库: SELECT DATABASE(); 4、创建数据表: CREATE TABLE (数据表的名字)(第...

墨冥
14分钟前
2
0
idea 设置背景色

编辑界面背景色 控制台背景色

暗中观察
16分钟前
1
0
Win10强制更新怎么关闭 彻底禁止Windows自动更新方

Win10强制更新怎么关闭 彻底禁止Windows自动更新方法 (全文) 百事数码原创 2018-07-06 17:39电脑百事网7843 + 关注 很多Win10用户来说经常会遇到这样的烦恼,电脑系统会不时的提醒自动更新,...

阿K1225
31分钟前
2
0
不用编写程序代码,送你一个爬虫程序批量采集猫眼电影票房数据

"大数据"是一个体量特别大,数据类别特别大的数据集,并且这样的数据集无法用传统数据库工具对其内容进行抓取、管理和处理。 "大数据"首先是指数据体量(volumes)大,指代大型数据集,一般在1...

技术阿飞
46分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部