NMM视频技术(旧)

 找回密码
 成为会员
搜索
查看: 8156|回复: 6

[半原创]根据Trim剪辑音频的Python脚本

[复制链接]
发表于 2010-6-10 18:39 | 显示全部楼层 |阅读模式
本帖最后由 cunhan 于 2010-6-15 15:56 编辑

在网上找到两个非常方便的剪切音频脚本:
split_aud.pl(http://mod16.org/hurfdurf/?p=33)
Vfr.py - Auto Chapter & QPFile creator and Audio cutter for VFR video (http://forum.doom9.org/showthread.php?t=154535)
其中vfr.py包含了split_aud的所有功能,并且添加了timecode支持和生成chapter(xml or ogm格式)功能
因此,我以vfr.py为蓝本,在保持其原有功能的基础上,借助其对剪切时间点的处理结果,增加一点小功能,就是所谓的vfr_mod.py了

引用原脚本作者RiCON的话,这个脚本是干什么的
- 读取一个avs文件的首行非注释的Trim语句
- 读取timecdoe文件,并以此来确定trim语句相关frame的timestamp(如输入timecode为v1格式,则通过tcConv转为v2格式)
- 根据计算出来的trim的timestamp
  - 创建mkv兼容的xml chapter文件 或者 OGG格式chapter文件
  - 创建qpfile文件,供x264使用
  - 剪切、合并音频

vfr.py -i audio.aac -o cutaudio.mka -f 30000/1001 -t timecodes.txt -c chapters.xml -q qpfile.qpf -vmr --test --frames 9001 trims.avs

-i = 待剪切的音频文件(可以是mkv兼容的任意格式)
-o = 剪切/合并后输出mka文件
-f = 帧率,默认值为30000/1001(接受以下形式的输入"25", "24000/1001" and "30000:1001")
-t = v1或者v2格式的timecode文件以支持vfr片源 (对于v1格式输入,需要tcConv转换为v2)
-c = Chapter文件。假如是xml文件,则输出mkv格式chapter,否则输出OGG格式chapter
-q = 用于x264的QPFile
-v = 显示详细信息
-m = 把剪切出来的音频文件合并
-r = 合并后删除剪切出来的音频文件
--test = 测试模式 (不生成新文件)
--frames = 帧数,v1格式timecode转换为v2格式timecode需要
trims.avs = 从此avs文件中读取首行非注释trim语句

注:
1. -f和-t/--frames互斥使用,-f只用于cfr片源,-t/--frames只用于vfr片源。如果同时指定-f和-t这两个参数,-f会被忽略。
2、--frames只用于-t输入为v1格式timecode的情况。


如何运行python?
请到python官网上下载python 2.6版本(要翻墙)。
注:RiCON开发该脚本使用了Python3000的环境,而我的mod则使用Python2.6环境。
安装后把python的安装路径加入系统环境变量中。
这样,python脚本就如bat脚本一般使用。类似的还有perl脚本

还需要准备什么工具?
tcConv:脚本内部通过调用tcConv把v1格式timecode转换为v2格式
mkvmerge:脚本使用mkvmerge来分割、合并音频文件,输出mka
beSplit:脚本使用beSplit来分割、合并音频文件,输出aac

我的mod做了什么?
在保持原脚本功能不变的基础上
- 提供由aac输出aac而非mka文件的功能(借助beSplit,因此只支持aac文件输入)
- 增加 通过trim调整从ts文件抽取出来的ass字幕时轴,以适应剪切后成品。(暂时只支持utf-8编码,unicode编码会乱码)
注:请使用avs的trim来剪ts开头的cm,而不是dgindex,否则失去了头部cm的持续时间信息,字幕就无法调整了
实例:
以下命令在CMD里运行
假设片源为30000/1001的cfr
1.把audio.aac根据trim剪切为数份audio-cutted.split01.mka,...,audio-cutted.split(n).mka
  1. vfr_mod.py -i "audio.aac" -o "audio-cutted.mka" "trims.avs"
复制代码
2.把audio.aac根据trim剪切并合并
  1. vfr_mod.py -i "audio.aac" -o "audio-cutted.mka" -m "trims.avs"
复制代码
3.剪切合并audio.aac后删除split文件
  1. vfr_mod.py -i "audio.aac" -o "audio-cutted.mka" -mr "trims.avs"
复制代码
4.输出chapter文件
  1. vfr_mod.py -c "chapter.xml" "trim.avs"
复制代码
5.输出qpfile
  1. vfr_mod.py -q "qpfile.qp" "trim.avs"
复制代码
6.剪切合并音频,并输出chapter、qpfile
  1. vfr_mod.py -i "audio.aac" -o "audio-cutted.mka" -c "chapter.xml" -q "qpfile.qp" "trim.avs"
复制代码
可见,剪切合并音频、输出chapter文件、输出qpfile是独立的功能,可以分开也可以一起执行。

7.把audio.aac输出为audio-cutted.aac
  1. vfr_mod.py --b -i "audio.aac" -o "audio-cutted.aac" -mr "trims.avs"
复制代码
注:假如不添加-b参数,直接输出aac的话,程序不会报错,但输出来的实质上的挂aac之名的mka,使用mp4box封装的时候就会报错。

8.从ts中抽取出来了sometv.aas,要调整为切过cm后压制的MP4成品时轴sometv.ajust.ass
  1. vfr_mod.py --ass "sometv.ass" "trim.avs"
复制代码
假设片源为FPS的cfr,则以上命令增加参数-f FPS
假如片源为VFR,获取到到timecode文件为timecode_v1.txt,timecode_v2.txt,片源总帧数为FRAMES,则在以上命令中增加参数-t timecode_v2.txt或者-t timecode_v1.txt --frames FRAMES


vfr_mod 0.1.zip (3.98 KB, 下载次数: 14898)

评分

1

查看全部评分

发表于 2010-6-13 12:50 | 显示全部楼层
能否具体 做一个简单教程。方便初学者就更好了。。。
 楼主| 发表于 2010-6-15 00:06 | 显示全部楼层
于是,增加了调教ass字幕的功能。
发表于 2010-6-15 16:51 | 显示全部楼层
其实可以继续改进 直接从源视频文件中输入 或者添加对dts/ac3/flac这类文件的支持
这样就可以用到BDRip的压制里面
 楼主| 发表于 2010-6-15 20:18 | 显示全部楼层
其实可以继续改进 直接从源视频文件中输入 或者添加对dts/ac3/flac这类文件的支持
这样就可以用到BDRip的压 ...
reekilynn 发表于 2010-6-15 16:51


dts、ac3、flac这些mkv封装都支持的格式,其实已经不是问题了。
我之所以把aac单独揪出来做只是为了方便封装mp4而已。
至于从视频源里读取音频,视频种类多样,要是一一支持那就太麻烦了,支持度不足又没意义。
善用命令行,分离音频也可以使很方便的事情的~
发表于 2010-6-18 19:43 | 显示全部楼层
还是喜欢GUI,对于我等小白,研究命令行很TAT。。。
 楼主| 发表于 2010-6-19 22:13 | 显示全部楼层
我觉得,命令行跟使用avs滤镜有点像。
根据需要选择工具(滤镜),查看readme中的参数说明,然后敲入命令行/滤镜调用语句。

一个后期,肯定不会害怕使用avs滤镜的吧,那么为什么对命令行就望而生畏呢
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

小黑屋|手机版|NMM视频技术

GMT+8, 2024-4-25 18:19 , Processed in 0.354574 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表