分类 技术 下的文章

在本系列的 上一篇文章 中,我们用 TensorFlow 构建了第一个神经网络,然后还通过 Keras 接触了第一个数据集。在本系列的第七篇文章中,我们将继续探索神经网络,并使用数据集来训练模型。我们还将介绍另一个强大的机器学习 Python 库 scikit-learn。不过在进入正题之前,我要介绍两个轰动性的人工智能应用:ChatGPT 和 DALL-E 2。(LCTT 译注:此文原文发表于 2023 年初,恰值以 ChatGPT 为代表的 AI 热潮开始掀起。)

OpenAI 是一个人工智能研究实验室,它在人工智能和机器学习领域做了很多研究。 埃隆·马斯克 Elon Musk 是该组织的联合创始人之一。2022 年 11 月,该实验室推出了一款名为 ChatGPT 的在线工具。它是一个可以像人类一样聊天的人工智能聊天机器人。它是使用监督学习和强化学习技术训练的 大型语言模型 large language model (LLM)。ChatGPT 使用了 OpenAI 的 GPT-3.5 语言模型,这是 GPT-3( 生成式预训练变换器 Generative Pre-trained Transformer )的改进版本,GPT-3 是一种使用深度学习来生成类似人类文本的语言模型。(LCTT 译注:OpenAI 已于 2023 年 3 月 14 日 发布了 GPT-4.0,它支持图文混合的输入输出,并大幅提升了推理能力和准确性。)我仍然记得第一次使用 ChatGPT 时的兴奋。它清楚地展现了人工智能的能力。ChatGPT 的回答质量很高,通常与人类给出的答案没有区别。你可以使用它来纠正语法错误、改写句子、总结段落、编写程序等。实际上,我就用 ChatGPT 改写了本文中的许多句子。此外,我还故意使用有语法错误的文本测试了 ChatGPT,它纠正后的句子非常准确。它重新措辞和总结段落的能力也很惊人。

程序员甚至有可能使用 ChatGPT 在短时间内解决编程难题。在 编程探险挑战赛 2022 Advent of Code 2022 中,就有人这样宣称(LCTT 译注:比赛官方只是没有完全禁止使用人工智能作为辅助,但是并不很推崇这样的作法。消息来源)。事实上在 2022 年 12 月,也就是 ChatGPT 发布的一个月后,Stack Overflow 发布了一条新的规定,禁止提交 GPT 或 ChatGPT 生成答案。(LCTT 译注:消息来源:Temporary policy Generative AI (e.g., ChatGPT) is banned - Meta Stack Overflow

图 1:ChatGPT 生成的程序

图 1 显示了 ChatGPT 编写的将两个矩阵相加的 Python 程序。我要求用 BASIC、FORTRAN、Pascal、Haskell、Lua、Pawn、C、c++、Java 等语言编写程序,ChatGPT 总能给出答案,甚至对于像 Brainfuck 和 Ook! 这样生僻的编程语言也是如此。我很确定 ChatGPT 没有从互联网上复制程序代码。更确切地说,我认为 ChatGPT 是基于对上述编程语言的语法知识生成了这些答案的,这些知识是从训练它的大量数据中获得的。许多专家和观察人士认为,随着 ChatGPT 的发展,人工智能已经成为主流。ChatGPT 的真正力量将在未来几个月或几年里被看到。

OpenAI 的另一个令人惊叹的在线人工智能工具是 DALL-E 2,它以卡通机器人 WALL-E(LCTT 译注:电源《机器人总动员》中的主角)和著名画家/艺术家 萨尔瓦多·达利 Salvador Dalí 的名字命名。DALL-E 2 是一个可以根据英文描述来生成绘画的人工智能系统。该工具支持丰富的图像风格,如油画、卡通、漫画、现实主义、超现实主义、壁画等。它还可以模仿著名画家的风格,如达利、毕加索、梵高等。由 DALL-E 2 生成的图像质量非常高。我用下面的描述测试了这个工具:“一个快乐的人在海滩旁看日出的立体主义画作”。图 2 是 DALL-E 2 根据我的描述生成的图像之一。立体主义是毕加索推广的一种绘画风格。问问你的任何一个画家朋友,他/她都会说这确实是一幅立体主义风格的画。令人惊讶的是软件——它也许很复杂——能够模仿像毕加索、梵高、达利这样的大师。我强烈建议你体验一下它。这种体验将非常有趣,同时也体现了人工智能的威力。但请记住,像 ChatGPT 和 DALL-E 2 这样的工具也会带来很多问题,比如版权侵犯、学生的作业抄袭等。(LCTT 译注:本文的题图就是 DALL-E 3 生成的。)

图 2: DALL-E 2 生成的立体主义画作

介绍 scikit-learn

scikit-learn 是一个非常强大的机器学习 Python 库。它是一个采用 新 BSD 许可协议 new BSD licence (LCTT 译注:即三句版 BSD 许可证) 的自由开源软件。scikit-learn 提供了回归、分类、聚类和降维等当面的算法,如 支持向量机 Support Vector Machine (SVM)、随机森林、k-means 聚类等。

在下面关于 scikit-learn 的介绍中,我们将通过代码讨论支持向量机。支持向量机是机器学习中的一个重要的监督学习模型,可以用于分类和回归分析。支持向量机的发明人 Vladimir Vapnik 和 Alexey Chervonenkis。他们还一起提出了 VC 维 Vapnik–Chervonenkis dimension 概念,这是一个评估模型分类能力的理论框架。

图 3 是使用支持向量机对数据进行分类的程序。第 1 行从 scikit-learn 导入 svm 模块。跟前面几篇中介绍的 python 库一样,scikit-learn 也可以通过 Anaconda Navigator 轻松安装。第 2 行定义了一个名为 X 的列表,其中包含训练数据。X 中的所有元素都是大小为 3 的列表。第 3 行定义了一个列表 y,其中包含列表 X 中数据的类别标签。在本例中,数据属于两个类别,标签只有 0 和 1 两种。但是使用该技术可以对多个类别的数据进行分类。第 4 行使用 svm 模块的 SVC() 方法生成一个支持向量分类器。第 5 行使用 svm 模块的 fit() 方法,根据给定的训练数据(本例中为数组 Xy)拟合 svm 分类器模型。最后,第 6 行和第 7 行基于该分类器进行预测。预测的结果也显示在图 3 中。可以看到,分类器能够正确区分我们提供的测试数据。

图 3: 使用 SVM 进行分类

图 4 中的代码是一个使用 SVM 进行回归的例子。第 1 行次从 scikit-learn 导入 svm 模块。第 2 行定义了一个名为 X 的列表,其中包含训练数据。注意,X 中的所有元素都是大小为 2 的列表。第 3 行定义了一个列表 y,其中包含与列表 X 中的数据相关的值。第 4 行使用 svm 模块的 SVR() 方法生成支持向量回归模型。第 5 行使用 svm 模块的 fit() 方法,根据给定的训练数据(本例中为数 Xy)拟合 svm 回归模型。最后,第 6 行根据该 svm 回归模型进行预测。此预测的结果显示在图 4 中。除了 SVR() 之外,还有 LinearSVR()NuSVR() 两种支持向量回归模型。将第 4 行替换为 regr = svm.LinearSVR()regr = svm.NuSVR(),并执行代码来查看这些支持向量回归模型的效果。

图 4:使用 SVM 进行回归

现在让我们把注意力转到神经网络和 TensorFlow 上。但在下一篇讲无监督学习和聚类时,我们还会学习 scikit-learn 提供的其他方法。

神经网络和 TensorFlow

在上一篇中我们已经看到了 TensorFlow 的 nn 模块提供的 ReLU ( 整流线性单元 rectified linear unit )和 Leaky ReLU 两个激活函数,下面再介绍两个其他激活函数。tf.nn.crelu() 是串联 ReLU 激活函数。tf.nn.elu() 指数线性单元 exponential linear unit 激活函数。我们将在后续用 TensorFlow 和 Keras 训练我们的第一个模型时用到其中一个激活函数。

在开始训练模型之前,我想向你分享 TensorFlow 的提供的“神经网络实验场”工具。它通过可视化的方式帮助你理解神经网络的工作原理。你可以直观地向神经网络中添加神经元和隐藏层,然后训练该模型。你可以选择 Tanh、Sigmoid、Linear 和 ReLU 等激活函数。分类模型和回归模型都可以使用该工具进行分析。训练的效果以动画的形式显示。图 5 显示了一个示例神经网络和它的输出。你可以通过 https://playground.tensorflow.org 访问它。

图 5:神经网络实验场

训练第一个模型

现在,我们使用 上一篇 提到的 MNIST 手写数字数据集来训练模型,然后使用手写数字图像对其进行测试。完整的程序 digital.py 相对较大,为了便于理解,我将程序拆分成几个部分来解释,并且添加了额外的行号。

import numpy as np
from tensorflow import keras, expand_dims
from tensorflow.keras import layers
num_classes = 10
input_shape = (28, 28, 1)
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data( )

第 1 行到第 3 行加载必要的包和模块。第 4 行将类别的数量定义为 10,因为我们试图对 0 到 9 进行分类。第 5 行将输入维度定义为 (28,28,1),这表明我们使用是 28 x 28 像素的灰度图像数据。第 6 行加载该数据集,并将其分为训练数据和测试数据。关于该数据集的更多信息可以参考 上一篇 的相关介绍。

x_train = x_train.astype("float32") / 255
x_test = x_test.astype("float32") / 255
x_train = np.expand_dims(x_train, 3)
x_test = np.expand_dims(x_test, 3)
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

第 7 行和第 8 行将图像像素值从 [0,255] 转换到 [0,1]。其中 astype() 方法用于将整数值类型转换为浮点值。第 9 行和第 10 行将数组 x_testx_train 的维度从 (60000,28,28) 扩展为 (60000,28,28,1)。列表 y_trainy_test 包含从 0 到 9 的 10 个数字的标签。第 11 行和第 12 行将列表 y_trainy_test 转换为二进制类别矩阵。

   try:
      model = keras.models.load_model(“existing_model”)
   except IOError:
      model = keras.Sequential(
        [
        keras.Input(shape=input_shape),
        layers.Conv2D(32, kernel_size=(3, 3), activation=”relu”),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Conv2D(64, kernel_size=(3, 3), activation=”relu”),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Flatten( ),
        layers.Dropout(0.5),
        layers.Dense(num_classes, activation=”softmax”),
        ]
      )
      batch_size = 64
      epochs = 25
      model.compile(loss=”categorical_crossentropy”, optimizer=”adam”, metrics=[“accuracy”])
      model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1)
      model.save(“existing_model”)

训练模型是一个处理器密集和高内存消耗的操作,我们可不希望每次运行程序时都要重新训练一遍模型。因此,在第 13 行和第 14 行中,我们先尝试从 existing_model 目录加载模型。第一次执行此代码时,没有模型存在,因此会引发异常。第 16 到 21 行通过定义、训练和保存模型来处理这个异常。第 16 行代码(跨越多行)定义了模型的结构。这一行的参数决定了模型的行为。我们使用的是一个序列模型,它有一系列顺序连接的层,每一层都有一个输入张量和一个输出张量。我们将在下一篇文章中讨论这些定义模型的参数。在此之前,将这个神经网络看作一个黑箱就可以了。

第 17 行将批大小定义为 64,它决定每批计算的样本数量。第 18 行将 epoch 设置为 25,它决定了整个数据集将被学习算法处理的次数。第 19 行对模型的训练行为进行了配置。第 20 行根据给定的数据和参数训练模型。对这两行代码的详细解释将推迟到下一篇文章中。最后,第 21 行将训练好的模型保存到 existing_model 目录中。模型会以多个 .pb 文件的形式保存在该目录中。注意,第 16 到 21 行位于 except 块中。

print(model.summary( ))
score = model.evaluate(x_test, y_test, verbose=0)
print(“Test loss:”, score[0])
print(“Test accuracy:”, score[1])

第 22 行打印我们训练的模型的摘要信息(见图 6)。回想一下,在加载数据集时将其分为了训练数据和测试数据。第 23 行使用测试数据来测试我们训练的模型的准确性。第 24 行和第 25 行打印测试的详细信息(见图 8)。

图 6:模型的细节信息

img = keras.utils.load_img("sample1.png").resize((28, 28)).convert('L')
img = keras.utils.img_to_array(img)
img = img.reshape((1, 28, 28, 1))
img = img.astype('float32')/255
score = model.predict(img)
print(score)
print("Number is", np.argmax(score))
print("Accuracy", np.max(score) * 100.0)

现在,是时候用实际数据来测试我们训练的模型了。我在纸上写了几个数字,并扫描了它们。图 7 是我用来测试模型的一个图像。第 26 行加载图像,然后将其大小调整为 28 x 28 像素,最后将其转换为灰度图像。第 27 到 29 行对图像进行必要的预处理,以便将它输入到我们训练好的模型中。第 30 行预测图像所属的类别。第 31 到 33 行打印该预测的详细信息。图 8 显示了程序 digital.py 的这部分输出。从图中可以看出,虽然图像被正确识别为 7,但置信度只有 23.77%。进一步,从图 8 中可以看到它被识别为 1 的置信度为 12.86%,被识别为 8 或 9 的置信度约为 11%。此外,该模型甚至在某些情况下会是分类错误。虽然我找不到导致性能低于标准的准确原因,但我认为相对较低的训练图像分辨率以及测试图像的质量可能是主要的影响因素。这虽然不是最好的模型,但我们现在有了第一个基于人工智能和机器学习原理的训练模型。希望在本系列的后续文章中,我们能构建出可以处理更困难任务的模型。

图 7:测试手写数字样例

在本文介绍了 scikit-learn,在下一篇文章中我们还会继续用到它。然后介绍了一些加深对神经网络的理解的知识和工具。我们还使用 Keras 训练了第一个模型,并用这个模型进行预测。下一篇文章将继续探索神经网络和模型训练。我们还将了解 PyTorch,这是一个基于 Torch 库的机器学习框架。PyTorch 可以用于开发 计算机视觉 computer vision (CV) 和 自然语言处理 natural language processing (NLP) 相关的应用程序。

图 8:digit.py 脚本的输出

致谢:感谢我的学生 Sreyas S. 在撰写本文过程中提出的创造性建议。

(题图:DA/c8e10cac-a5a5-4d53-b5eb-db06f448e60e)


via: https://www.opensourceforu.com/2023/02/ai-an-introduction-to-scikit-learn-and-our-first-trained-model/

作者:Deepu Benson 选题:lujun9972 译者:toknow-gh 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

以下是使用 WSL 关闭在 Windows 内运行的 Linux 系统的不同方法。

你使用 WSL 在 Windows 内运行 Linux 吗?你想知道如何关闭在 WSL 中运行的 Linux 发行版吗?

你当然可以在 WSL 中运行的 Linux 系统中 执行 shutdown 命令

sudo shutdown now

你还可以使用 wsl 命令关闭 Linux 系统。如果你有多个发行版在 WSL 中运行,这是一种极好的方法。

在 WSL 中使用 Windows 终端关闭 Linux 系统

在这个方法中,我假设通常的 shutdown 命令在 WSL Linux 系统中不起作用。

首先,在 Windows 中打开一个终端。在这里,我使用的是 Windows 11,并在 WSL 2 下安装了 Ubuntu。

打开 Windows 终端

? 你可以在标准的 Windows 终端上使用 wsl 命令。在运行的 Linux 发行版中也可以访问该命令。这里,命令的名称是 wsl.exe

现在,你需要列出已安装的发行版及其状态。为此,请输入

wsl --list --verbose
或
wsl -l -v

列出已安装的发行版

在这里,你可以看到,我已经安装了一个 WSL Ubuntu,它目前正在运行。

关闭所有正在运行的 Linux 发行版

有时,你可能想一次性停止正在运行的 WSL 实例。

在 Powershell 或 Windows 终端中,使用以下命令:

wsl --shutdown

这将关闭所有会话。

此外,你还可以在任何正在运行的 WSL Linux 发行版终端中执行相同的功能。在发行版中时,你只需要使用 wsl.exe 而不是 wsl

wsl.exe --shutdown

关闭所有正在运行的 WSL 发行版

运行此命令后,所有正在运行的 WSL 发行版都将终止。WSL 2 轻量级虚拟机也被终止。因此,如果你想重新启动 WSL 2 虚拟机环境,它将很有用。

终止特定的 Linux 发行版

要终止特定正在运行的 WSL 发行版,请打开单独的 Windows 终端并运行:

wsl --terminate <发行版名称>

此处,发行版名称是你使用 wsl -l -v ⁣ 命令列出所有已安装的 WSL 发行版时获得的名称。

列出 WSL 发行版

wsl --terminate Ubuntu

执行后,指定的 Linux 发行版将被终止。

如果你在另一个发行版中,请使用以下命令列出系统上安装的所有 WSL 发行版:

wsl.exe -l -v

现在,使用以下命令终止所需的发行版:

wsl.exe --terminate <发行版名称>

从另一个 WSL 发行版中关闭 WSL 发行版

总结

有些人直接关闭正在运行的 Linux 应用,但我认为这不太优雅。

另外,就像 Linux 终端一样,你可以使用:

  • logout 命令,用于关闭该发行版。
  • exit 命令用于退出运行 Linux 发行版的终端。
  • 或者,按 CTRL+D 执行与 exit 命令相同的操作。

但关闭 Linux 系统的 WSL 方式还有一个额外的优势,即可以针对多个 Linux 系统执行此操作。

我希望它对你有帮助。

(题图:DA/615fd564-a02c-4340-9c8f-ebabcc7c0e0c)


via: https://itsfoss.com/shut-down-wsl-distros/

作者:Sreenath 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在 Linux 中,你可以根据自己的需要创建高级网络设置,如 网络绑定 Network Bonding 网卡聚合 NIC teaming 、VLAN 标记和桥接。这些高级功能可以提高网络连接的效率和可靠性。

你可以在以太网、绑定、聚合或桥接设备等其他接口上创建 VLAN 接口。

在本文中,我们将学习如何在 RHEL 系统中通过网络绑定配置 VLAN 标记,它允许来自不同网络的流量共享共同的物理链接。

通过绑定对 VLAN 进行标记的先决条件

  • 网络聚合需要在网络交换机端口上启用 LACP(802.3ad),以聚合链路。
  • 网络聚合需要将网络端口配置为中继端口,这样可以在同一端口上添加多个 VLAN。此外,还要从它们那里获取 VLAN ID,以便在操作系统层面进行配置。
  • Linux 系统应该有两个接口。
  • 如果是物理服务器,我们建议在板载接口和 PCI 接口之间配置绑定,以避免主机端的网卡出现单点故障。

绑定内核模块

使用 lsmod 命令检查 Linux 系统是否已加载绑定模块。

lsmod | grep -i bonding
bonding 12451 0

默认情况下已加载。否则,请使用 modprobe 命令加载它。

modprobe bonding

1) LACP 绑定配置

我们将配置基于 LACP(Mode 4 – 802.3ad)的链路聚合绑定,通过组合名为 em1p7p1 的两个接口,为绑定接口提供更大的带宽。

1a) 创建 Bond 接口

在目录 /etc/sysconfig/network-scripts/ 下创建绑定接口文件 ifcfg-bond0

vi /etc/sysconfig/network-scripts/ifcfg-bond0

TYPE=Bond
DEVICE=bond0
NAME=bond0
BONDING_MASTER=yes
BOOTPROTO=none
ONBOOT=yes
BONDING_OPTS="mode=4 miimon=100 lacp_rate=1"
NM_CONTROLLED=no

1b) 配置第一个从接口

配置你想要进行绑定的第一个从属接口 em1。请根据你的环境使用正确的接口名称。

vi /etc/sysconfig/network-scripts/ifcfg-em1

TYPE=Ethernet
BOOTPROTO=none
DEVICE=em1
ONBOOT=yes
MASTER=bond0
SLAVE=yes

1c) 配置第二个从接口

配置你想要进行绑定的第二个从属接口 p7p1。 请根据你的环境使用正确的接口名称。

vi /etc/sysconfig/network-scripts/ifcfg-p7p1

TYPE=Ethernet
BOOTPROTO=none
DEVICE=p7p1
ONBOOT=yes
MASTER=bond0
SLAVE=yes

重启网络服务

重启网络服务以启用绑定接口或使用 ifup 命令启动它们。

systemctl restart network

2) 通过绑定接口进行 VLAN 标记

LACP 绑定配置已完成,所有接口现已启动并运行。让我们按照以下步骤配置绑定接口上的 VLAN 标记。

正如先决条件中所讨论的,以下是映射到相应以太网卡端口(em1p7p1)和网络交换机端口的 VLAN。

  • VLAN ID (221), VLAN N/W = 192.168.10.0/24
  • VLAN ID (331), VLAN N/W = 192.168.20.0/24

2a) 将 VLAN 221 配置到 Bond0

为 VLAN id 221 创建标记接口文件 /etc/sysconfig/network-scripts/ifcfg-bond0.221 并添加以下内容。

vi /etc/sysconfig/network-scripts/ifcfg-bond0.221

DEVICE=bond0.221
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.10.100
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
VLAN=yes
NM_CONTROLLED=no

2b) 将 VLAN 331 配置到 Bond0

为 VLAN id 331 创建标记接口文件 /etc/sysconfig/network-scripts/ifcfg-bond0.331 并添加以下内容。

vi /etc/sysconfig/network-scripts/ifcfg-bond0.331

DEVICE=bond0.331
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.20.100
NETMASK=255.255.255.0
GATEWAY=192.168.20.1
VLAN=yes
NM_CONTROLLED=no

重启网络服务

重启网络服务以启用绑定接口或使用 ifup 命令启动它们。

systemctl restart network

验证 VLAN 标记配置

最后使用 ip 命令 验证 VLAN 标记接口是否已配置并启动和运行。

是的,我可以看到 bondo.221@bond0bon0.331@bond0 有两个不同的 IP,并且能够通过 ssh 访问系统,没有任何问题。因此,VLAN 标记按预期工作。

结论

恭喜,你已经了解了如何在 RHEL 系统上通过 LACP 绑定配置 VLAN 标记,该系统监听两个 VLAN。VLAN 标记不限于两个 VLAN,支持多个 VLAN,你可以根据该 VLAN 的网络配置添加 VLAN 标记。

(题图:DA/2854516d-4d19-4008-a421-05f9a2a78368)


via: https://www.2daygeek.com/configure-vlan-tagging-over-network-bonding-rhel/

作者:Jayabal Thiyagarajan 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用 VLC 媒体播放器播放和管理字幕的新手指南。

我是一个超级动漫迷,如果你想观看最新的剧集,那么你只能观看日语音频,因此字幕对于非日语观众来说是必不可少的。

值得庆幸的是,我最喜欢的视频播放器 VLC 很好地支持字幕。难怪它是有史以来 最好的视频播放器 之一。

VLC 实际上可以做的不仅仅是播放提供的字幕。

在本指南中,我将引导你完成以下内容:

  • 如何使用可用的字幕(如果有的话)
  • 如何使用下载的字幕
  • 如何自动下载字幕(使用 vlsub 扩展)
  • 如何将字幕与视频同步
  • VLC 支持哪些字幕格式

那么让我们从第一个开始。

如何在 VLC 中启用字幕

有些视频附带字幕文件。如果字幕与视频文件位于同一文件夹中,你可以轻松启用字幕。

虽然启用字幕的方法有多种,但我将向你展示两种有效的方法。

按 V 键(最简单的方法)

如果当前播放的视频有一个或多个字幕,那么你可以按 V 键,它将在可用选项之间更改字幕。

正如你所看到的,当我按下 V 时,它会在多个字幕之间漫游,甚至可以选择完全禁用字幕。

使用顶部菜单栏或右键单击上下文菜单

虽然按 V 键是启用字幕的最简单方法,但如果你有多个字幕文件(可能有多种语言)并且必须选择其中之一,那么按 V 键的效果就不是最好了。

假设你要查找的字幕位于最后一个位置,那么你必须按 V 键几次,如果你错过了,请再次重复该过程。

因此,在这种情况下,从顶部菜单中选择字幕轨道是一种简单方便的方法。

要使用此方法,你必须遵循两个简单的步骤:

  • 单击顶部菜单栏中的 “ 字幕 Subtitle ” 菜单
  • 选择 “ 子轨道 Sub Track ”,然后选择所需的字幕轨道

你还可以通过右键单击正在播放的视频,并选择字幕选项来完成此操作。

如何在 VLC 中使用下载的字幕

如果你从网上下载了字幕,但不知道如何在 VLC 中使用它们,那么本节将解决该问题。

要使用下载的字幕,你必须将其导入 VLC。并且可以通过遵循给定的简单步骤轻松完成:

  • 首先,单击顶部菜单栏中的 “字幕”
  • 选择第一个 “ 添加字幕文件 Add Subtitle File ” 选项,它将打开文件管理器
  • 从这里找到字幕文件所在的位置并选择它

完成后,可以通过顶部菜单栏中的字幕菜单访问添加的字幕:

? 如果你要保存视频以供将来使用,我建议将字幕文件复制到与视频文件本身相同的文件夹中。更好的方法是将文件重命名为与视频文件相同的名称。因此,如果视频文件是 my-xyz.mp4,则字幕文件应该是 my-xyz.srt。这样,字幕要么自动播放,要么在你按 v 键时被识别。

如何在 VLC 中自动下载字幕(适用于 Linux 用户)

你是否知道 VLC 有一个名为 VLsub 的插件,可用于从网络下载字幕并直接在 VLC 中访问它们?

如果你是 Linux 用户,请按照给定的说明将其添加到 VLC 中。

首先,使用 wget 命令 下载 zip 文件:

wget https://github.com/exebetche/vlsub/archive/master.zip

接下来,如下所示 使用 unzip 命令解压文件

unzip master.zip

之后,你需要 创建一个新目录

mkdir -p ~/.local/share/vlc/lua/extensions

最后,使用 mv 命令 将文件移动到创建的目录,如下所示:

mv ~/vlsub-master/vlsub.lua ~/.local/share/vlc/lua/extensions

现在,打开VLC播放器,在 “ 视图 View ” 菜单下,你将找到 “VLsub”:

要使用 VLsub 下载字幕,首先,输入电影名称和年份以获得更好的结果,然后点击“ 按名称搜索 Search by name ”按钮,从结果中选择字幕文件,然后单击“ 下载选择 Download selection ”按钮,如图所示 :

就是这样!

要了解有关如何使用 VLsub 扩展的更多信息,请参阅我们有关该主题的 详细指南

如何在 VLC 中将字幕与电影同步

有时,下载的字幕可能会比电影中发生的事情稍微落后或提前,这可能会令人沮丧!

不用担心! VLC也有解决这个问题的方法!

在 VLC 中,你可以通过按 GH 键前进或后退字幕。

  • G 键将使字幕快进 50 毫秒
  • H 键将使字幕后退 50 毫秒

虽然 50 毫秒听起来太短,但你会在 2-3 次按键内注意到显着差异。

如果你在实际场景中跑得太超前或落后,也可以按住它们。

还感到困惑吗? 你可以参考我们的 如何在 VLC 中同步字幕的详细指南

VLC 支持哪些字幕格式?

如果你想从互联网上下载字幕,那么你必须了解 VLC 支持的字幕格式。

以下是 VLC 支持的字幕格式列表:

  • *.idx(VOBSub)
  • *.cvd(Chaoji VCD)
  • *.usf(通用字幕)
  • *.ttxt(MPEG-4 定时文本)
  • *.srt(SubRip)
  • *.ssa(Sub Station Alpha)
  • *.smi(SAMI)
  • *.aqt(AQTitle)
  • *.txt(ML2/VPlayer)
  • *.rt(RealText/Smil)
  • *.psb(PowerDivX)
  • *.pjs(Phoenix Subtitle)
  • *.dks(DKS)
  • *.mpl(ML2)
  • *.jss(JACOSub)
  • *.svcd(Super Video CD)
  • *.txt(ML2/VPlayer)

但最流行的微妙类型是 *.srt,并且通常在你下载视频文件时默认提供。

VLC 的功能远不止播放视频

你知道可以使用 VLC 下载 YouTube 视频吗? 嗯,它可以做的远不止这些。

为此,我们制作了关于 你可以使用 VLC 播放器做的很酷的事情 的详细指南。

以下是如何充分利用 VLC 的方法:

让 VLC 播放器在 Linux 中发挥更大作用的 5 个技巧

我希望本指南对你有所帮助。

(题图:DA/39a917f2-a1b3-4167-8393-1af0859105b0)


via: https://itsfoss.com/vlc-use-subtitles/

作者:Sagar Sharma 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Obsidian 知识库工具的真正威力在于链接。学习使用它。

Obsidian 的最大卖点之一是其强大的文档链接和可视化。Obsidian 提供了多种链接文档和图像的方法。我们将逐一介绍。

你将在 Obsidian 中看到三种内部链接方法:

  • 拖放方式(简单但有限)
  • 使用 Markdown 链接
  • 使用维基链接(广泛且强大)

我还将分享一些有关使用图表和反向链接的技巧。让我们来看看它。

非自由和开源软件警告! Obsidian 不是开源软件,我们知道这一事实。然而,它是一种在编码人员(包括开源开发人员)中非常流行的工具。这就是我们介绍它的原因。

方法 1:通过拖放链接

是的,这是最简单的链接。转到要在其中创建链接的文档。现在,在左侧边栏上,展开该特定文件夹,其中包含目标注释。

要创建链接,只需将此目标文件拖放到你希望链接显示的位置即可。

通过拖放添加链接

你可以稍后更改链接文本。

方法 2:使用 Markdown 链接

由于 Obsidian 使用 Markdown 作为其核心,因此可以通过输入传统的 Markdown 命令进行链接。

比方说,你必须在 “Markdown Advanced” 页面中创建一个指向 “Markdown Checklist” 页面的链接。首先,你需要记下要链接到的文件的位置。

然后,只需添加这一行:

[链接文本](文件的相对路径)

或者,如果你有要链接的文件,并且想要提供系统中的绝对路径,请使用:

[链接文本](file://绝对路径)

使用绝对路径链接

? 如果你 使用 Markdown 链接,请确保文件和文件夹的名称中没有空格,因为这在某些情况下可能会引起一些麻烦。

方法 3:使用紧凑型维基链接来链接页面

Obsidian 支持使用 维基链接 Wikilink 来链接页面的直观方式。它们是紧凑的链接并且是交互式链接。默认情况下,此功能处于打开状态。

如果你想知道,是的,它与维基百科有关。他们用它来内部链接他们的维基页面。

添加内部注释的链接

要创建链接,只需输入 [[。这将启动一个交互式对话框,你可以在其中搜索要链接的文档。

添加交互式维基链接

? 你可以使用 [[link|要显示的文本]]使自定义文本显示在维基链接上。例如 [[notes/hello.md|这是 Hello 文件的链接]]

添加图像文件

此外,你可以使用此链接方法添加其他文件,例如图像,但在使用 [[ 搜索之前需要添加 ! 符号。请看下图以了解其实际效果。

使用维基链接添加图像

添加内部标题链接

有一种方法可以在同一页面的各个标题之间创建内部链接。为此,首先输入 [[,然后使用 Markdown 标题语法和要链接的特定标题的名称。

例如,如果你打算链接到文档中的第六个标题(2 级标题),请使用:

[[##Paragraph Six

这将显示在交互式选择中。

链接到标题

? 你可以将鼠标悬停在链接上时按 CTRL 键来进行预览。

添加指向文本块的链接

Obsidian 允许你创建指向文档中特定文本块的链接。为此,首先,转到要添加链接的块的最末尾。

现在,使用 ^ 符号向该块添加唯一标识符。

向块添加唯一标识符

现在,你可以通过输入 [[^ 来添加到此部分的链接。这将自动提示你可用的块。选择一项并按回车键。

添加链接到块

维基链接的问题

有时,如果你想要纯 Markdown 文档,并且专注于多个 Markdown 编辑器之间的互操作性,那么维基链接功能可能会产生问题。

由于这些在 Obsidian 内部工作,因此链接在其他编辑器上显示为损坏。在这种情况下,你可以关闭维基链接。一切都完美无缺,只是链接现在将以 Markdown 格式显示。

为此,首先选择左下角的设置按钮。

点击设置

现在,从 “ 文件和链接 Files and Links ” 选项卡关闭维基链接功能。

关闭维基链接功能

组织附件文件的提示

对于那些在 Obsidian 中附加许多文件的人,建议在每本书下为这些附件创建一个单独的文件夹。

现在,打开 “ 设置 Settings > 文件和链接 Files and Links ”。在这里,首先,你需要确保链接路径是相对于文件位置的。然后,将新附件的默认位置设置为 “ 当前文件夹下的子文件夹 Subfolder under current folder ”。现在,在下一个字段中指定 “ 附件 Attachments ”,即 “ 子文件夹名称 Subfolder name ”。

设置附件文件夹位置

就是这样。从现在开始,当你通过复制和粘贴放置任何附件时,它们将自动放置在该笔记文件夹内的“附件”文件夹中。新链接将在任何 Markdown 编辑器之间完美地互操作,因为路径现在是相对于文件位置的。

? 即使此维基链接功能已关闭,你仍然可以使用 [[ 键以交互方式搜索和添加链接。变化是,现在链接不再是紧凑的,而是长 Markdown 链接。

此外,你还可以打开 “ 自动更新内部链接 Automatically Update Internal Links ” 按钮,以确保在重命名文件时自动更新链接。

使用图表和反向链接

创建完链接后,就可以通过链接查看笔记之间的其他笔记之间的关系。单击侧面的图表视图按钮即可进入图表预览。

Obsidian 中的图表视图

正如你所看到的,你将在一个整洁的图表上获得该注释的链接。如果你按空白选项卡上的图表视图,你将获得所有笔记及其关系。

Notes Vault 示例的一些链接示例

此外,每个笔记都有一 “传出链接” 和 “传入链接” 选项卡,你可以在其中跟踪相关链接。

传出和传入链接

总结

正如你所看到的,虽然在 Obsidian 中创建指向其他页面的内部链接很简单,但通过维基链接,你可以创建更加个性化和定制的知识库。

对于那些不喜欢 Obsidian 闭源性质的人来说,Logseq 是一个不错的选择。

(题图:DA/57173f4d-5548-471f-8d70-a48e3b5e964a)


via: https://itsfoss.com/obsidian-create-links/

作者:Sreenath 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用 GNOME 的 Nautilus 文件搜索,通过这些方便的提示改善您的文件搜索体验,成为一名专业的搜索者。

GNOME 的 Nautilus 文件管理器功能丰富。

不信?看看这篇文章,你就会知道如何将 Nautilus 的全部功能 发挥到极致。

文件搜索是 Nautilus 被忽视的功能之一。没有多少 Linux 用户充分发挥了它的潜力。

因此,我编写了本教程,与大家分享一些使用 Nautilus 文件管理器中文件搜索选项的技巧。

我知道经验丰富的 Linux 用户可以使用终端中的 find 命令 实现相同的目的,但许多桌面用户更喜欢使用 GUI。

让我们从最简单的搜索选项开始。

按名称搜索文件

打开 Nautilus 并单击顶部栏上的放大镜。这将打开一个搜索栏,你可以在其中输入查询字符串。

当你输入时,搜索结果会不断完善,并在输入完整文件名时进行匹配。

在 Nautilus 中搜索

? 搜索在当前目录及其子目录中执行。可以启用 隐藏文件视图,将隐藏文件包含在搜索结果中。

根据时间搜索文件

使用 Nautilus,你可以根据文件的创建、修改或上次访问的时间过滤搜索。

为此,请单击搜索按钮并开始输入。当你开始输入时,你会注意到搜索按钮附近有一个下拉菜单。点击它。这将为你提供一个菜单,其中包含用于过滤搜索的选项。

单击下拉菜单

单击下拉菜单上的 “ 选择日期 Select Dates ” 按钮。另外,选择选项 “ 文件名 File Name ” 以按文件名匹配。

按日期搜索的设置

这将为你提供一个扩展菜单,你可以在其中选择文件创建、修改或上次访问的日期。

设定标准

在这里,如果你想设置自定义日期,请单击日历图标,如下图所示:

点击日历图标

现在,你将看到一个小日历,并可以相应地选择日期。

选择日期

从列表中设置你选择的日期后,你可以看到搜索栏上应用的条件,并向你显示基于该条件的文件。

应用日期标准

根据文件类型搜索文件

你还可以根据文件类型过滤搜索。假设你正在寻找 PDF 文件。

与上一步一样,单击搜索图标并开始输入文件名。现在,从下拉菜单中,单击 “ 任何 Anything ” 选项并选择 “ 文件名 File Name ”。

根据文件类型搜索

从展开的视图中选择要搜索的文件类型。在这里,我选择了 “PDF/Postscript”。

设置所需的文件类型

选择所需的文件类型后,你可以在搜索栏上看到应用的条件。你还将看到相应的结果。

应用文件类型标准

在搜索选项中没有找到所需的文件类型?向下滚动到底部并单击 “ 其他类型 other types ”。

获取更多文件类型

这将为你提供更多文件类型。

列出更多文件类型

搜索文件内容,而不是名称

默认情况下,根据文件名执行文件搜索。如果你想知道是否有包含特定单词的文件,Nautilus 也允许你这样做。

首先,单击搜索图标并开始输入。现在,与前面的部分一样,转到下拉菜单。

在下拉菜单中,不要选择 “ 文件名 File Name ”,而是选择 “ 全文 Full Text ”。

现在,你可以搜索特定字符串并根据特定日期或文件类型进行搜索过滤。过滤的方法与前面提到的相同。

选择“全文”选项

在这里,我使用了字符串 “text to be”,你可以看到列出了几个具有该特定字符串的文件。另外,你可以看到,该部分也突出显示。

仅搜索文件或仅搜索文件夹

默认情况下,Nautilus 会搜索文件和文件夹。你可以将搜索细化为文件或文件夹。

为此,请在下拉菜单中选择 “ 文件名 File Name ”,然后从类型列表中选择 “ 文件 Files ” 或 “ 文件夹 Folders ”,如下所示。

仅在文件或文件夹中搜索

这将根据你的选择过滤结果。

应用多个过滤器

你可以将日期过滤器和类型过滤器组合在一起以获得更精确的搜索。为此,请从各自的下拉列表中选择每个条件。

你可以在下面的截图中看到,我已经搜索了包含字符串 “to be search” 的文件。我应用的标准是 1 天内创建的 PDF 文件。

应用多个过滤器

更多 Nautilus 提示和调整

Nautilus 足以满足大多数搜索场景。如果你需要更多,还有专用的 GUI 工具,可让你执行桌面范围的自定义搜索。

ANGRYsearch - 用于 Linux 的快速搜索图形用户界面工具

想要更多这样的 Nautilus 技巧吗? 以 root 身份打开文件 怎么样?

在 Nautilus 文件管理器中以管理员身份打开文件和文件夹

或者将终端的功能与文件管理器结合起来?

在 Linux 中混合搭配终端与 Nautilus 文件管理器

这里还有更多此类提示。请自行查看。

在 Linux 中调整 Nautilus 文件管理器的 13 种方法

我希望你喜欢这些技巧,它们有助于更好地改善你的桌面 Linux 体验。

你还知道其他这样酷的技巧吗? 请在评论中分享。

(题图:DA/77ae519f-e942-42b0-9808-4af943b168cb)


via: https://itsfoss.com/nautilus-file-search/

作者:Sreenath 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出