我正在尝试在 Ubuntu 19.10 中通过 CLI 播放视频
我运行以下命令:
con@e:/mnt/Windows/Users/...$ vlc video.flv
VLC media player 3.0.8 Vetinari (revision 3.0.8-0-gf350b6b5a7)
[000056347c5755b0] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.
libva info: VA-API version 1.5.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva error: /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so init failed
libva info: va_openDriver() returns -1
[00007f7e20003430] glconv_vaapi_x11 gl error: vaInitialize: unknown libva error
libva info: VA-API version 1.5.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva error: /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so init failed
libva info: va_openDriver() returns -1
[00007f7e20003430] glconv_vaapi_drm gl error: vaInitialize: unknown libva error
libva info: VA-API version 1.5.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva error: /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so init failed
libva info: va_openDriver() returns -1
[00007f7e20003430] glconv_vaapi_drm gl error: vaInitialize: unknown libva error
Failed to open VDPAU backend libvdpau_va_gl.so: cannot open shared object file: No such file or directory
[flv @ 0x7f7e34c160c0] Unable to seek to the next packet
QObject::~QObject: Timers cannot be stopped from another thread
视频可以在 Totem 和 VLC 中播放,但当我尝试切换到另一个时间时,整个系统崩溃了。Totem 不会打印错误报告,但 VLC 会,所以我将其粘贴在上面。
我在这里看到过类似的帖子,例如https://ubuntuforums.org/showthread.php?t=2387235 但我没有看到解决方案https://bugs.launchpad.net/ubuntu/+source/intel-vaapi-driver/+bug/1756380
我也见过为什么 LIBVA 在尝试初始化 Intel GM965 驱动程序时返回错误?但我不明白那里有什么可以帮助我。
列出libva2
包裹,我看到:
libva2/eoan,now 2.5.0-1 amd64 [installed]
libva2/eoan 2.5.0-1 i386
此错误仅发生在一些视频,而不是其他视频,而且我也不知道具体是哪些。
我也见过尝试播放视频时 VLC 崩溃
这表明我应该这么做:
con@e:/mnt/Windows/Users/...$ vainfo
libva info: VA-API version 1.5.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva error: /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so init failed
libva info: va_openDriver() returns -1
vaInitialize failed with error code -1 (unknown libva error),exit
不幸的是,一年多过去了,该页面仍然没有得到解决。
我也看过https://forum.videolan.org/viewtopic.php?f=13&t=148280
但解决方案在那里:vlc -V x11 video.mp4
仍然返回相同的错误。
VLC 从 Windows 打开同一个文件时也遇到同样的问题。
输出自mediainfo
:
con@e:/mnt/Windows/Users/...$ file.flv
General
Complete name : file.flv
Format : Flash Video
File size : 167 MiB
Tagged date : UTC 2009-05-30 03:59:09
Tagging application : MEGA
Video
Format : AVC
Format/Info : Advanced Video Codec
Format profile : [email protected]
Format settings : CABAC / 5 Ref Frames
Format settings, CABAC : Yes
Format settings, ReFrames : 5 frames
Codec ID : 7
Width : 416 pixels
Height : 224 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 23.976 (24000/1001) FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Audio
答案1
当文件可能已损坏(就像您的文件的情况一样)时,有几个不错的选择:
只需更换容器。在你的情况下,你在 flv 容器中使用 AVC 或 H.264,并且没有声音或很可能是 AAC 声音。这两种编解码器在 mp4 容器中运行良好。因此,以下方法最适合重新混合你的文件:
ffmpeg -i file.flv -c copy test.mp4
-c:copy
如果视频或音频编解码器本身损坏,这将毫无用处。同样需要注意的是,第一的所有流...重新编码文件+新容器。如果重新混合不成功重新编码是另一种选择,但需要注意的是,质量会明显下降。下面这样的方法可以通过重新编码来实现这一点视频流:
ffmpeg -i file.flv -c:v libx264 -preset slow -crf 22 -c:a copy test.mp4
如果音频流(如果存在)损坏,您也可以使用重新编码
-c:a aac -b:a 128k
。
希望这能让您的旧文件复活:)