Avidemux Tinypy脚本仅加载文件不执行转码处理问题问询
故障原因
脚本只加载文件不做转码的核心原因是代码缩进+分支逻辑错误,所有转码处理代码都属于永远不会被执行的死代码:
adm.loadVideo()接口加载视频失败时返回0,加载成功返回非0值,原代码把全部转码、音轨配置、保存逻辑都写在了「加载失败」的if判断分支内- 加载失败的分支中,弹出错误提示后立刻执行
raise抛出异常终止流程,后面跟着的转码相关代码永远不会触发 - 当视频加载成功时,脚本会直接跳过整个
if分支,打印一句Done就结束当前文件处理,自然不会执行任何转码操作。
修正后的完整脚本
gui=Gui() adm=Avidemux() ext="mp4" inputFolder="c:\\tmp\\" def convert(filein): # 仅在加载失败时抛出错误、终止流程 if(0 == adm.loadVideo(filein)): gui.displayError("oops","cannot load "+filein) raise # 以下为加载成功后执行的处理逻辑,缩进与if判断同级 adm.videoCodec("Copy") adm.audioClearTracks() adm.setSourceTrackLanguage(0,"und") if adm.audioTotalTracksCount() <= 0: raise("Cannot add audio track 0, total tracks: " + str(adm.audioTotalTracksCount())) adm.audioAddTrack(0) adm.audioCodec(0, "Lame") adm.audioSetDrc(0, 1) adm.audioSetShift(0, 0, 0) adm.audioSetNormalize2(0, 2, 100, -30) adm.setContainer("MP4", "muxerType=0", "optimize=1", "forceAspectRatio=False", "aspectRatio=1", "displayWidth=1280", "rotation=0", "clockfreq=0") adm.save(filein+".converted.mp4") print("Done processing: "+filein) # 主流程 list=get_folder_content(inputFolder,ext) if(list is None): raise for i in list: convert(i) print("All files converted")
额外注意点
- 修正后转码逻辑放在
if判断块外部,只有加载成功才会执行 - 调整了完成提示的输出内容,会打印当前处理完成的文件名,方便排查进度
- 脚本会在指定目录下生成
原文件名.converted.mp4格式的输出文件,不会覆盖原文件
内容的提问来源于stack exchange,提问作者dc775
相关产品推荐
相关产品推荐

