You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy VideoPlayer播放下载视频仅出音频无画面问题求助

Kivy VideoPlayer仅播放音频无画面问题排查与修复

问题背景

我正在开发一款应用,流程为通过youtube-search-python搜索视频,使用Pytube下载视频,再用Kivy的VideoPlayer播放。目前除视频播放环节外其余功能均正常,仅能听到音频却看不到画面。看到ffpyplayer可解决类似问题后我已安装,但仍无法显示视频。

原代码

from pytube import YouTube
from kivy.app import App
from youtubesearchpython import VideosSearch
from kivy.uix.videoplayer import VideoPlayer

videosSearch = VideosSearch('心臓を捧げよ!', limit = 1)

for i in range(1):
    download_link = videosSearch.result()['result'][i]['link']
    

yt = YouTube(download_link)
yt.streams.get_highest_resolution().download()
video = (yt.title) + '.mp4'

class Player(VideoPlayer):
   player = VideoPlayer(source= video, state = 'play')


class VideoApp(App):
    def build(self):
        return Player()


if __name__ == '__main__':
    VideoApp().run()

运行日志

[INFO   ] [Logger      ] Record log in C:\Users\Shahzad\.kivy\logs\kivy_23-03-30_14.txt
[INFO   ] [Kivy        ] v2.1.0
[INFO   ] [Kivy        ] Installed at "C:\ProgramData\miniconda3\lib\site-packages\kivy\__init__.py"
[INFO   ] [Python      ] v3.10.9 | packaged by conda-forge | (main, Jan 11 2023, 15:15:40) [MSC v.1916 64 bit (AMD64)]
[INFO   ] [Python      ] Interpreter at "C:\ProgramData\miniconda3\python.exe"
[INFO   ] [Logger      ] Purge log fired. Processing...
[INFO   ] [Logger      ] Purge finished!
[INFO   ] [Factory     ] 189 symbols loaded
[INFO   ] [ImageLoaderFFPy] Using ffpyplayer 4.4.0
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_pil, img_ffpyplayer 
[INFO   ] [Text        ] Provider: sdl2
[INFO   ] [VideoFFPy   ] Using ffpyplayer 4.4.0
[INFO   ] [Video       ] Provider: ffpyplayer(['video_ffmpeg'] ignored)
[INFO   ] [Window      ] Provider: sdl2
[INFO   ] [GL          ] Using the "OpenGL" graphics system
[INFO   ] [GL          ] GLEW initialization succeeded
[INFO   ] [GL          ] Backend used <glew>
[INFO   ] [GL          ] OpenGL version <b'4.6.0 Compatibility Profile Context 23.3.1.230305'>
[INFO   ] [GL          ] OpenGL vendor <b'ATI Technologies Inc.'>
[INFO   ] [GL          ] OpenGL renderer <b'AMD Radeon(TM) Vega 3 Graphics '>
[INFO   ] [GL          ] OpenGL parsed version: 4, 6
[INFO   ] [GL          ] Shading version <b'4.60'>
[INFO   ] [GL          ] Texture max size <16384>
[INFO   ] [GL          ] Texture max units <32>
[INFO   ] [Window      ] auto add sdl2 input provider
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [Base        ] Start application main loop
[ERROR  ] [Image       ] Error loading <【MAD】『心臓を捧げよ!』で振り返る 進撃の巨人 Season 2.mp4>
[INFO   ] [GL          ] NPOT texture support is available

问题分析

从日志的错误信息[ERROR ] [Image ] Error loading <【MAD】『心臓を捧げよ!』で振り返る 進撃の巨人 Season 2.mp4>可以定位核心问题:

  1. Player类实现错误:继承VideoPlayer后,错误地在类内部定义了player变量,导致返回的是未配置参数的父类实例,而非你设置了视频源和播放状态的实例。
  2. 文件名含特殊字符:下载的视频文件名包含日文、全角符号等特殊字符,Kivy在解析这类路径时容易出现编码异常,导致画面无法加载。

修复方案

修改后的代码

from pytube import YouTube
from kivy.app import App
from youtubesearchpython import VideosSearch
from kivy.uix.videoplayer import VideoPlayer

# 搜索视频
videosSearch = VideosSearch('心臓を捧げよ!', limit=1)
download_link = videosSearch.result()['result'][0]['link']

# 下载视频并指定简洁文件名,避免特殊字符
yt = YouTube(download_link)
custom_filename = "attack_on_titan.mp4"
yt.streams.get_highest_resolution().download(filename=custom_filename)

class Player(VideoPlayer):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.source = custom_filename
        self.state = 'play'
        self.options = {'allow_stretch': True}  # 让视频自适应窗口大小

class VideoApp(App):
    def build(self):
        return Player()

if __name__ == '__main__':
    VideoApp().run()

关键修改点说明

  • 修正Player类初始化:通过__init__方法调用父类构造函数,并直接设置当前实例的source和state参数,确保配置生效。
  • 自定义下载文件名:使用filename参数指定不含特殊字符的文件名,避免Kivy解析路径时出错。
  • 添加自适应设置:allow_stretch: True让视频自动适配窗口大小,优化播放体验。

额外提示

日志显示ffpyplayer已正常加载([VideoFFPy ] Using ffpyplayer 4.4.0),无需重复安装。若问题仍存在,可检查视频编码是否为ffpyplayer支持的格式(如H.264)。

内容的提问来源于stack exchange,提问作者Ahat130

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 12:04:56