深度录屏几乎快完美了
Tofloor
poster avatar
wangyong
deepin
2018-01-25 10:08
Author
今天晚上参加了WHLUG, 和肥猫大神(玩Arch的都认识)现场交流,一口气修复了三个重要的Bug。

1、GIF录制的时候,录制的时间稍微长一点,最后录制的GIF总是不全(今天彻底修复了,补丁: https://github.com/manateelazyca ... a8da37053f471541d83)
2、GIF录制太快(比如就录制1秒钟,深度内部的变态测试大神的快手)时会导致GIF文件损坏,无法播放
3、MP4文件录制因为 ffmpeg "width/height not divisible by 2" 的错误,总是生成0字节的mp4文件,无法播放 (补丁: https://github.com/manateelazycat/deepin-screen-recorder/commit/a49612faed28fc70a98aa117839cc67d96b99761)

技术细节分享:
1、GIF丢东西和文件损坏都是因为原来深度录屏结束的时候,直接kill调GIF后台进程byzanz-record导致的, byzanz-record隔几秒机会把当前录制的GIF片段写到临时文件中,然后定期合并这些磁盘的临时文件追加到最后的GIF文件中,因为录屏原来是直接kill byzanz-record 进程,导致 byzanz-record 还没有合并完所有的临时文件就被杀掉了,因故用户最后看到的GIF文件内容就不完全。

解决方案:给 byzanz-record 命令添加 --exec 'sleep 365d' 的参数,sleep 365d 命令的意思是休息 365 天的意思(哈哈哈),只要 sleep 进程不退出,byzanz-record 进程就永远的录制GIF, 当用户结束录屏的时候,就顺藤摸瓜从 byzanz-record 找到 sleep 进程的pid, 杀死 sleep 进程后 byzanz-record 就知道自己该退出了,最后深度录屏进程再等着 byzanz-record 进程正常退出后,录制的GIF内容就完整了,也不会有损坏的问题。

简单来说解决方案,就是 “深度录屏这个老子,通过杀死自己孙子(sleep命令)的方式让自己的儿子(byzanz-record)心甘情愿的自杀”

2、MP4的问题是原来有很多用户抱怨深度录屏录制的mp4文件,不能在手机微信上播放,因为微信的视频播放器解码不了 ffmpeg 默认的yuv444p图形格式,所以我把ffmpeg mp4的图形格式改成yuv420p,yuv420p的mp4文件虽然可以在手机上播放,但是会导致如果用户截取的屏幕区域不是偶数的时候,ffmpeg 会直接崩溃,导致最后录制的mp4文件都是0字节。

解决方案:通过-vf scale=trunc(iw/2)*2:trunc(ih/2)*2 的方式结局了奇数大小报错的问题。

最后,为什么标题是“几乎完美”?因为我知道你们都在等我的录屏可以支持双屏自由录制的功能,我都在我的todolist上记录着的呢,一定会把深度录屏做完美的,让你们无可挑剔,哈哈哈哈。


最最最后,附件中有深度录屏的最新开发版,下载点击即可安装更新(FlatPak版的录屏需要先卸载了),等内部质量测试通过后,会通过更新进行推送的。

Reply Favorite View the author
All Replies
1 / 3
To page
avatar
nocode
deepin
2018-01-25 10:26
#1
sofa,这晚还在战斗老王这是趁热打铁么?
Reply View the author
avatar
9***8@qq.com
deepin
2018-01-25 10:26
#2
主要是无压缩格式,在4K屏下,现在的版本压得跟屎一样。
抱歉说了脏字,但真的是屎一样。
Reply View the author
Comments
jdocker
2018-01-25 19:28
我希望你还是多说人话比较好,说话都不会说。
avatar
9***8@qq.com
deepin
2018-01-25 10:29
#3
建议发 flatpak 打包的



Reply View the author
avatar
wangyong
deepin
2018-01-25 10:29
#4
https://bbs.deepin.org/post/152349
主要是无压缩格式,在4K屏下,现在的版本压得跟屎一样。
抱歉说了脏字,但真的是屎一样。 ...

深度录屏早已支持了无损录制,你在配置文件 ~/.config/deepin/deepin-screen-recorder/config.conf
把 lossless_recording 选项设置为 true 的时候,深度录屏录制的就是无损视频, mkv格式(但是文件会超级大)

反馈问题就反馈问题,我发现你的很多帖子说话都不尊重人(不是指我,我无所谓),我希望你能够和大家友好交流,有问题耐心讨论,不要动不动就说脏话
Reply View the author
avatar
wangyong
deepin
2018-01-25 10:31
#5
https://bbs.deepin.org/post/152349
sofa,这晚还在战斗老王这是趁热打铁么?

深度编辑器写high了,突然来了一大堆修复录屏问题的灵感,挡都挡不住。
Reply View the author
avatar
wangyong
deepin
2018-01-25 10:31
#6
https://bbs.deepin.org/post/152349
建议发 flatpak 打包的

flatpak 的要系统开发者才能构建,实在着急可以git上去编译,编译后软链接就可以马上用。
Reply View the author
avatar
50******99@qq.com
deepin
2018-01-25 10:31
#7
加油  夜战到底
Reply View the author
avatar
wangyong
deepin
2018-01-25 10:32
#8
https://bbs.deepin.org/post/152349
加油  夜战到底

我要睡觉了,明天还要爬起来写文档,晚上加班写深度编辑器(主要是写标签合并的代码)
Reply View the author
avatar
ritter
deepin
2018-01-25 12:30
#9
https://bbs.deepin.org/post/152349
我要睡觉了,明天还要爬起来写文档,晚上加班写深度编辑器(主要是写标签合并的代码) ...

老王你天天加班不怕隔壁老王吗?
Reply View the author
avatar
RucLinux
deepin
2018-01-25 13:51
#10
微信不能播放视频的原因很简单,视频用libx264或x264, 音频使用aac编码即可以。我经常用ffmpeg录制屏幕和转换文件,之前用mencoder的截取文件的时候曾经遇到过这样的问题,参考:http://www.myzhenai.com.cn/post/2695.html

ffmpeg 里用 -vcodec libx264 -acodec aac 的时候就很没有什么问题。
Reply View the author
avatar
Dracarys
deepin
2018-01-25 15:13
#11
深度录屏这个老子,通过杀死自己孙子(sleep命令)的方式让自己的儿子(byzanz-record)心甘情愿的自杀,好残忍的感觉
Reply View the author
avatar
le******ly@163.com
deepin
2018-01-25 16:52
#12
本帖最后由 lethappyfly 于 2018-1-25 09:22 编辑
https://bbs.deepin.org/post/152349
深度编辑器写high了,突然来了一大堆修复录屏问题的灵感,挡都挡不住。

这个是作为白天偷懒的借口吗?
Reply View the author
avatar
wangyong
deepin
2018-01-25 17:05
#13
https://bbs.deepin.org/post/152349
微信不能播放视频的原因很简单,视频用libx264或x264, 音频使用aac编码即可以。我经常用ffmpeg录制屏幕和转 ...

经过公司大神的指点,用  -vf=scale=trunc(iw/2)*2:trunc(ih/2)*2  就可以修复奇数大小导致ffmpeg崩溃的问题,这个补丁以后,不但可以在手机上播放,而且也不会报错了。

https://github.com/manateelazyca ... 117839cc67d96b99761
Reply View the author
avatar
leonardo520
deepin
2018-01-25 17:09
#14
支持语音不?
Reply View the author
avatar
152******80
Advanced Packager
2018-01-25 17:21
#15
这个才是程序猿了啊,那天老王10点就睡觉了太反常了?
Reply View the author
avatar
kim213
deepin
2018-01-25 17:35
#16
要不要这么牛,膜拜,
Reply View the author
avatar
pikachuhy
deepin
2018-01-25 17:40
#17
https://bbs.deepin.org/post/152349
这个才是程序猿了啊,那天老王10点就睡觉了太反常了?

不对 那天看到他12点后有继续刷论坛
Reply View the author
avatar
duanyao
deepin
2018-01-25 18:07
#18
https://bbs.deepin.org/post/152349
深度录屏早已支持了无损录制,你在配置文件 ~/.config/deepin/deepin-screen-recorder/config.conf
把 lo ...

不如直接允许用户设置 crf 值。默认值也可以调一调,接近肉眼无损就行了(17-18)。

https://trac.ffmpeg.org/wiki/Encode/H.264

The range of the CRF scale is 0–51, where 0 is lossless, 23 is the default, and 51 is worst quality possible. A lower value generally leads to higher quality, and a subjectively sane range is 17–28. Consider 17 or 18 to be visually lossless or nearly so; it should look the same or nearly the same as the input but it isn't technically lossless.

The range is exponential, so increasing the CRF value +6 results in roughly half the bitrate / file size, while -6 leads to roughly twice the bitrate.
Reply View the author
avatar
duanyao
deepin
2018-01-25 18:15
#19
Windows 自带的 h264 解码器也是不能处理 yuv444p 的,虽然不用WMP的用户可能注意不到。为什么我知道?因为我也做过录屏。
Reply View the author
avatar
wangyong
deepin
2018-01-25 18:59
#20
https://bbs.deepin.org/post/152349
不如直接允许用户设置 crf 值。默认值也可以调一调,接近肉眼无损就行了(17-18)。

https://trac.ffmpe ...

用户会觉得设置的越高越好,单其实高到一定程度以后, ffmpeg 就不会工作了。 ;)
Reply View the author
1 / 3
To page