分页: 1 / 3

针对特殊TS,如何获取正确音频DELAY?

发表于 : 2015-02-04 21:43
keroro123
最近压制NHK的红白,发现了但凡TS中有新闻的,或是TS是5.1声道aac的,例如红白:上部+新闻+下部或者其他一些LIVE

使用DGINDEX分离出来的DELAY值完全对不上号,但是其他NHK TS由DGINDEX分析出来的延迟是对的,就是这种特殊TS,每年红白都这样

例如这届的,DGINDEX分析出来的结果是:-99ms,但经过人工测定,需要+99ms才能基本对上口型,这是怎么回事呢?

最后只好手工调整,还不一定准确,请问还有其他方法能够正确分析出DELAY吗?

Re: 针对特殊TS,如何获取正确音频DELAY?

发表于 : 2015-02-05 9:52
猫耳幽香
这个情况我自己也遇到过很多次,也是搞不明白原因。
不过有解决方法:将视频用eac3to以mkv的方式抽出即可从此妈妈再也不用担心DelayAudio问题了
附:eac3to语法:https://www.nmm-hd.org/doc/Eac3to

据逝雪大姐说,所有的软件都能正确地读取DelayAudio,但是就我个人角度而言,这句话存在疑问,疑问的来由是你提问的内容
比如说在过dg以后出来的音频文件名中的delay数为什么和eac3to中提供的delay不一样?
图片
比如说为什么用mkv抽视频以后这个问题就没了?
比如为啥论坛的回帖我总是收不到消息提醒

鸠子中……

Re: 针对特殊TS,如何获取正确音频DELAY?

发表于 : 2015-02-05 19:08
dgwxx
也可以用tssplitter自动在音频切换的位置切割ts后分别处理,把ts切成红白1、新闻、红白2三个部分,然后再把红白1+红白2拼到一起。
尽管这么做比较EP……

Re: 针对特殊TS,如何获取正确音频DELAY?

发表于 : 2015-02-05 22:48
keroro123
感谢LS两位大大耐心的回复,感觉最好的解决方法还是能够获得正确的DELAY值,芳乃琴里樱大大说的方法,是否由EAC3TO将TS封装成MKV,然后再由EAC3TO将MKV中的音频抽取出来呢?

那主视频是否仍能沿用原来DGINDEX制作的D2V进行压制?还是说需要EAC3TO合成以后的MKV再用FFMS对视频进行分析压制?

就视频而言,TS和MKV化后的主视频应该无变化的吧?

即是说:EAC3T0 将TS->MKV,然后EAC3T0 将MKV提取的AAC跟视频合并(由D2V制作的视频或MKV后由FFMS分析制作的视频),就可以正确的同步?

Re: 针对特殊TS,如何获取正确音频DELAY?

发表于 : 2015-02-06 2:46
猫耳幽香
题外话
update:
2015/02/22:更新「如何精确切割音频」和「eac3to判定音频轨道类型原理」。
keroro123 写了:感谢LS两位大大耐心的回复,感觉最好的解决方法还是能够获得正确的DELAY值,芳乃琴里樱大大说的方法,是否由EAC3TO将TS封装成MKV,然后再由EAC3TO将MKV中的音频抽取出来呢?
首先存在一个误区:不是音视频都封装进mkv。
在前面的回复中我给出过一个eac3to的中文说明页面链接,里面的语法规则是:

代码: 全选

>eac3to sourcefile[+sourcefile2] [trackno:] [destfile|stdout] [-options]
例如:

代码: 全选

>ea3to 00000.m2ts 2: audio_3.ac3 -640 3: audio_4.dts -core 4: audio_5.m4a -quality=0.5 4: audio_6.flac 5: sub_1.sup
什么意思呢?就是抽出指定轨道的什么流,提取并封装为指定格式,轨道和输出文件是一一对应的
你的错误就在于:eac3to在输出时,轨道和输出文件是一一对应的,没有两个流(如音视频流)同时混入一个容器的说法,这点从语法格式上就可以看出。
所以正确的抽出语法为:

代码: 全选

eac3to "0000.ts" 1: "Video.mkv" 2: "Audio.aac"
也就是将音视频流分开导出,只是在同一批次中处理罢了。

回到正题:
keroro123 写了:那主视频是否仍能沿用原来DGINDEX制作的D2V进行压制?还是说需要EAC3TO合成以后的MKV再用FFMS对视频进行分析压制?……即是说:EAC3T0 将TS->MKV,然后EAC3T0 将MKV提取的AAC跟视频合并(由D2V制作的视频或MKV后由FFMS分析制作的视频),就可以正确的同步?
eac3to在进行音频抽出工作的时候,会自动修正delay值,也就是你不指定delay多少ms它也会自动修正。使用eac3to抽出音视频流我暂时没遇到过判断出错或者其它音画不同步的情况。

D2V法应该是很正统的方法,从方法上来说我觉得是没有问题的。我不知道是不是编码问题,导致用eac3to抽出的音频,用d2v挂载视频时经常出现音画不同步的情况。只有一次我用dgindex自带的抽出音频功能进行处理,结果偏偏那一次没有出现音画不同步的情况。我自己也表示期待获得解答。

于是就顺带有了个猜想:
是否由于编码原因,dgindex在导出音频的时候,会自动根据实际情况进行DelayAudio再修正(也就是不利用原生ts中提供的Delay数据)?因而用dg导出的音频只能配dg导出的d2v,用eac3to导出的音频只能配用eac3to导出的视频?
持续鸠子中——
keroro123 写了:那主视频是否仍能沿用原来DGINDEX制作的D2V进行压制?还是说需要EAC3TO合成以后的MKV再用FFMS对视频进行分析压制?
用什么方法其实无所谓,只要正确就行。你说的d2v和eac3to法都是我们常用的方法。另一种方法我个人没有涉猎,就是用LSMASH直接挂ts,但是与此对应,必须用LSMASH挂Audio并手动指定AudioDelay。(我见过极影的几个后期做TVRip的时候全都用这种方法没出过问题,所以也放在这里了。但根据一些大神说,经过AudioDub后的音频频谱不能看。)
3Lwxx的tssplitter法我没有尝试过,仅作列出。
keroro123 写了:就视频而言,TS和MKV化后的主视频应该无变化的吧?
这句话应该怎么说呢?只要视频编码一致是没有变化,但是封装容器的基准精度是不同的,比如你把ts封装成mkv后,挂到avs里去会发现fps有异常,那个就是精准精度问题导致的,手动指定AssumeFPS即可。

精确切割2ch+5.1ch交错的具体方法:https://www.nmm-hd.org/newbbs/viewtopic ... 639#p12639
eac3to判定音频轨道类型原理:https://www.nmm-hd.org/newbbs/viewtopic ... 567#p12567

注:考虑到tsspliter有楼下所述的几个问题,所以不再做介绍。

另外提醒一下,回复别人请单击对方回复中右上角的引用(如何引用?),否则对方是收不到消息提醒的。
keroro123 写了:感谢LS两位大大耐心的回复,感觉最好的解决方法还是能够获得正确的DELAY值,芳乃琴里樱大大说的方法,是否由EAC3TO将TS封装成MKV,然后再由EAC3TO将MKV中的音频抽取出来呢?

那主视频是否仍能沿用原来DGINDEX制作的D2V进行压制?还是说需要EAC3TO合成以后的MKV再用FFMS对视频进行分析压制?

就视频而言,TS和MKV化后的主视频应该无变化的吧?

即是说:EAC3T0 将TS->MKV,然后EAC3T0 将MKV提取的AAC跟视频合并(由D2V制作的视频或MKV后由FFMS分析制作的视频),就可以正确的同步?

Re: 针对特殊TS,如何获取正确音频DELAY?

发表于 : 2015-02-07 8:58
msg7086
芳乃琴里樱 写了:
我就和你确认一件事情。
你上面说的步骤是说的处理普通TS还是说的处理NHKG那样5.1ch+2ch混用,或者1track+2tracks混用的TS?

另外,WXX的名字里是wxx,不是wwx。

Re: 针对特殊TS,如何获取正确音频DELAY?

发表于 : 2015-02-07 12:24
keroro123
msg7086 写了:
芳乃琴里樱 写了:
我就和你确认一件事情。
你上面说的步骤是说的处理普通TS还是说的处理NHKG那样5.1ch+2ch混用,或者1track+2tracks混用的TS?

另外,WXX的名字里是wxx,不是wwx。
芳乃琴里樱大大指出的,EAC3TO输出AAC以后会将音频延迟自动修正,即是说,原本无论延迟是多少,经过修正后,MUX的时候都不需要写入延迟数,直接延迟是0,是这样吗?如果是的话就太方便了,再也不用管延迟数值的问题,统一变成0了。

另外,msg大大所问的,就是NHKG的视频,但其他的一些视频也试到过,例如TVTOKYO的一些LIVE SHOW,是5.1ch的,但具体这个红白是5.1ch+2ch或是1track+2tracks就不得而知了,但是我想,如果找到了方案能够处理,应该算是一样的吧?

以下是MEDIA INFO输出的,看样子是有两条音频,但是播放的时候只能选一条啊,这种要怎么处理才能同步呢?
概要
ID : 32736 (0x7FE0)
完整名称 : E:\65th nhk kouhaku uta gassen nhkg 20141231.ts.ts
文件格式 : MPEG-TS
文件大小 : 30.4 GiB
长度 : 4小时 30分
开始时间 : UTC 2014-12-31 19:14:59
结束时间 : UTC 2014-12-31 23:44:59
混合码率模式 : VBR
平均混合码率 : 16.1 Mbps
网络名称 : 4XEl9-0h#0

视频
ID : 256 (0x100)
菜单ID : 1024 (0x400)
文件格式 : MPEG Video
格式版本 : Version 2
格式简介 : Main@High
格式设置, BVOP : 是
格式设置, Matrix : 自定义
格式设置, GOP : Variable
Format_Settings_PictureStructure : Frame
编码设置ID : 2
长度 : 4小时 29分
码率模式 : VBR
最大码率 : 24.0 Mbps
画面宽度 : 1 440像素
画面高度 : 1 080像素
画面比例 : 16:9
帧率 : 29.970 fps
色彩空间 : YUV
色度抽样 : 4:2:0
位深度 : 8位
扫描方式 : 隔行扫描
扫描顺序 : 奇数场(前场TFF)优先
压缩模式 : 有损压缩
TimeCode_FirstFrame : 14:46:37;18
TimeCode_Source : Group of pictures header
颜色初选 : BT.709
传输特质 : BT.709
矩阵系数 : BT.709

音频 #1
ID : 272 (0x110)
菜单ID : 1024 (0x400)
文件格式 : AAC
文件格式/信息 : Advanced Audio Codec
格式版本 : Version 2
格式简介 : LC
混合模式 : ADTS
编码设置ID : 15
长度 : 4小时 30分
码率模式 : VBR
声道 : 2声道
声道位置 : Front: L R
采样率 : 48.0 KHz
压缩模式 : 有损压缩
视频延迟 : -150ms

音频 #2
ID : 273 (0x111)
菜单ID : 1024 (0x400)
文件格式 : AAC
文件格式/信息 : Advanced Audio Codec
格式版本 : Version 2
格式简介 : LC
混合模式 : ADTS
编码设置ID : 15
长度 : 4小时 29分
码率模式 : VBR
声道 : 2声道
声道位置 : Front: L R
采样率 : 48.0 KHz
压缩模式 : 有损压缩
视频延迟 : 5秒 290ms

文本
ID : 304 (0x130)-1
菜单ID : 1024 (0x400)
文件格式 : ARIB STD B24/B37
格式简介 : HD side panel
混合模式 : CCIS
编码设置ID : 6
码率模式 : CBR
大小 : 0.00字节 (0%)
语言 : Japanese
Encryption : Encrypted

Re: 针对特殊TS,如何获取正确音频DELAY?

发表于 : 2015-02-07 16:42
msg7086
差远了。1audio变成2audio估计还好,5.1和2.0交错的,根本没法这么玩。

eac3to是可以自动修正音频,还可以自动填gap,很好用,压ts首选。
但是你要注意,eac3to没法完全精确切割。
也就是说,如果你的音频是5.1/2.0交错的,则完全不能保证你切到了正确的点上。
只要切割不精确,就会造成播放上出问题。
再说了,切割本来就精确不了。
就说前几年的红白,或者TBS的4K版纪录片,广告是2.0,正片是5.1。
你同样的切割方法会造成什么后果,就是切割时间计算错误。
比如你要切10秒,而2.0的部分只有1秒。
最后不会变成2.0切掉1秒,5.1切掉9秒,而是会变成2.0切掉1秒,5.1切掉3秒,因为5.1的码率是2.0的3倍。

所以切这种素材,比较理想的办法是,先多切一点点TS,比如多切0.1秒的TS,直到eac3to正确识别到5.1ch轨道以后,再分离aac,然后再补延迟。
这里补延迟基本上是靠播放器来回调延迟并且用肉眼对比,然后再用eac3to补延迟,再封装进mp4box里,再切掉尾巴,再作为成品合并的。

Re: 针对特殊TS,如何获取正确音频DELAY?

发表于 : 2015-02-07 17:03
msg7086
~
  20 seconds        1 hour                20 seconds
[- ADS 2.0ch -|---PROGRAMME 5.1 --....--|- ADS 2.0ch -]
    192kbps  gaps   384kbps            gaps  192kbps


> eac3to xx.ts
2: AAC, 2.0 channels


[- ADS 2.0ch -|---PROGRAMME 5.1 --....--|- ADS 2.0ch -]
          ---^ If cut here -> Part of 2.0ch remains at head part
> eac3to cut.ts
2: AAC, 2.0 channels


[- ADS 2.0ch -|---PROGRAMME 5.1 --....--|- ADS 2.0ch -]
            ---^ If cut here -> Part of 5.1ch got cut at head part
> eac3to cut.ts
2: AAC, 5.1 channels
> eac3to cut.ts cut.aac

Now your aac looks like:
--PROGRAMME 5.1 --....--|- ADS 2.0ch -]
^--- lost some frames here

Then pad the delay back
> eac3to cut.aac padded.aac +XXXms
Now your aac looks like:
[P--PROGRAMME 5.1 --....--|- ADS 2.0ch -]

Then cut the tail
> muxer -i padded.aac -o padded.m4a
> mp4box -splitx 0:3600 padded.m4a
Now your audio looks like:
[P--PROGRAMME 5.1 --....--]
                          ^-- 3600.0 seconds

Done

Re: 针对特殊TS,如何获取正确音频DELAY?

发表于 : 2015-02-07 17:14
cunhan
用tssplitter切吧,能根据音频类型的切换点来切割,应该没有什么后遗症?