PotPlayer 到底好在哪里?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PotPlayer 到底好在哪里?相关的知识,希望对你有一定的参考价值。
《PotPlayer v210729视频播放器》百度网盘资源免费下载:
链接: https://pan.baidu.com/s/1zS_OBnlks0YZyW1ZfpQBQw
PotPlayer v210729最新版是一款多媒体免费音视频播放器,体积小巧、界面简洁、功能强大,是本地影音播放器的最佳之选。PotPlayer内置了强大的音视频编解码器和影音图像处理滤镜和外挂式的管理系统,增强DXVA硬件解码和多线程解码功能,使PotPlayer可以更流畅地播放高清电影。同时简化了PotPlayer的内部解码体系使PotPlayer在保持小巧体积的情况下支持绝大多数音视频格式,成为新一代的全能音视频播放器。
参考技术A PotPlayer是之前KMPlayer作者姜龙喜先生(韩国)制作的一款视频播放软件。个人使用体验下来:这是一款内存占用低、无广告、且功能非常强大的视频播放器。如果你正在被各种国产播放器的广告困扰的话。我建议你使用PotPlayer试下,绝对好用,且界面清爽。
如果你恰好和我一样已经用上了这个软件。那么看了一下的介绍以后,你会发现自己低估了这款软件——实际上PotPlayer的好处绝不只“无广告”。
实时字幕翻译、视频转GIF、播放电视直播、视频补帧、倍数播放等等功能,它都可以轻松实现
01
实时字幕翻译
我们看视频内容有时候会遇到只有英文字幕(俗称:生肉)的情况。而我的英文水平实在有限。
于是PotPlayer就帮了大忙了。在播放器主界面下右键>字幕>实时字幕翻译 中就可以选择,我们可以选择翻译源,也可以选择双语对照和仅显示翻译内容。
然后你就可以得到一份中文字幕了
PotPlayer的这个功能很好用,不过目前只能支持外挂字幕。不能翻译视频文件的内嵌字幕。所以各位要用到这个功能。需要先找一份外挂的字幕才可以用。
02
视频补帧功能
视频补帧功能是最近几年流行的一种插帧技术。传统的电影视频只有24帧,在一些高速移动场景中难免会出现画面不连贯和模糊等现象。
而补帧技术通过算法补偿的方式提升到60帧以上的水平。从而提升观影体验。
F5进入参数选项即可设置,开启potplayer支持倍帧模式。可以将原本24帧的视频提升到48帧水平。
这个补帧方式体验提升并不算很大,但可以让大家体会一下补帧技术的。
真正高级一些的补帧技术,是利用AMD显卡AMD Fluid Motion Video补帧。在AMD驱动中开启补帧功能后。并在potplayer中启用插件。
具体的设置步骤有些多,这里不展开介绍。设置完毕之后的效果还是不错的。尤其是看节动作片的时候。
03
视频转GIF
视频转GIF是一个非常实用的功能,我们平时需要在视频中截一点GIF素材时,直接用这个功能就好了。potplayer自带的录制视频功能,录制视频时将保存文件格式改为gif就可以了。
右键点击画面,“视频”–”视频录制”-“录制视频”(快捷键ALT+C)
星爷这表演真是无敌了……
04
直播功能
只要在网上下载m3u8直播源,直接拖入到potplayer窗口即可观看视频直播。
potplayer也可以做一个视频直播软件用了
05
其他好用小功能
1、进度条缩略图
potplayer可以做到像我们看视频网站的时候,鼠标在进度条上显示缩略图。
点击F5进入参数设置,按图所示打开相应设置就可以。
2、逐帧播放
通过快捷键D、F,potplayer可以实现逐帧播放
配合书签和缩略图,非常适合拉片。
3、倍数播放
这个功能也是很多网友刷片是必备的工具。快捷键:x,c
06
自定义皮肤
potplayer还是一个可以更换皮肤,设置徽标和界面颜色的播放器。你甚至还可以改变播放器的字体。同时支持设置字体大小。 参考技术B PotPlayer是最好用的播放器,没有之一!PotPlayer使用C++ 编写,继承了 KMPlayer 方便的滤镜以及外挂式的管理系统,同时简化了内部的解码器体系,现在基本依靠 Bass 和 FFmpeg 系滤镜解决播放问题。
版本特点:
1、程序支持在 WIN8.1、WIN8、WIN7、WIN2003、WINXP 上运行。
2、集成四枚简约皮肤:ios7 Style White(默认)、YouTube-TitleBar-Slim、Zetro、Metr 2.1-Fin。
3、集成三枚简约风格关联图标,几乎囊括所有媒体文件格式。
4、安装过程中自动关联常用视频文件,自动备份系统中的原有关联,与播放器本身的关联方案完美兼容。
5、卸载过程中自动恢复安装时备份的原有关联信息。
6、单个进程即选即播,记忆播放位置,最小化后暂停播放。
7、不会自动更新且不预先下载更新文件,无棒子的TV推送。
8、更多特点请自行发现…… 参考技术C potplayer解码能力强大,无需安装额外的解码包,x2速度播放,一般播放器人声会变音,它不会。由于采用Delphi编译程序的KMPlayer有一些弊端,姜勇囍为改进播放器本身的一些性能而重新用VC++进行构架。
PotPlayer 是 KMPlayer 的原制作者姜龙喜先生(韩国)进入 Daum 公司后的新一代网络播放器。PotPlayer 的优势在于强大的内置解码器;而 KMPlayer 的优势在于强大的定制能力和个性化功能。PotPlayer 使用 VC++ 编写, KMPlayer 为 Delphi 编写。PotPlayer 是 Daum 公司的一款网络播放器,有自己的独立著作权,并非由姜龙喜先生原创,目前由 KMPlayer 的原始作者姜龙喜进行后续开发。
目前(1428以后版本)的 KMPlayer 由 PandoraTV 团队负责集体开发。最近对pot好感飙升,是因为发现这个软件的强大超乎自己的想象,pot自带录屏功能,比我用过的任何一款录屏软件都要好用。在主界面点下右键,那一堆功能列表如果都研究透了,应该会很流弊吧。因为最近在学视频剪辑才偶然发现了录屏这个强大功能。 参考技术D 首先你确认一下,pot player就是一个本地的视频播放器。
好就好在可以播放各种格式的视频可以。在线及时的转码,然后播放,并且占用的内存空间比较小,简洁没有什么广告。可能比一般的样大部分的视频播人都要优秀啊!毕竟可以播放身影各种格式的视频,这就很难做到了很多事情包容只能播放几个固定格式的mkv啊Mp4什么的,但是Pot player可以支持很多种格式。
你说说他为什么这么好?一个好像很多人现在喜欢用了,虽然现在还比较小众,让他评分特别高。
kotlin到底好在哪里?
最近在学kotlin,虽然还没有像其他博主一样立马就爱上它.但是不得不说,kotlin对比起java还是有不少优势的.
1、语法简洁
首先是语法比较简洁,能不简单处理的就不啰嗦.
1.1、变量与常量
变量通过var关键字定义,常量通过val关键字定义.既支持类型推倒也支持显示声明类型.这样的话定义变量和常量写起来会比java简洁一些:
var intVar = 1 var stringVar: String = "abc" val INT_VALUE = 1
1.2、类
在kotlin中,类可以通过class关键字定义.支持在主构造方法中用var或者val关键字直接定义成员变量,例如下面的name和author,当然也支持在类结构体中定义成员变量,如price.
class Book(var name: String, val author: String, p: Int) {
var price = p
private set
fun isTheSameAuthor(other: Book): Boolean {
return author == other.author
}
}
与java中不同的是,kotlin中所有的类成员变量都是通过类访问器get和set去访问成员变量的,例如下面的代码中对price的调用并不是直接操作price变量,而是通过get/set访问器去访问的.所以我们可以将price的set访问器设置为私有的,这样的话就不能在外部去设置price的值了:
var book = Book("book", "author", 100)
println(book.price)
book.price = 123
假设我们用java去实现上面的Book类,我们需要写成下面这个样子.是不是感觉java的语法会啰嗦很多?实际上下面的java代码我还去掉了空指针处理和final关键字修饰.所以实际上代码量会更大.kotlin中短短的七行代码,java中要实现完全一模一样的功能,起码需要数十行代码.
public class Book {
private int price;
private String name;
private String author;
public Book(String name, String author, int p) {
this.name = name;
this.author = author;
this.price = p;
}
public boolean isTheSameAuthor(Book other) {
return Intrinsics.areEqual(this.author, other.author);
}
public int getPrice() {
return this.price;
}
private void setPrice(int var1) {
this.price = var1;
}
public String getName() {
return this.name;
}
public void setName(String var1) {
this.name = var1;
}
public String getAuthor() {
return this.author;
}
}
1.3、数据类
在kotlin中,我们还有可以用data class去定义单纯只是保存数据的数据类:
data class Person(var name: String, var age: Int)
有的同学可能会会,数据类和普通的类有什么区别呢?让我们看下下面的代码就一目了然了:
data class PersonData(var name: String, var age: Int)class PersonClass(var name: String, var age: Int)
var dataA = PersonData("jack", 18)
var dataB = PersonData("jack", 18)
println(dataA)
println(dataB)
println(dataA == dataB)
var classA = PersonClass("peter", 20)
var classB = PersonClass("peter", 20)
println(classA)
println(classB)
println(classA == classB)
假设用java去实现的话就不知道这一行的kotlin代码需要多少行才能实现了.
1.4、object 对象
我们能使用object关键字直接实现单例模式:
object DataBaseHelper {
...
}
它翻译成java是这样的:
public class DataBaseHelper {
public static final DataBaseHelper INSTANCE;
private DataBaseHelper() {
}
static {
INSTANCE = new DataBaseHelper();
}
}
2、命名参数
kotlin支持命名参数。当一个方法的参数数目特别多的时候,命名参数就很有用了。例如String.regionMatches方法有五个参数:
public boolean regionMatches(boolean ignoreCase, int toffset,
String other, int ooffset, int len) {
...
}
在调用的时候一眼很难看出哪个实参有什么作用:
String str = new String("hello world!");String sub = new String("WORLD");
System.out.println(str.regionMatches(true, 6, sub, 0, 5));
而在kotlin中可以用命名参数将每个实参对应的形参注明出来,简直一目了然:
val str = "hello world!"
val sub = "WORLD"
println(str.regionMatches(thisOffset = 6, other = sub, otherOffset = 0, length = 5,
ignoreCase = true))
//命名参数可以用不同于函数声明的参数顺序传参
println(str.regionMatches(ignoreCase = true, thisOffset = 6, other = sub,
otherOffset = 0, length = 5))
而且使用命名参数的话可以不遵循方法声明的时候的参数顺序传参,因为我们已经将哪个实参传给哪个形参都标明了.
3、空指针安全
在kotlin中,每个类型都有其对应的可空类型,只有可空类型才能被赋值为null:
var a: Int = 1 var b: Int?
var c: String = "" var d: String? = null var e: Float = 1.0f
var f: Float? = 2.0f
a = null b = null c = null d = null e = null f = null
非空类型不可能为null,所以不用考虑空指针的问题.只有可空类型有可能为null,这个时候必须指定它为null的时候的行为.
可以用"?."做判空处理,或者使用"!!."在空指针的情况下抛出空指针异常:
fun foo(str : String?){
println(str?.length)
println(str!!.length)
}
foo方法翻译成java是这样的:
public final void foo(@Nullable String str) {
Integer var2 = str != null?Integer.valueOf(str.length()):null;
System.out.println(var2);
if(str == null) {
Intrinsics.throwNpe();
}
int var3 = str.length();
System.out.println(var3);
}
很多文章在介绍kotlin的可空类型的时候都是以简化了判空处理的优点来介绍的.例如下面java方法中的判空处理,用kotlin只需要一行代码就可以了:
public Character front(String str) {
if (str != null){
return str.charAt(0);
}
return null;
}fun front(str: String?): Char? {
return str?.get(0);
}
但是在我看来,可空类型非空类型的意义并不在帮我们做简化了判空处理的代码.更重要的一点是明确指出了哪些变量是可能为空的,同时明确了为空的时候的调用应该怎么处理.
对于非空类型,它永远不可能为空,我们不需要考虑它的空指针问题.而对于可空类型,我们需要明确指定在它为空的时候的调用抛出异常亦或进行执行.这样其实缩小了空指针异常的范围,同时也减小了空指针对程序稳定安全的破坏性.
4、字符串模板
在kotlin字符串中可以用"$"符号标识一个表达式,该表达式的值会被计算出来放到字符串中:
val str = "abc"println("$str.length is ${str.length}") // 结果为 "abc.length is 3"
比起java用字符串拼接或者String.format的方式去处理都要优雅得多.
5、高阶函数和Lambda表达式的支持
在java中实现观察者模式,我们往往需要额外定义一个监听者的接口,这种监听者接口往往也只有一个方法,其实实际上属于比较冗余的代码,没有很大的实际价值:
public class Button {
private OnClickListener mListener;
public void setOnClickListener(OnClickListener listener) {
mListener = listener;
}
public interface OnClickListener {
void onClick(Button button);
}
}
而在kotlin中我们可以将函数直接作为一个对象保存起来,再也不用为监听者单独定义一个接口了:
class Button {
var listener: ((Button) -> Unit)? = null
fun click() {
listener?.invoke(this)
}
}
var btn = Button()
btn.listener = { print("on click") }
btn.click()
6、泛型
在java泛型中存在类型通配符,用"? extends T"指定类参数的上限,用"? super T"指定类型参数的下限.
至于什么时候使用哪一种,在《Effect java》 中给出了PECS原则:
PECS: producer-extends,consumer-super
在生产者中使用"? extends T",在消费者中使用"? super T".
java中使用类型的关系去设计了通配符,这样做的确在实现上是比较清晰的.但是我个人其实更加喜欢kotlin中直接通过功能去规定类型安全的类型上下界.
public <T> void copy(List<? super T> dest, List<? extends T> src) {
...
}
List<? super T> dest 是消费者,数据将会放到这里.而List<? extends T> src是生产者,数据从这里提供.
实际上看copy这个java方法,在定义的时候需要稍微思考一下才能确定哪个用super哪个用extends.但是如果你用kotlin的话想都不用想,消费者用in,生产者用out:
fun <T> copy(dest: Array<in T>, src: Array<out T>) {
...
}
直接用in/out这种功能描述是不是比java用super/extends这种类型描述直接了很多?
泛型这部分参考了《Kotlin极简教程》,这本书真的不错,强烈推荐.而大家如果对java泛型有兴趣的话可以去可空《Effect java》的相关章节或者也可以去看看我之前写的两篇文章 《java泛型那些事》、《再谈Java泛型》
7、无缝调用java
当然,一个语言就算做的再好,但是没有一个健全的生态的话是很难被大众接受的.kotlin能够火起来,甚至被谷歌爸爸钦定为安卓的官方推荐语言.一个很重要的原因就是它可以无缝与java相互调用.以前写的java代码不用任何处理就能直接在kotlin中使用,而java也能无缝调用kotlin代码.
实际上在安卓中,编译的时候kotlin代码就会被编译成java代码,所以它们其实是等价的.
作者 | 嘉伟咯
声明 | 本文是 嘉伟咯 原创,已获授权发布,未经原作者允许请勿转载
以上是关于PotPlayer 到底好在哪里?的主要内容,如果未能解决你的问题,请参考以下文章