iawia002 / lux

👾 Fast and simple video download library and CLI tool written in Go
MIT License
27.75k stars 3k forks source link

下载vp9编码webm格式的youtube视频会使视频没法播放 #479

Open sbw983 opened 5 years ago

sbw983 commented 5 years ago

~$annie -s 127.0.0.1:1080 https://www.youtube.com/watch?v=fimrDI2JvlA

Site: YouTube youtube.com Title:
Type: video Stream:
[248] ------------------- Quality: 1080p video/webm; codecs="vp9" Size: 345.14 MiB (361907354 Bytes)

download with: annie -f 248 ...

以上这是原始下载信息,下载完成后会合并音视频为一个.mp4文件,合并后mp4文件的编码会改成"vp09"致使播放器无法识别

mpv的信息: ~$ mpv .mp4 Playing: .mp4 [ffmpeg/demuxer] mov,mp4,m4a,3gp,3g2,mj2: Could not find codec parameters for stream 0 (Video: none (vp09 / 0x39307076), none, 1920x1080, 1169 kb/s): unknown codec [ffmpeg/demuxer] Consider increasing the value for the 'analyzeduration' and 'probesize' options (+) Video --vid=1 () () (+) Audio --aid=1 --alang=und () (aac) libva info: VA-API version 0.39.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_0_39 libva info: va_openDriver() returns 0 Failed to initialize a video decoder for codec ''. Video: no video AO: [pulse] 44100Hz stereo 2ch float

~$ vlc .mp4 VLC media player 2.2.2 Weatherwax (revision 2.2.2-0-g6259d80)

[00007f6e5a4b4028] core decoder error: Codec `vp09' (No description for this codec) is not supported.

ffmpeg的信息: ~$ ffmpeg -i .mp4 ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.11) 20160609 configuration: --prefix=/date/date0/Tools/Media/ffmpeg/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/opt/ffmpeg_build/include --extra-ldflags=-L/opt/ffmpeg_build/lib --bindir=/opt/bin --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree --enable-openssl libavutil 56. 22.100 / 56. 22.100 libavcodec 58. 35.100 / 58. 35.100 libavformat 58. 20.100 / 58. 20.100 libavdevice 58. 5.100 / 58. 5.100 libavfilter 7. 40.101 / 7. 40.101 libswscale 5. 3.100 / 5. 3.100 libswresample 3. 3.100 / 3. 3.100 libpostproc 55. 3.100 / 55. 3.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2mp41 encoder : Lavf58.20.100 Duration: 00:37:06.45, start: 0.000000, bitrate: 1303 kb/s Stream #0:0(eng): Video: vp9 (Profile 0) (vp09 / 0x39307076), yuv420p(tv, bt709), 1920x1080, 1169 kb/s, SAR 1:1 DAR 16:9, 29.97 fps, 29.97 tbr, 16k tbn, 16k tbc (default) Metadata: handler_name : VideoHandler Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 125 kb/s (default) Metadata: handler_name : ISO Media file produced by Google Inc. Created on: 03/28/2019. At least one output file must be specified

ffmpeg可以识别,只有ffmpeg自带的ffplay可以播放,要让其他播放器识别要手动用ffmpeg转码

还有一个新问题: 所有从youtube下的视频都不能自动命名,最终下载完成后都会变成.mp4这个文件,这就导致annie不能同时在同一目录下下载多个视频,只能单个下载,而且得手动将前面的视频手动重命名,否则后面的视频都要下载失败 我的annie信息 OS:Ubuntu16.04 -amd64

~$ annie -v

annie: version 0.9.4, A fast, simple and clean video downloader

mengmo commented 5 years ago

vp9 编码应该用.webm或者.mkv格式封装吧? .mp4 或者说isobmff的规范里应该是不支持vp9 编码的 强制把 vp9 编码装到 .mp4 里能正常播放才不正常吧

sbw983 commented 5 years ago

vp9 编码应该用.webm或者.mkv格式封装吧? .mp4 或者说isobmff的规范里应该是不支持vp9 编码的 强制把 vp9 编码装到 .mp4 里能正常播放才不正常吧

只要问题是annie在合并音视频的时候把视频编码写成了vp09,致使播放器无法识别和解码。应该是annie调用ffmpeg合并音视频出错,错误把视频编码标记为vp09

iawia002 commented 5 years ago

对,现在的合并方法很粗糙,但是用 MPV 播放器可以的啊

Screen Shot 2019-08-13 at 17 10 09

你说的另一个问题是下载 youtube 视频没有标题,这个在修了,晚点会发一个新版本

sbw983 commented 5 years ago

我的如果下的是webm格式的音视频,合并后播放器就没法识别,你试一下下载webm的试一下,有没有问题。原始文件如果是mp4的话合并后播放是正常的。