rabbitism / GadioVideo

Generate Gadio videos from existing gadio timeline..
https://www.bilibili.com/video/av59856563
MIT License
211 stars 13 forks source link

.AVIF格式的图片似乎不支持 #30

Open LainHE opened 1 year ago

LainHE commented 1 year ago

您好,
挖巨坑、炸月亮、掉头发:《流浪地球2》的故事如何诞生 这期电台中, 时间轴第 9:46 所附的图片为 .avif 格式

屏幕截图 2023-02-05 011045

以下为 data.json 相关节选:

....
 {
            "id": "213337",
            "type": "timelines",
            "attributes": {
                "at": 586,
                "title": "拍不出来",
                "asset": "be294baaee4bb07ba5aedaaffb821b88.avif",
                "content": "而敲定了大致剧本以后,在筹备期间遇到的问题就成了“这个拍不出来”或者“这别想了”。",
                "quote-href": "",
                "comments-count": 0
            },
            "relationships": {
                "media": {},
                "comments": {}
            }
....

以下为报错相关节选:

....
Title: 早早定档
早在2020年,《流浪地
球2》就官宣定档于
2023的大年初一。
Traceback (most recent call last):
  File "gcores.py", line 36, in <module>
    main(int(title), skip_crawling, with_quote)
  File "gcores.py", line 15, in main
    Video.create_video(radio)
  File "****/GadioVideo-master/gadio/media/video.py", line 32, in create_video
    frame = Frame.create_page(radio.timeline[radio.timestamps[i]], radio)
  File "****/GadioVideo-master/gadio/media/frame.py", line 74, in create_page
    background_image = Frame.expand_frame(image, Frame.width, Frame.height)
  File "****/GadioVideo-master/gadio/media/frame.py", line 174, in expand_frame
    width_ratio = image.shape[1] / target_width
AttributeError: 'NoneType' object has no attribute 'shape'

运行至该处时会报错, 请问是否有临时解决方法? 直接修改 data.json 数据并替换图片似乎无法改变程序的运行 (经检查即使加了 -s, data.json 修改后会还是会被改回去)

#设置 data.json 为只读之后的报错:

****/GadioVideo-master$ python gcores.py 161519 -s

Extracting information from  161519
{'categories': 1, 'medias': 1, 'timelines': 71, 'users': 3}
Traceback (most recent call last):
  File "gcores.py", line 36, in <module>
    main(int(title), skip_crawling, with_quote)
  File "gcores.py", line 9, in main
    parsed_json = Crawler.crawl(id)
  File "****/GadioVideo-master/gadio/crawlers/crawler.py", line 45, in crawl
    with open(cache_dir+os.sep+'data.json', 'w', encoding='utf-8') as outfile:
PermissionError: [Errno 13] Permission denied: './cache/161519/data.json'

如Rabbitism大大未来可加入对 .avif 的支持, 那就太感谢了
期待您的回复

LainHE commented 1 year ago

更新: 将图片改为常见格式并将后缀修改回 .avif 可以作为临时解决方案 另外生成的视频都没有声音的样子, 不知是否与 #28 提及的问题一致 还请大大有时间维护一下

rabbitism commented 1 year ago

更新: 将图片改为常见格式并将后缀修改回 .avif 可以作为临时解决方案 另外生成的视频都没有声音的样子, 不知是否与 #28 提及的问题一致 还请大大有时间维护一下

Hi,实不相瞒我已经很久没有写过Python了哈哈。 不知道你有没有fix的方法,可以提交一个PR。

LainHE commented 1 year ago

更新: 将图片改为常见格式并将后缀修改回 .avif 可以作为临时解决方案 另外生成的视频都没有声音的样子, 不知是否与 #28 提及的问题一致 还请大大有时间维护一下

Hi,实不相瞒我已经很久没有写过Python了哈哈。 不知道你有没有fix的方法,可以提交一个PR。

关于音视频合并的问题,我尝试不用 moviepy ,转而用 ffmpeg-python 来解决,目前虽说可以解决需求。但整个包太老了,自带的 ffmpeg1.4 的,连 aac 编码都不支持,只能转而用mp3 (libmp3lame) 封装的。我刚看到有另一个 python-ffmpeg 的更新一些的项目,我研究一下看看,有机会我就提交PR。

我看如果想生成4k视频的话也有bug,似乎分辨率自适应不太好,图片之类的都会显示不全,各个元素的位置也会歪,说实话我3年没碰python了:joy:,大修大改我也不行,只能尽力给您改改小问题了

LainHE commented 1 year ago

更新: 将图片改为常见格式并将后缀修改回 .avif 可以作为临时解决方案 另外生成的视频都没有声音的样子, 不知是否与 #28 提及的问题一致 还请大大有时间维护一下

Hi,实不相瞒我已经很久没有写过Python了哈哈。 不知道你有没有fix的方法,可以提交一个PR。

@rabbitism 您好,我提了一个PR #31,转而直接用subprocess调用ffmpeg来合成与压制音视频的,姑且算是解决的音视频问题,调用了一个额外的的包是 ffmpeg-downloader, 它可以帮忙下载对应系统的最新ffmpeg并建立环境链接,我拿python3.9,CentOS Stream 9是可以跑通的。

关于如生成4k视频中图片显示不全的问题,我看了下代码,相关变量是 content_image 吗?我没太看懂 expand_frameshrink_frame 是怎么做的,但根据生成的视频来看,感觉可能需要额外增加一个超限的判定,来判定图片放大后的高度或宽度是否超边了,毕竟有一些图是细长的,一放大长度就超了。

还有图片支持相关的问题,不光是 .avif 有问题, .gif.webp 也都不支持 (当然这些起码不会报错,但在视频中完全不会显示), 如果是cv2的限制的话,我在想是否可以用其他方法来实现,如ffmpeg?毕竟它的确非常强大。 我查到的一些相关资料:图片转视频单张图片持续一段时间增加背景图片加水印(也可以用来塞内容图片,文字之类的)

关于背景也有一个小建议,感觉识别图片主色调然后对比度调低一点来设为背景色,可能会比原图放大加高斯模糊会好一些,目前感觉背景有点乱,放大且模糊后也感觉马赛克有点严重的样子。

我毕竟对代码不是很在行,工作量有点超过我所能做的了,希望大大您能给点建议或帮助。