『漫游』酷论坛>『影音数码技术学习交流』>[求助]MP4压片出现影音 ..

dft2000@2010-04-15 09:36

avs 用directshow 直接打开 mp4 ,textsub加字幕
megui 的视频 音频都选这个AVS,自动生成任务压就得了,
这么麻烦还先分离视频音频 ,处理视频最后再合成,何苦呢?
引用

roozhou@2010-04-15 09:44

引用
最初由 dft2000 发布
avs 用directshow 直接打开 mp4 ,textsub加字幕
megui 的视频 音频都选这个AVS,自动生成任务压就得了,
这么麻烦还先分离视频音频 ,处理视频最后再合成,何苦呢?

这个办法就会有不同步的问题。
用direct264里的x264直接压mp4,用--sub加载字幕,然后就什么也不用做了。音频直接复制,不用转压。
引用

dft2000@2010-04-15 09:52

引用
最初由 roozhou 发布

这个办法就会有不同步的问题。
用direct264里的x264直接压mp4,用--sub加载字幕,然后就什么也不用做了。音频直接复制,不用转压。


大哥这个怎么会不同步?你的direct264 也是用directshow打开视频,替x264省去了AVS而已。
这个方法只是在前段加了个AVS,视频音频都交给了AVS去处理,这和播放器播放是一个效果的,和你的效果也是一样的,只是要比你的重新做一次音频转码而已。
你看看这个:
脚本,这么些会导致音频视频不同步吗?directshowsource 不要禁用audio 同时强制作帧率转换,
LoadPlugin("C:\Program Files\K-Lite Codec Pack\Filters\vsfilter.dll")

#Megui
global MeGUI_darx = 16
global MeGUI_dary = 9
#return last
DirectShowSource("*.mp4",23.976,convertfps=true)
ConvertToYV12()
TextSub(...)
LanczosResize(...)
引用

a4840639@2010-04-15 10:26

引用
最初由 dft2000 发布


大哥这个怎么会不同步?你的direct264 也是用directshow打开视频,替x264省去了AVS而已。
这个方法只是在前段加了个AVS,视频音频都交给了AVS去处理,这和播放器播放是一个效果的,和你的效果也是一样的,只是要比你的重新做一次音频转码而已。
你看看这个:
脚本,这么些会导致音频视频不同步吗?directshowsource 不要禁用audio 同时强制作帧率转换,
LoadPlugin("C:\Program Files\K-Lite Codec Pack\Filters\vsfilter.dll")

#Megui
global MeGUI_darx = 16
global MeGUI_dary = 9
#return last
DirectShowSource("*.mp4",23.976,convertfps=true)
ConvertToYV12()
TextSub(...)
LanczosResize(...)

很简单的问题
AVS必须用"convertfps=true"(别告诉我你不知道这是什么意思),请问你平时播放的时候都用这个?辛辛苦苦做VFR的RIPPER内牛满面
direct264可以直接保留VFR
引用

roozhou@2010-04-15 11:11

引用
最初由 dft2000 发布


大哥这个怎么会不同步?你的direct264 也是用directshow打开视频,替x264省去了AVS而已。

科普一下AVS的几个基本的限制:

1)帧率必须事先知道并且固定
2)总帧数必须事先知道(即视频长度必须事先确定)
3)不知道SAR,DAR为何物。

而这些限制在DirectShow里是没有的,DirectShow每一帧都有自己开始时间和结束时间的时间戳,所以fps是不需要的。至于视频长度,这个更加不重要了,只要在播放到结尾时发一个EndOfStream的消息出来就可以了。因此很多DirectShow解码器和分离器并不总是报告正确的长度和fps,因为这根本不重要。

所以DirectShow和AVS本质上是不兼容的,DirectShow大量灵活特性不能在AVS里使用。DirectShowSource必须对DirectShow的做很多修正来适应AVS的各种限制。加了convertfps=true后,DSS会通过删帧和加重复帧来强制匹配预设的帧率并避免不同步。而且如果DirectShow一开始返回的长度比实际长度短,那后面的就被截掉了,如果比实际长度长,则后面不足的部分DSS会用黑帧填充,或从头开始重新播放。

而我的direct264完全没有这些问题。首先完全没有帧率的限制,每一帧都是用的原来的时间戳,其次也没有长度的限制,将其当成一个长度未知的流来处理,一直到EndOfStream或者到达指定的结束位置才停止,不会删帧或复制帧。同时可以从解码器获取DAR,从而计算出正确的SAR,不需要手动计算和指定。
引用

roozhou@2010-04-15 11:13

发了两遍
引用

dft2000@2010-04-15 14:34

引用
最初由 a4840639 发布

很简单的问题
AVS必须用"convertfps=true"(别告诉我你不知道这是什么意思),请问你平时播放的时候都用这个?辛辛苦苦做VFR的RIPPER内牛满面
direct264可以直接保留VFR



这楼主目地是要在已经被rip出来的视频内嵌字幕,你觉的还需要考虑那么多东西么?简单的达到目地就好了!
他又不是为了 rip 或者其他的,真要追求细节的话,你就不要用什么directshow了。直接调用解码器好了,还方便移植多多平台!
引用

a4840639@2010-04-15 23:54

引用
最初由 dft2000 发布



这楼主目地是要在已经被rip出来的视频内嵌字幕,你觉的还需要考虑那么多东西么?简单的达到目地就好了!
他又不是为了 rip 或者其他的,真要追求细节的话,你就不要用什么directshow了。直接调用解码器好了,还方便移植多多平台!

直接调用“解码器”?原来Directshow上的filters都不能算"解码器"
direct264本来就可以很简单的解决这个问题,现在GUI也有了,你非要去用那个蹩脚的directshowsource,十足蛋疼。
引用

MATOI@2010-04-17 10:51

引用
最初由 roozhou 发布

我不负责维护GUI,我只是做那个命令行工具。你可以用多个--sub参数加载多条字幕,但是字幕的位置必须要自己在字幕文件中设置好,不会自动处理冲突的问题,如果都是默认的位置,字幕会叠在一起。


不好意思
如何用多个--sub参数加载多条字幕
引用

264768502@2010-04-17 10:57

自己用记事本打开字幕,复制黏贴合并成一个字幕吧
引用

MATOI@2010-04-17 16:34

引用
最初由 264768502 发布
自己用记事本打开字幕,复制黏贴合并成一个字幕吧


我有想过这点
但三个的使用字型不一样
又都有Default
所以就想加三组字幕会不会比较好

-------------Updata--------------
我把三个字幕黏贴合并成一个字幕
部份字幕秀出来的位置和原本的不同
引用

264768502@2010-04-17 16:58

字体设置改个别的名字不就好了,批量修改又不是什么麻烦事
字幕位置除非和其它字幕冲突,不然不会不同的
引用

厄多斯信徒@2010-04-17 17:07

引用
最初由 264768502 发布
字体设置改个别的名字不就好了,批量修改又不是什么麻烦事
字幕位置除非和其它字幕冲突,不然不会不同的


会不同的 只要原来三个字幕的PlayResX和PlayResY不同 合并后就会出这种问题的
引用

MATOI@2010-04-17 19:29

谢谢各位大大的帮忙
我已经压制成功了
感谢各位~
引用

«12»共2页

| TOP