基本思路是写了一个时间判断函数(postSequence_check)来对比transcode任务提交时间和目标文件夹内文件的修改时间来确定渲染是否成功执行,然后通过Hiero提供的postSequence钩子函数将时间判断函数(postSequence_check)注入进Hiero。

用法很简单,保存为一个脚本,并在__init__中引用即可。
 
Talk is cheap,show you the code:
 
###################################################################################################################################################################
 
import hiero.core,hiero.exporters
import sys
import os,datetime
import time
 
#GLOBAL_NAMELIST=[]

def updateItem_new (self, originalItem, localtime):
    #print sys._getframe().f_code.co_name

global GLOBAL_LOCALTIME,GLOBAL_CLASS_TYPE
    GLOBAL_LOCALTIME = time.mktime(localtime)
    GLOBAL_CLASS_TYPE = self

"""updateItem - This is called by the processor prior to taskStart, crucially on the main thread.\n
      This gives the task an opportunity to modify the original item on the main thread, rather than the clone."""
    #if isinstance(self._item, (Sequence,TrackItem)):
    #if isinstance(self._item, Clip):

timestamp = self.timeStampString(localtime)
    tag = hiero.core.Tag("Transcode " + timestamp, "icons:Nuke.png")
    tag.metadata().setValue("tag.path", self.resolvedExportPath())
    tag.metadata().setValue("tag.localtime", str(localtime))
    # Right now dont add the time to the metadata
    # We would rather store the integer time than the stringified time stamp
    #tag.setValue("time", timestamp)

# No point in adding script path if we're not planning on keeping the script
    if self._preset.properties()["keepNukeScript"]:
      tag.metadata().setValue("tag.script", self._scriptfile)

start, end = self.outputRange()
    tag.metadata().setValue("tag.startframe", str(start))
    tag.metadata().setValue("tag.duration", str(end-start+1))
    
    frameoffset = self._startFrame if self._startFrame else 0
    if hiero.core.isVideoFileExtension(os.path.splitext(self.resolvedExportPath())[1].lower()):
      frameoffset = 0
    tag.metadata().setValue("tag.frameoffset", str(frameoffset))
    
    if self._cutHandles:
      tag.metadata().setValue("tag.handles", str(self._cutHandles))

self._tag_guid = tag.guid()

originalItem.addTag(tag)

# The guid of the tag attached to the trackItem is different from the tag instace we created
    # Get the last tag in the list and store its guid
    self._tag_guid = originalItem.tags()[-1].guid()
    
hiero.exporters.FnTranscodeExporter.TranscodeExporter.updateItem = updateItem_new

######################################################################################################
######################################################################################################
######################################################################################################

def postSequence_check(self):

#print sys._getframe().f_code.co_name
    
    #print self.__class__

#print self._filebase

if isinstance(self,hiero.exporters.FnTranscodeExporter.TranscodeExporter):
        #print "yeah!"
        #print self._root
        #print self._shotPath
        #print self._filebase
        #print self._version
        #print self._track
        #print self.outputRange()
        #print self.properties()
        #print initDictionary

#GLOBAL_NAMELIST.append(self._filebase)

base_dir = self._root
        base_dir = "/".join(base_dir.split('/')[0:-1])
        print self._filebase
        list = []
        timestamplist = []
        list = os.listdir(base_dir)

if len(list) > 0:
            for i in range(0, len(list)):  
                path = os.path.join(base_dir,list[i])  
                if os.path.isfile(path):  
                    path = os.path.join(base_dir, list[i])  
                    if os.path.isdir(path):  
                        continue  
                    timestamp = os.path.getmtime(path)  
                    timestamplist.append(timestamp)
        
            #print GLOBAL_LOCALTIME,min(timestamplist)

if GLOBAL_LOCALTIME > min(timestamplist):
                print "(VHQ) This transcode task has some problem:" + self._filebase
            else:
                print '(VHQ) This transcode task is OK!'
        else:
            print "(VHQ) This transcode task has some problem:" + self._filebase
    else:
        base_dir = self._filebase
        #base_dir = "/".join(base_dir.split('/')[0:-1])
        print base_dir
        print str(self.__class__).strip('<').strip('>').strip("'").split('.')[-1] + ' is not transcode render task!'

hiero.core.FnExporterBase.TaskBase.postSequence = postSequence_check

写了一个hiero检查任务渲染结果的脚本的更多相关文章

  1. 初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助

    初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助,如果有bug或者更好的优化方案,也请批评与指正,谢谢,代码如下: var fs = require('f ...

  2. 写了一个hiero中添加自定义Token的脚本

    Hiero自带Token往往不够用,shotname中自带版本号的情况下要升级版本会很麻烦,比如Shot_0001_v001这样一个序列名,要升级为Shot_0001_v002就必须把_v001之前的 ...

  3. 随手写的一个检测php连接mysql的小脚本

    最近偶然接触到一点点的php开发,要用到mysql数据库,由于mysql和php版本的关系,php5里面连接函数有mysql_connect(),mysqli_connect()两种,php7中又使用 ...

  4. python 拼写检查代码(怎样写一个拼写检查器)

    原文:http://norvig.com/spell-correct.html 翻译:http://blog.youxu.info/spell-correct.html 怎样写一个拼写检查器 Pete ...

  5. 如何写一个拼写检查器-by Peter Norvig

    本文原著:Peter Norvig  中文翻译:徐宥 上个星期, 我的两个朋友 Dean 和 Bill 分别告诉我说他们对 Google 的快速高质量的拼写检查工具感到惊奇. 比如说在搜索的时候键入 ...

  6. 闲来无事,用Java的软引用写了一个山寨的缓存

    闲来无事,用Java的软引用写了一个山寨的缓存 博客分类: java基础 众所周知java中的引用分为 StrongReference.SoftReference.WeakReference.Phan ...

  7. Pluto - iOS 上一个高性能的排版渲染引擎

    WeTest 导读 Pluto 是 iOS 上的一个排版渲染引擎,通过 JSON/JS 文件可以很方便地描述界面元素,开发效率很高,并且在流畅度,内存等方便有保证.pluto.oa.com 上有更多详 ...

  8. 自己写的一个Vue

    下面这里是我自己写的一个小型的vue,原理就是proxy: //Proxy天生没有prototype,因此要加上,不然extends会报错 Proxy.prototype = Proxy.protot ...

  9. 自己写的一个Solr搜索实例,增删改查+高亮+分页

    今天个人coding的模块测试,所以闲暇之余继续研究solr,然后顺带写了一个实例,随便搞的,solr真心不熟,期待认识热爱搜索的朋友,共同进步. 1.配置schema.xml文件[solr\coll ...

随机推荐

  1. 如何在VMware中安装Linux系统

    这篇文章主要讲述如何在VMware12中安装RHEL6.9Linux操作系统 步骤一: 打开VMware软件,在主页中点击创建新的虚拟机或者点击左上角文件,在列表中点击新建虚拟机,如图: 步骤二: 点 ...

  2. Ubuntu 18.04开启TCP网络协议BBR加速的方法(Google BBR 拥塞控制算法)

    TCP BBR 是Google给出的一个改良版的tcp网络协议,相当于在已有TCP协议的基础上打了个补丁的意思,这个改良版TCP协议对拥塞控制有很好的支持,对于网络较差的环境有不错的应用场景,当然这里 ...

  3. Python网络爬虫之图片懒加载技术、selenium和PhantomJS

    引入 图片懒加载 selenium phantomJs 谷歌无头浏览器 知识点回顾 验证码处理流程 动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.ch ...

  4. MySQL中变量的使用

    一.认识MySQL 中的变量 在MySQL中变量的绝大部分的用处都是在存储过程和存储函数中. 当然也可以抛开存储过程和存储函数来单独使用. 变量在MySQL中的运用和在编程语言中的运用大体相同 二.M ...

  5. 求强连通分量Tarjan算法

    ]; // 时间戳 ; // 时间 ]; // 节点u所能访问到的最小时间戳 ]; // 节点u是否在栈中. ]; ; // 我们维护的信息. ]; // 给节点染色, 同一个连通块的节点应该是同一个 ...

  6. maven 构建 war文件&&Glassfish运行+部署war文件+访问(命令行模式)

    Glassfish常用命令 asadmin  start-domain  --verbose                 #启动Glassfish服务器(默认domain1) ,并在终端显示相关信 ...

  7. P1005 矩阵取数游戏(动态规划+高精度)

    题目链接:传送门 题目大意: 给定长度为m的数列aj,每次从两端取一个数,得到2k * aj的价值(k为当前的次数,从1开始到m),总共有n行这样的数列,求最大价值总和. 1 ≤ n, m ≤ 80, ...

  8. 实验吧—Web——WP之 猫抓老鼠

    打开解题链接后,发现他是让我们输入key提交查询就能进行下一步 题目中提示了:catch(抓的意思) 那么我们很容易就能想到是BP抓包,抓包后直接放到repeater中改包. 我们先GO一下看看有什么 ...

  9. 20165313 《Java程序设计》第六周学习总结

    教材学习总结 一点浅见,不足之处还请谅解. 正则表达式:正则表达式是一个String对象的字符序列,该字符序列中含有具有特殊意义的字符,这些特殊字符称作正则表达式的元字符. 链表:由若干个称作结点的对 ...

  10. react-redux 的使用

    1 安装react-redux: npm install --save react-redux 2.之前使用redux的store.subscribe监听 store的状态改变,通过store.get ...