lav video decoder这个解码器是做什么的?有什么功能?如何学习使用?

potplayer中使用LAV Filters硬解x264-10bit
2017年十月
891011121314
15161718192021
22232425262728
Categories
loving Freedom + + loving Linux
北京师范大学脑与认知科学学院的硕士研究生
一枚伪Geek,爱折腾,会捣鼓OS X和Linux
Live for art’s sake
前端仔 拍照人 运动爱好者
关心粮食和蔬菜 关心事实与真相帖子很冷清,卤煮很失落!求安慰
手机签到经验翻倍!快来扫一扫!
关于 PotPlayer下分别使用5种解码器硬解的方法 [转载]
26995浏览 / 9回复
mkv ts等可以支持硬解的格式 1080Pcpu大概1%-5%左右 &占用内存35左右 & 长期看rmvb的可以绕道忽略了!完美解码 &播放状态(N卡,CPU占用率为1%,内存110M+)(集显,CPU占用率为5%,内存80M+)摘自幻逸逍的帖子所以可以看出·····PotPlayer完胜·····虽然完美解码最新版加入了PotPlayer &但是对于这种软件个人严重鄙视!I.使用PotPlayer内置解码器硬解使用PotPlayer内置解码器硬解的步骤是最简单方便的了,相比使用其他第三方解码器硬解还有个好处--能使用播放器内置的图像处理滤镜.开启方法很简单:1.调出“选项”,在“滤镜”-“视频滤镜”设置页里,点击“内置解码器/DXVA设置”按钮.2.将“使用条件”改为“总是使用”,即可使用PotPlayer内置解码器硬解.(如果您不想让标清视频也开启硬解的话,可以将“使用条件”改为“大于下列条件时使用”,然后对判断标准进行设置)3.打开一个视频,按tab键,看到“视频解码器”里有“Video Codec/Transform”字样,并且在“输出”那看到“DXVA”的字样时,就表示用PotPlayer内置解码器硬解成功了.II.使用PD10解码器硬解1.下载以下网址里的解码包,解压到某个文件夹里(比如PotPlayer文件夹下)PD10 Codec(1.0.0.2229):/file/f92e1cf2122.在“滤镜”设置页将“激活条件”改为“不使用”3.在“视频”设置页里更改“视频输出渲染方式”.XP下建议使用“VMR 9 无渲染”,VISTA/WIN7下建议使用“EVR(CP) 推荐渲染”.4.在“滤镜”-“视频解码”设置页里点击“滤镜/解码器管理”按钮,然后点击“添加外部解码器”按钮,添加刚才下载的PD10解码包里的“CLCvd.ax”文件,添加完毕后左侧就会出现“CyberLink Video Decoder (PDVD10)”这东西(也可以使用regsvr32 CLCvd.ax命令,将PD10解码器注册为系统解码器,然后点击“添加系统解码器”按钮进行添加)5.在“滤镜”-“视频解码”设置页里,将H.264/AVC1的解码器改成“CyberLink Video Decoder (PDVD10)”(其他编码也可选用PD10)6.接着可以选择使用软解或硬解来播放在“滤镜”-“视频解码”设置页里,点击“CyberLink Video Decoder (PDVD10)”右边的“...”按钮就会弹出设置框选SW的话就是软解,选DXVA的话就是硬解(选择DXVA点确定后,如果再打开设置页时,会发现单选框又变回SW了,这不用担心,其实您已经选择了DXVA了)7.打开一个视频,按tab键,看到“视频解码器”里有“CyberLink Video Decoder (PDVD10)”字样,并且在“输出”里看到“DXVA”的字样时,就表示用PD10硬解成功了.P.S:如果您使用了VSFilter字幕插件,并且开启了PD10的DXVA设置,打开视频时会导致PotPlayer卡住或黑屏.III.使用TMT5解码器硬解1.下载以下网址里的解码包,解压到某个文件夹里(比如PotPlayer文件夹下)TMT5 Codec(5.0.1.80):/file/f938c6fd352.在“滤镜”设置页将“激活条件”改为“不使用”3.在“视频”设置页里更改“视频输出渲染方式”.XP下建议使用“VMR 9 无渲染”,VISTA/WIN7下建议使用“EVR(CP) 推荐渲染”.4.在“滤镜”-“视频解码”设置页里点击“滤镜/解码器管理”按钮,然后点击“添加外部解码器”按钮,添加刚才下载的TMT5解码包里的“ASVid.ax”文件,添加完毕后左侧就会出现“ArcSoft Video Decoder”这东西(也可以使用regsvr32 ASVid.ax命令,将TMT5解码器注册为系统解码器,然后点击“添加系统解码器”按钮进行添加)5.在“滤镜”-“视频解码”设置页里,将H.264/AVC1的解码器改成“ArcSoft Video Decoder”(其他编码也可选用TMT5)6.打开一个视频,按tab键,看到“视频解码器”里有“ArcSoft Video Decoder”字样,并且在“输出”里看到“DXVA”的字样时,就表示用TMT5硬解成功了.IV.使用CoreAVC解码器硬解由于CoreAVC使用CUDA进行硬解,在设置硬解前,请先确认您的/file/f9be71e6d注册码:ryomikai33@gundam.eu3TDVPV-XCNFDT-VAZVCD-17JVPC-16DCLL2.在“滤镜”设置页将“激活条件”改为“不使用”3.在“视频”设置页里更改“视频输出渲染方式”.XP下建议使用“VMR 9 无渲染”,VISTA/WIN7下建议使用“EVR(CP) 推荐渲染”.4.在“滤镜”-“视频解码”设置页里点击“滤镜/解码器管理”按钮,然后点击“添加系统解码器”按钮,在弹出的对话框中找到“CoreAVC Video Decoder”(也可以搜索下载免安装的CoreAVC解码器,然后点击“添加外部解码器”按钮进行添加)5.在“滤镜”-“视频解码”设置页里,将H.264/AVC1的解码器改成“CoreAVC Video Decoder”6.在“滤镜”-“视频解码”设置页里,点击“CoreAVC Video Decoder”右边的“...”按钮就会弹出设置框如果您勾选了“Prefer CUDA acceleration”复选框,就可以使用CUDA硬解了.如果“Prefer CUDA acceleration”复选框是灰色的,无法勾选,则表示您没法使用CUDA进行硬解.7.如果您在CoreAVC设置页里勾选了“Use Tray Icon”,打开一个视频后,任务栏右下角出现绿色的图标表示使用硬解,出现蓝色的图标表示使用软解.V.使用MPC-HC解码器硬解1.下载以下网址里的解码包,解压到某个文件夹里(比如PotPlayer文件夹下)MPC-HC Codec(1.4.2833):/file/f2.在“滤镜”设置页将“激活条件”改为“不使用”3.在“视频”设置页里更改“视频输出渲染方式”.XP下建议使用“VMR 9 无渲染”,VISTA/WIN7下建议使用“EVR(CP) 推荐渲染”.4.在“滤镜”-“视频解码”设置页里点击“滤镜/解码器管理”按钮,然后点击“添加外部解码器”按钮,添加刚才下载的TMT5解码包里的“MPCVideoDec.ax”文件,添加完毕后左侧就会出现“MPC - Video decoder”这东西(也可以使用regsvr32 MPCVideoDec.ax命令,将MPC-HC解码器注册为系统解码器,然后点击“添加系统解码器”按钮进行添加)5.在“滤镜”-“视频解码”设置页里,将H.264/AVC1的解码器改成“MPC - Video decoder”(其他编码也可选用MPC - Video decoder)6.在“滤镜”-“视频解码”设置页里,点击“MPC - Video decoder”右边的“...”按钮就会弹出设置框看到“Decoding thread number”这一栏,这里可以设置解码线程数,如果您是双核CPU就选2,四核可以选4如果您不想在播放标清视频时使用硬解,可以勾选“Disable DXVA for SD”然后在Codecs页里勾选您想解码的格式7.打开一个视频,按tab键,看到“视频解码器”里有“MPC - Video decoder”字样,并且在“输出”里看到“DXVA”的字样时,就表示用MPC - Video decoder硬解成功了.一般使用PotPlayer内置解码器硬解& &也就是第一种方法即可& &完美解码有点浪费了 那么大·····加上毕竟硬解的话现在技术还不成熟支持的格式不够多PotPlayer足够了!!&附加两个StereoscopicPlayer/folder/f&Real解码器及MediaInfo等/folder/fa
更正下 是720~
对 楼主 zhaoqq321 说:=========================多谢分享!很详细了
对 楼主 zhaoqq321 说:=========================不错
多谢分享了
完全看不懂。
您需要登录后才可以回帖&&&|&&&&&
可能感兴趣的板块:
用户名/注册邮箱/注册手机号
其他第三方号登录VideoDecoder是QtAV的解码器
本文主要目的是介绍,如何独立使用 VideoDecoder 解码 & 自定义绘制输出 ..
VideoDecoder 支持 &FFmpeg&, &CUDA&, &VDA&, &VAAPI&, &DXVA&, &Cedarv& 解码方式
VideoDecoder解码(官方案例)
请关注文中注释部分
#include &QCoreApplication&
#include &QtDebug&
#include &QtCore/QDateTime&
#include &QtCore/QQueue&
#include &QtCore/QStringList&
#include &QtAV/AVDemuxer.h&
#include &QtAV/VideoDecoder.h&
#include &QtAV/Packet.h&
using namespace QtAV;
int main(int argc, char *argv[])
// ---------------------------------
// QCoreApplication 只能出现在主线程中 ...
// ---------------------------------
QCoreApplication a(argc, argv);
QString file = QString::fromLatin1(&test.avi&);
int idx = a.arguments().indexOf(QLatin1String(&-f&));
if (idx & 0)
file = a.arguments().at(idx + 1);
// ---------------------------------
// 使用那种解码器 FFmpeg 默认软解
// &FFmpeg&, &CUDA&, &VDA&, &VAAPI&, &DXVA&, &Cedarv&
// ---------------------------------
QString decName = QString::fromLatin1(&FFmpeg&);
idx = a.arguments().indexOf(QLatin1String(&-vc&));
if (idx & 0)
idx = a.arguments().indexOf(QLatin1String(&-vd&));
if (idx & 0)
decName = a.arguments().at(idx + 1);
idx = decName.indexOf(QLatin1String(&:&));
if (idx & 0) {
opt = decName.right(decName.size() - idx -1);
decName = decName.left(idx);
QStringList opts(opt.split(QString::fromLatin1(&;&)));
foreach (QString o, opts) {
idx = o.indexOf(QLatin1String(&:&));
subopt[o.left(idx)] = o.right(o.size() - idx - 1);
decopt[decName] =
qDebug() &&
VideoDecoder *dec = VideoDecoder::create(decName.toLatin1().constData());
if (!dec) {
fprintf(stderr, &Can not find decoder: %s\n&, decName.toUtf8().constData());
// -------------------------------------------------------------
// 自动释放 ...
QScopedPointer&VideoDecoder&
decoder.reset(dec);
// -------------------------------------------------------------
if (!decopt.isEmpty())
dec-&setOptions(decopt);
demux.setMedia(file);
if (!demux.load()) {
qWarning(&Failed to load file: %s&, file.toUtf8().constData());
dec-&setCodecContext(demux.videoCodecContext());
// -------------------------------------------------------------
// 请注意这里是官方对 open 与 close 的要求,不是线程安全的,最好使用锁 ...
* default is open FFmpeg codec context
* codec config must be done before open
* NOTE: open() and close() are not thread safe. You'd better call them in the same thread.
// ---------------------------------------------------------------
dec-&open();
int count = 0;
int vstream = demux.videoStream();
QQueue&qint64&
qint64 t0 = QDateTime::currentMSecsSinceEpoch();
while (!demux.atEnd()) {
if (!demux.readFrame())
if (demux.stream() != vstream)
const Packet pkt = demux.packet();
if (dec-&decode(pkt)) {
VideoFrame frame = dec-&frame(); // why is faster to call frame() for hwdec? no frame() is very slow for VDA
// ---------------------------------
// 使用前最好判断一下,帧的正确性 ...
if (!frame.isValid()) {
// 注意:此处将帧保存 ... 备用 ... 缓存帧数不要太多 ... 1080P(10+-) 4k(5-) 等 ... 以免显存不足
// 比如: frames 需自定义,frames 读写需加锁 ...
for (;;) {
if (frames.size & 5) {
QThread::msleep(10);
frames.push(frame);
// ---------------------------------
Q_UNUSED(frame);
const qint64 now = QDateTime::currentMSecsSinceEpoch();
const qint64 dt = now - t0;
t.enqueue(now);
printf(&decode count: %d, elapsed: %lld, fps: %.1f/%.1f\r&, count, dt, count*1000.0/dt, t.size()*1000.0/(now - t.first()));fflush(0);
if (t.size() & 10)
t.dequeue();
// ---------------------------------
// 解码器释放部分 ...
dec-&flush();
demux.setInterruptStatus(-1);
demux.unload();
// setCodecContext 相当于 close 需要加锁
decoder-&setCodecContext(0);
decoder.reset(0);
// ---------------------------------
如何使用 VideoFrame
三种使用VideoFrame思路
OpenGL 渲染 VideoFrame 帧
SDL 绘制 VideoFrame 帧(需转换格式)
QImage 绘制 VideoFrame 帧(需转换格式)(效率低)
// 就不多介绍了 ...
QImage image = frame.toImage();
QImage image = frame.toImage(QImage::Format_ARGB32);
// 事先需要将帧转为SDL需要输出的格式,例如:Format_YUV420P
frame = frame.to(VideoFormat::PixelFormat::Format_YUV420P);
// 将 VideoFrame 转为 AVPicture ...
AVPicture* Decoder::convert(VideoFrame &inFrame, int w, int h)
AVPicture *pFrameYUV = new AVPicture();
AVPicture pF
avpicture_fill(&pFrame, (uint8_t*) inFrame.bits(), AV_PIX_FMT_YUV420P, w, h);
avpicture_alloc(pFrameYUV, AV_PIX_FMT_YUV420P, w, h);
av_picture_copy(pFrameYUV, &pFrame, AV_PIX_FMT_YUV420P, w, h);
return pFrameYUV;
// 如何用SDL绘制一个AV_PIX_FMT_YUV420P的AVPicture就不用我多说了吧 ....
SDL_UpdateTexture(texture, NULL, avp-&data[0], avp-&linesize[0]);
SDL_RenderCopy(renderer, texture, NULL, rect);
SDL_RenderPresent(renderer);
// 注意:AVPicture 需要手动释放,但不能在 SDL_RenderPresent 前释放 ...
// 建议:最后有个释放队列,绘制完的帧都从绘制队列移到释放队列 ...
// 不用多说, 看代码 ...
// 使用 QtAV 的 OpenGLVideo 渲染 ...
oglv.setOpenGLContext(QOpenGLContext::currentContext());
oglv.setCurrentFrame(frame);
oglv.setProjectionMatrixToRect(rectf);
oglv.render();
// 如果想使用自定义的OGL渲染VideoFrame那研究研究OpenGLVideo吧 ...
QtAV 如何如何好,我就不夸了 ... 但只能说是假开源 ... 代码一坨看得懂叫开源看不懂跟看不到一样 ..
& nljb 2015
with help from
and Idea from查看: 9002|回复: 13
LAV Video 支持 Intel Quick Sync 硬件解码,还能实现硬件解码后用YADIF软件反交错
& && &&&Code:
& && &&&LAV Splitter- Fixed a seeking regression in the mkv demuxer introduced in 0.43- Fixed a bug that caused stream descriptions to vanish after the file finished playing- Improved playback of WMVA video with commercial decoders- Added support for the new OpenType MIME type produced by mkvtoolnix & 5.2.0LAV Audio- Fixed LATM AAC playback with some source filtersLAV Video- Added Intel QuickSync hardware decoder- Added support for YADIF with hardware decoding- Added support for Dirac decoding- Added support for DNxHD decoding- Added support for v210/v410 output- Improved dynamic reconnection with post-processing filters- Fixed a seeking related corruption issue with MPEG4-ASP
For the full changelog, see
in the download!& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &&&
本帖最后由 westlee 于
19:11 编辑
目前在构思中,作者被A饭们逼的终于行动了
我用渣渣本(M HD4650)测试了下,基本还成,上个图。
开了Chrome、渣雷,实际任务管理器PotPlayermini.exe我观察了一直在5%-10%游动,基本等效于平日的DXVA。
目前这个项目还在构造阶段,LAV作者nev需要一些大家的反馈信息。
如果你的A卡支持硬解、且是win7/vista/2008操作系统(XP请路过),并愿意助LAV开发LAV Video for AMD一臂之力的话,就按下面的流程操作反馈:
1. 卸载电脑上已安装的LAV Filters
2. 下载这个,解压后管理员运行install_video.bat进行注册安装
3. 32位的POT里通过“添加系统滤镜”调用LAV Video,(内置图像处理滤镜关掉,包括任何后处理滤镜vobsub等都关掉),并打开LAV Video设置,选择“DXVA2(copy-back)”模式
4. 全屏播放1080的视频数十秒(记得按TAB确认是LAV Video在工作!),别用10bit这种不能硬解的视频,视频可以是1080p也可以是1080i,可以是H.264/AVC,也可以是MPEG2/VC1,总之就是要猛一点、能硬解就行。
5. 播放数十秒后关掉POT,这时候桌面上会生成一个LAVVideo.txt文件,打开它把里面的内容全部复制,粘帖到的空白区域后直接提交(不用注册直接粘帖后点击下面的submit按钮),然后会生成网址,你把该网址发上来,并说下你的显卡型号以及驱动版本,我会去反馈给nev
核显被屏蔽掉的路过
核显被屏蔽掉的路过
yadif那效果。。。。。。
现在potplayer 自带的也开始直接支持cuda和quick sync,果然是通吃侯
whateveru 发表于
现在potplayer 自带的也开始直接支持cuda和quick sync,果然是通吃侯
自带的没抄好……
手机模式查看不到图片
whateveru 发表于
现在potplayer 自带的也开始直接支持cuda和quick sync,果然是通吃侯
stolen player...
我说的是事实 发表于
yadif那效果。。。。。。
yadif和 nv的硬件反交错 哪个好
现在用CoreAVC的视频解码,LAV我用Audio~
我用XP自觉路过。
刚才试验了一下Z68平台下面把MPC播放器添加到Virtu Control Panel里面,然后选择LAV用Intel Quick Sync解码播放...
发现CPU占用虽然只有2-3%,但是画面很不流畅
已经安装了,有2个MTV花屏,其它正常
Powered by Discuz! X3.4[圖文教學] PotPlayer & MPC-HC搭配LAV Filters簡易設定教學 | 安樂淨土
雖然播放器的預設值已可播放大部分的影片
但偶爾還是會遇到某些惱人的格式
故本篇教學提供了簡易的設定為解決方案
適用於絕大多數日韓HDTV及MV的影片
以下設定皆以軟解(software decoding)作範例
再來 此篇的主題是:
如何讓一般欣賞只有30FPS的 LIVE
在 PotPlayer & MPC-HC + LAV Filters 的完美配合後
原本 30FPS 在播放時自動變成 60FPS,視聽享受瞬間提升一倍
體驗過 高清影片 + 60FPS 的流暢後,那感覺只能用感動來形容呢 !! 呵呵
往下看之前請先安裝
Doom9討論串:
二、影片解碼流程
Container –& Splitter
–& Video Decoder –& Video Renderer
–& Audio Decoder –& Audio Renderer
Container封裝容器先經由Splitter分離出Video與Audio
Video視訊則經由Video Decoder解碼然後交給Video Renderer渲染輸出
Audio音訊則經由Audio Decoder解碼然後交給Audio Renderer渲染輸出
*備註一:deinterlacing去交錯可在Decoder時做,若無,則在Renderer時做
*備註二:Video Decoder交給顯卡去解碼就是俗稱的硬解
*備註三:外掛VSFilter或ffdshow則是在Decoder與Renderer之間做post-processing後處理
三、PotPlayer相關設定
使用外部解碼器須關閉內建影像處理濾鏡
在濾鏡/解碼器管理分別新增系統解碼器加入LAV Splitter Source, LAV Video Decoder, LAV Audio Decoder並照圖勾選
以下照圖設定
勾選紅框部分
四、MPC-HC相關設定
勾選紅框部分
照紅框部分設定
照紅框內取消相關選項
依序新增LAV Splitter, LAV Video Decoder, LAV Audio Decoder並皆設定為偏好
五、LAV Filters相關設定
以下照圖設定 (預設值)
N卡使用者請選NVIDIA CUVID
我要如何知道 LIVE影片 有沒有變成 60FPS呢 ???
PotPlayer 操作如下圖
全部設定完成後,往後 欣賞 交錯式的 LIVE
就會自動變成 60FPS 播放,享受瞬間升級 !!
讓每一場 喜愛的 LIVE 都有 60FPS 的流暢感喔
Share this:請按讚:喜歡 載入中...
About Shenboy
pureland from HD.Club & AREA-11
本篇發表於 。將加入書籤。
104,035 hits}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信