
视频处理的大佬们,这里是纯兴趣玩写个笔记
如导致写压升高、吐血等反应还请见谅
以为新参数录制B站完全没中断很成功 (录过都知道录B站没断简直是奇迹)
然后发现录播的时间戳(timestamp)损坏...(一开始以为硬盘???...但同时录的其它档是好的...)
全长2小时多(2GB+)的ts档,打开视频(VLC/LAV) / mediainfo都显示长度只有47分...

不是星际玩家应该都看得出来...视频大小和文件大小对不上
但用ffmpeg解码,刚开启视频的瞬间,把进度条拉到后半的话能看到后半内容
甚至还能调戏一下进度条
不过往前半跳的话就直接卡死了
使用ffmpeg直接copy,失败,只有前47~53分(这是已经试了好几种组合...)

疯狂跳出错误 Non-monotonous DTS in output stream
慌了
疯狂谷歌...爬了一大堆英文之后发现根本没有人完整讲过该怎么处理...
东拼西凑一大堆七零八落的情报不停尝试最后终于成功修复
虽然这可能不是最好的方法...但这是我摸出来可行的方法...
首先
由于视频的时间戳损坏 往ts/flv损坏修复去找
-copytb 1 没卵用
-vsync drop、-r 这两个不转码的话无效甚至报错
然后找到一个能无视旧有时间戳的参数
use_wallclock_as_timestamps 1
这个...是直接用系统时间计时当成时间轴...没错...(一般是实时抓流时用的)
copy执行的时间,将变成视频的时间轴...(5分钟的话那你视频时间轴就是变成5分钟...)
命令大概是
ffmpeg -use_wallclock_as_timestamps 1 -fflags +genpts i corrupted_input.ts -c:v copy -c:a copy OUTPUT.mp4
出来的档案,毫不意外时间轴是坏的(只有两分多)
由于2小时多被压缩到2分多
mediainfo看起来非常的欢乐...

147Mb/s的码率...帧率1656...最大帧率16000...
BUT!!!
原本只能读到8万多帧
现在全部(25万多帧)都读到了!!!
视频大小正常了,进度条也能拉动
fps/时间轴/声音,依然损坏
查到中途
发现不转码变更帧率的话将造成视频加速或减速
但这对我们来说刚好就是我们要的结果!!
透过恢复正常码率自然生成新的时间轴
使用MKVToolNix
加载刚刚生成的MP4
下方选择视频→右边设置FPS(本案例为30)
勾选修复位元串流时间资讯(不确定是不是必要)
(之后测试加载原始ts档用这个选项修复,时间轴正常,但47分后的视频依然无法观看)
输出的档案变成了

因为原本是可变帧率 强制锁定30丢失了超过的部份...但我看不出来
时间轴修复!!
视频可观看!!
只剩下...声音还是对不上...哈哈
但这对我来说已经简单了
因为不习惯用命令行
又另外用了一个工具 StaxRip
加载前一步生成的MKV后
会自动分离出音讯 (m4a)
之后就是把视频跟音讯重新包装输出

这个工具要设置不少东西...其它直接复制不转码的工具也行
成品


算是能正常播放了
然后
写这个的同时
我发现了一个问题
原来音讯也是有帧数的...(卧草...
但时长是正常的,应该也有对上....吧
算了
我特么又通宵了
反正没人看得出来...应该...
最后想了一下可能原因
因为怕B站抽风造成中断
hls-segment-timeout设了个30秒可能太过了...
其他想不出什么问题...
不行了
继续看团长跟贝尔+魔王了
24小时的VVD真特么好看
