搜索 社区服务 统计排行 帮助
  • 1382阅读
  • 20回复

[急救!]用AVS压120FPS片子时遇到奇怪问题

楼层直达
级别: 工作组
注册时间:
2003-06-26
在线时间:
0小时
发帖:
676
只看该作者 15楼 发表于: 2004-08-12
感谢楼上的指教 我尝试一下


最初から……好きじゃなかったの……
级别: 新手上路
注册时间:
2004-04-24
在线时间:
0小时
发帖:
132
只看该作者 16楼 发表于: 2004-08-13
按以下方法`能读``绝对同步``

LoadPlugin("VSFilter.dll")
v=AVISource("E:\eMule\Incoming\Masaru Ashita no Yukinojoe 2 Vol.2.avi",false).ChangeFPS(23.970)
a=DirectShowSource("E:\eMule\Incoming\Masaru Ashita no Yukinojoe 2 Vol.2.avi",video=false)
AudioDub(v,a)
textsub("E:\eMule\Incoming\Masaru Ashita no Yukinojoe 2 Vol.2.ssa")

第一:
这样就可以的了``
用DirectShowSource读取不同步是因为WMV9用DirectShowSource读取WMV9已经把`输出帧定死了为`默认帧`30帧``因为WMV9帧数是动态的``
固定死每秒读取输出帧``那么`你用什么帧值都不会同步``

第二:WMV9``用AVISource读取不了`因为你没有装好足够插件或音频问题``
把音频和视频分开写AVISource就可以读WMV9的AVI`

PS:请装好以下三样插件``
WM9Codecs.exe`
WM9Powertoy_TweakMP.EXE
wmv9VCMsetup.exe
级别: 新手上路
注册时间:
2004-04-24
在线时间:
0小时
发帖:
132
只看该作者 17楼 发表于: 2004-08-13
以下是我在某教程中写的一段``

AVISource读取不了
有的人可能试过用Directshowsource来读WMV.AVI`压制出后发现后面慢慢出现`不同步`
用`Directshowsource很多时会不同步`特别是WMV9`
如`Directshowsource("WMV9.AVI".FPS=24)每秒播放24帧`
因为WMV9的帧数是活动的(XIVD没有动态FPS)`如有4秒是30帧`每秒才读了24帧`
视频就比音频慢了1秒``(每秒读少了6帧`4秒就少读取24帧)
不论你定任何值都会不同步`可能有人会说:为什么你又说120FPS使用.ChangeFPS(XXX)来做?
这2个的性质不同`一个是指定每秒读取输出多少帧`一个是把输出帧数改变

LoadPlugin("VSFilter.dll")
v=AVISource("***.AVI",audio=false)
WMV9.AVI无法用AVISource是因为音频`audio=false意思去掉音频这样AVISource就可读了`
a=DirectShowSource("***.AVI",video=false)
刚才把视频的音频去掉了`这句是使用"DirectShowSource"读取无视频(video=false)的AVI`
VBR音频问题也用这方法`这样一把音视频分开来写`就解决了VBR做成不同步
AudioDub(v,a)
级别: 风云使者
注册时间:
2003-05-04
在线时间:
1小时
发帖:
6095
只看该作者 18楼 发表于: 2004-08-13
其实如果音频是mp3 vbr,加一句EnsureVBRMP3Sync就行了,可以替代视频音频分开写的过程

一般情况(比如音频是常见的mp3)avisource也可以读取包含音频的wmv9.avi的,只有音频是较特殊的编码时才需要分开写
级别: 版主
注册时间:
2001-11-21
在线时间:
0小时
发帖:
2803
只看该作者 19楼 发表于: 2004-08-13
引用
最初由 skyccy 发布
以下是我在某教程中写的一段``

AVISource读取不了
有的人可能试过用Directshowsource来读WMV.AVI`压制出后发现后面慢慢出现`不同步`
用`Directshowsource很多时会不同步`特别是WMV9`
如`Directshowsource("WMV9.AVI".FPS=24)每秒播放24帧`
因为WMV9的帧数是活动的(XIVD没有动态FPS)`如有4秒是30帧`每秒才读了24帧`
视频就比音频慢了1秒``(每秒读少了6帧`4秒就少读取24帧)
不论你定任何值都会不同步`可能有人会说:为什么你又说120FPS使用.ChangeFPS(XXX)来做?
这2个的性质不同`一个是指定每秒读取输出多少帧`一个是把输出帧数改变

LoadPlugin("VSFilter.dll")
v=AVISource("***.AVI",audio=false)
WMV9.AVI无法用AVISource是因为音频`audio=false意思去掉音频这样AVISource就可读了`
a=DirectShowSource("***.AVI",video=false)
刚才把视频的音频去掉了`这句是使用"DirectShowSource"读取无视频(video=false)的AVI`
VBR音频问题也用这方法`这样一把音视频分开来写`就解决了VBR做成不同步
AudioDub(v,a)


其实AVI的wmv是不可能有动态FPS的, 因为AVI不支持动态FPS, 可能只有用asf才能有vfr.
另外xvid是可以用vfr的, 其实任何codec都可以用vfr, 只要容器格式支持就行了.

live id: liusu119@hotmail.com
email: liusu119@gmail.com
级别: 版主
注册时间:
2002-12-02
在线时间:
0小时
发帖:
3002
只看该作者 20楼 发表于: 2004-08-14
其實有興趣的
可以下 AviSynth 源碼來看看
會發現 DirectShowSource 是直接引用 windows 系統 的 DirectX而設計的
因此作者並沒多少可操作的地方
avg_time_per_frame = 10000000 / vi.fps_numerator * vi.fps_denominator

有音訊的情況下
FPS 是靠音訊長度、bitrate除得
所以會不同步主要是 VBR 音訊的緣故
(視訊的 fps 是固定是變動都無法改善,是固定可用 EnsureVBRMP3Sync 改善)

快速回复

限150 字节
上一个 下一个