Seth Kenlon 发布的文章

应用中的语音识别不仅仅是一个有趣的技巧,而且是一个重要的无障碍功能。

 title=

计算机的主要功能之一是解析数据。有些数据比其他数据更容易解析,而语音输入仍然是一项进展中的工作。不过,近年来该领域已经有了许多改进,其中之一就是 DeepSpeech,这是 Mozilla 的一个项目,Mozilla 是维护 Firefox 浏览器的基金会。DeepSpeech 是一个语音到文本的命令和库,使其对需要将语音输入转化为文本的用户和希望为其应用提供语音输入的开发者都很有用。

安装 DeepSpeech

DeepSpeech 是开源的,使用 Mozilla 公共许可证(MPL)发布。你可以从其 GitHub 页面下载源码。

要安装,首先为 Python 创建一个虚拟环境:

$ python3 -m pip install deepspeech --user

DeepSpeech 依靠的是机器学习。你可以自己训练它,但最简单的是在刚开始时下载预训练的模型文件。

$ mkdir DeepSpeech
$ cd Deepspeech
$ curl -LO \
  https://github.com/mozilla/DeepSpeech/releases/download/vX.Y.Z/deepspeech-X.Y.Z-models.pbmm
$ curl -LO \
  https://github.com/mozilla/DeepSpeech/releases/download/vX.Y.Z/deepspeech-X.Y.Z-models.scorer

用户应用

通过 DeepSpeech,你可以将语音的录音转录成书面文字。你可以从在最佳条件下干净录制的语音中得到最好的结果。然而,在紧要关头,你可以尝试任何录音,你可能会得到一些你需要手动转录的东西。

为了测试,你可以录制一个包含简单短语的音频文件:“This is a test. Hello world, this is a test”。将音频保存为一个 .wav 文件,名为 hello-test.wav

在你的 DeepSpeech 文件夹中,通过提供模型文件、评分器文件和你的音频启动一个转录:

$ deepspeech --model deepspeech*pbmm \
  --scorer deepspeech*scorer \
  --audio hello-test.wav

输出到标准输出(你的终端):

this is a test hello world this is a test

你可以通过使用 --json 选项获得 JSON 格式的输出:

$ deepspeech --model deepspeech*pbmm \
  -- json
  --scorer deepspeech*scorer \
  --audio hello-test.wav

这就把每个词和时间戳一起渲染出来:

{
  "transcripts": [
    {
      "confidence": -42.7990608215332,
      "words": [
        {
          "word": "this",
          "start_time": 2.54,
          "duration": 0.12
        },
        {
          "word": "is",
          "start_time": 2.74,
          "duration": 0.1
        },
        {
          "word": "a",
          "start_time": 2.94,
          "duration": 0.04
        },
        {
          "word": "test",
          "start_time": 3.06,
          "duration": 0.74
        },
[...]

开发者

DeepSpeech 不仅仅是一个转录预先录制的音频的命令。你也可以用它来实时处理音频流。GitHub 仓库 DeepSpeech-examples 中有 JavaScript、Python、C# 和用于 Android 的 Java 等各种代码。

大部分困难的工作已经完成,所以集成 DeepSpeech 通常只是引用 DeepSpeech 库,并知道如何从主机设备上获得音频(你通常通过 Linux 上的 /dev 文件系统或 Android 和其他平台上的 SDK 来完成。)

语音识别

作为一个开发者,为你的应用启用语音识别不只是一个有趣的技巧,而是一个重要的无障碍功能,它使你的应用更容易被有行动问题的人、低视力的人和长期多任务处理的人使用。作为用户,DeepSpeech 是一个有用的转录工具,可以将音频文件转换为文本。无论你的使用情况如何,请尝试 DeepSpeech,看看它能为你做什么。


via: https://opensource.com/article/22/1/voice-text-mozilla-deepspeech

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

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

用这个开源的终端会话记录器 Asciinema 来展示终端会话。

 title=

支持电话是很重要的,而且最后往往是令人满意的,但明确的沟通行为对每个参与的人来说都是艰巨的。如果你曾经参加过支持电话,你可能会花好几分钟拼出了最短的命令,并详细解释了空格和回车的位置。虽然直接拿过来用户电脑的控制权往往更容易,但这并不是真正的教育的最佳方式。你可以尝试向用户发送一个屏幕记录,而他们可以复制命令并粘贴到自己的终端。

Asciinema 是一个开源的终端会话记录器。与 scriptscriptreplay 命令类似,Asciinema 准确记录了你的终端显示。它将你的“电影”记录保存到一个文本文件中,然后根据需要进行回放。你可以把你的电影上传到 Asciinema.org,就像你在互联网上分享任何其他视频一样,你甚至可以把你的电影嵌入到网页中。

安装 Asciinema

在 Linux 上,你可以使用你的包管理器安装 Asciinema。

在 Fedora、CentOS、Mageia 或类似系统上:

$ sudo dnf install asciinema

在 Debian、Linux Mint 或类似系统上:

$ sudo apt install asciinema

在 macOS 上,你可以用 Homebrew 安装:

$ sudo brew install asciinema

在 BSD 和任何其它平台上使用 Pkgsrc

$ cd /usr/pkgsrc/misc/py-asciinema
$ sudo bmake install clean

从文本中制作电影

要用 Asciinema 开始录制,你可以使用 rec 子命令:

$ asciinema rec mymovie.cast
asciinema: recording asciicast to mymovie.cast
asciinema: press <ctrl-d> or type "exit" when you're done

一些友好的输出信息提醒你,你正在录制,并告诉你如何停止:按 Ctrl+D 或直接输入 exit

当 Asciinema 处于活动状态时,你在终端所做的一切都会被记录下来。这包括输入、输出、错误、尴尬的停顿、错误或成功。如果在录制时,在你的终端中查看它,它就会被剪断。

当你演示完终端如何工作时,按 Ctrl+D 或输入 exit 来停止记录。

在这个例子中,产生的文件 mymovie.cast 是一个时间戳和动作的集合,它用作回放所使用的脚本(像电影脚本一样)。

{"version": 2, "width": 139, "height": 36, "timestamp": 1641457358, "env": {"SHELL": "/bin/bash", "TERM": "xterm-256color"}}
[0.05351, "o", "\u001b]0;seth:~\u0007"]
[0.05393, "o", "\u001b[1;31m$ \u001b[00m"]
[1.380059, "o", "e"]
[1.443823, "o", "c"]
[1.514674, "o", "h"]
[1.595238, "o", "o"]
[1.789562, "o", " "]
[2.09658, "o", "\""]
[2.19683, "o", "h"]
[2.403994, "o", "e"]
[2.466784, "o", "l"]
[2.711183, "o", "lo"]
[3.120852, "o", "\""]
[3.427886, "o", "
hello
"]
[...]

如果你犯了一个错误,你可以通过删除重现错误的行来去除这个错误。如果你发现自己在录制过程中做了很多命令行修改或冗长的停顿,你可以安装并使用 asciinema-edit 工具,它可以通过你定义的时间戳或消除空闲时间来剪掉这些“镜头”片段。

播放 Asciinema 电影

你可以使用 play 子命令回放你的 Asciinema:

$ asciinema play mymovie.cast

这会接管你的终端会话,并使其成为最接近银幕的形式(除了那次你通过 telnet 观看 ASCII 格式的星球大战)。这个基于文本的电影播放,向你的用户展示了一个复杂的任务是如何完成的。当然,播放的 实际 命令并不真正执行。这不是一个正在运行的 shell 脚本,所以即使你在电影中创建了一个 hello.txt 文件,在播放后也不会有一个新的 hello.txt。这只是为了展示。

然而,它又不仅仅是一个展示。你可以暂停 Asciinema 电影,选择你在屏幕上看到的文本,并将其粘贴到一个活动终端以运行该命令。Asciinema 是有用的文档。它向用户展示了如何完成一项任务,并允许他们进行复制和粘贴以确保准确性。

上传你的 Asciinema 电影

目前还没有像大片一样的 Asciinema 电影,但你可以把你的电影上传到 Asciinema.org,与全世界分享:

$ asciinema upload mymovie.cast

如果你习惯了 YouTube 上传所花费的时间,你会对 Asciinema 电影的传输速度感到惊喜。一个 .cast 文件通常只有几千字节,最多几兆字节,所以上传几乎是瞬间完成的。你不需要注册账户来分享你的电影,但所有无人认领的电影将在七天后会被删除。为了保存你的杰作,你可以在 Asciinema 上开设一个账户,然后坐等电影学院的电话。

Asciinema 作为文档

Asciinema 是演示最基本概念的好方法。因为它保留了从录制中复制和粘贴代码的能力,提供了按需暂停和播放的能力,并且完全准确地描绘了它的内容,它不仅仅是屏幕录像,它要好得多。无论你是用它来向你的朋友炫耀你的终端技能,还是用它来教育同事和学生,Asciinema 都是一个无价的、社交的、可利用的工具。


via: https://opensource.com/article/22/1/record-terminal-session-asciinema

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

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

配置你的系统使用无根容器。

 title=

容器是现代计算的一个重要组成部分,随着围绕容器的基础设施的发展,新的和更好的工具开始浮出水面。过去,你只需用 LXC 就可以运行容器,然而随着 Docker 得到了普及,它开始变得越来越复杂。最终,我们在 Podman 得到了我们所期望的容器管理系统:一个无守护进程的容器引擎,它使容器和吊舱易于构建、运行和管理。

容器直接与 Linux 内核能力(如控制组和命名空间)交互,它们在这些命名空间中产生大量的新进程。简而言之,运行一个容器实际上就是在 Linux 系统内部运行一个 Linux 系统。从操作系统的角度来看,它看起来非常像一种管理和特权活动。普通用户通常不能像容器那样自由支配系统资源,所以默认情况下,运行 Podman 需要 root 或 sudo 权限。然而,这只是默认设置,而且这绝不是唯一可用的设置。本文演示了如何配置你的 Linux 系统,使普通用户可以在不使用 sudo 的情况下(“ 无根 rootless ”)运行 Podman。

命名空间的用户 ID

内核命名空间 本质上是一种虚构的结构,可帮助 Linux 跟踪哪些进程属于同一类。这是 Linux 中的“队列护栏”。一个队列中的进程与另一个队列中的进程之间实际上没有区别,但可以将它们用“警戒线”彼此隔离。要声明一组进程为“容器”,而另一组进程为你的操作系统,将它们分开是关键。

Linux 通过用户 ID(UID)和组 ID(GID)来跟踪哪个用户或组拥有的进程。通常情况下,一个用户可以访问一千个左右的从属 UID,以分配给命名空间的子进程。由于 Podman 运行的是分配给启动容器的用户的整个从属操作系统,因此你需要的不仅仅是默认分配的从属 UID 和从属 GID。

你可以用 usermod 命令授予一个用户更多的从属 UID 和从属 GID。例如,要授予用户 tux 更多的从属 UID 和从属 GID,选择一个还没分配用户的适当的高 UID(如 200000),然后将其增加几千:

$ sudo usermod \
    --add-subuids 200000-265536 \
    --add-subgids 200000-265536 \
    tux

命名空间访问

对命名空间数量也有限制。这通常被设置得很高。你可以用 systctl,即内核参数工具来验证用户的命名空间分配:

$ sysctl --all --pattern user_namespaces
user.max_user_namespaces = 28633

这是很充足的命名空间,而且可能是你的发行版默认设置的。如果你的发行版没有这个属性或者设置得很低,那么你可以在文件 /etc/sysctl.d/userns.conf 中输入这样的文本来创建它:

user.max_user_namespaces=28633

加载该设置:

$ sudo sysctl -p /etc/sysctl.d/userns.conf

在没有 root 权限的情况下运行一个容器

当你设置好你的配置,重启你的计算机,以确保你的用户和内核参数的变化被加载和激活。

重启后,试着运行一个容器镜像:

$ podman run -it busybox echo "hello"
hello

容器像命令一样

如果你是第一次接触容器,可能会觉得很神秘,但实际上,它们与你现有的 Linux 系统没有什么不同。它们实际上是在你的系统上运行的进程,没有仿真环境或虚拟机的成本和障碍。容器和你的操作系统之间的区别只是内核命名空间,所以它们实际上只是带有不同标签的本地进程。Podman 使这一点比以往更加明显,当你将 Podman 配置为无根命令,容器感觉更像命令而不是虚拟环境。Podman 使容器和吊舱变得简单,所以请试一试。


via: https://opensource.com/article/22/1/run-containers-without-sudo-podman

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

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

Audacity 是开源软件世界中的一个经典的强大工具,可以用于录音、编辑等对声音进行操作。

 title=

Audacity 声音编辑器是填补了一个似乎没有人意识到的空白的开源应用程序。它最初是在卡内基梅隆大学开发的,当时很多人还认为电脑只是用来办公和学习的,要进行严肃的多媒体工作需要特殊的 DSP 外围设备。Audacity 认识到,普通计算机用户偶尔也需要编辑音频。在此后的 20 年里,Audacity 团队一直为录音和清理声音打造这个开源的应用程序。

我经常使用 Audacity,作为一个受过培训的编辑,我已经习惯了在我的应用程序中使用重要的、通常是单键的键盘快捷键。通过围绕单个字母建立快捷键,你可以一只手放在鼠标上,一只手放在键盘上,所以选择一个工具或一个重要功能和点击鼠标之间的延迟仅仅是几毫秒而已。在本文中,我将专门给出我在 Audacity 中使用的键盘快捷方式,如果你想优化自己的设置可以参考。

在 Linux 上安装 Audacity

在大多数 Linux 发行版上,Audacity 都可以从你的软件包管理器中获得。在 Fedora、Mageia 和类似的发行版上:

$ sudo dnf install audacity

在 Elementary、Mint 和其他基于 Debian 的发行版上:

$ sudo apt install audacity

然而,我是以 Flatpak 方式来使用 Audacity 的。

在 Windows 或 macOS 上,可以从 Audacity 网站 下载一个 Audacity 安装程序。

它最近有一个叫做 Tenacity 的复刻版本,是另外的开发者团队准备延续 Audacity 的传统而开发的。在写这篇文章的时候,两者基本上是相同的应用程序,所以这篇文章同样适用于两者。以后是否在功能上有分歧,还有待观察。

安装后,从你的应用程序或活动菜单中启动该应用程序。

在 Audacity 中设置输入

首先,你必须设置你的音频 输入,以便 Audacity 接收你使用的麦克风或音频接口的信号。你选择什么输入取决于你的设置和你拥有的音频外围设备。USB 麦克风通常被标为 麦克风 Microphone ,但带有 1/8" 输入插孔的麦克风可能被标为 线路输入 Line in 。你可以选择不同输入:

Pulse Audio 音频服务器

Linux 使用 高级 Linux 声音架构 Advanced Linux Sound Architecture (ALSA)作为其声音的后端,而 macOS 和 Windows 则使用自己的封闭框架。在 Linux 上,你可以将 Pulse Audio 音频服务器设置为你的输入源,将 Audacity 导向 一个 虚拟接口(Pulse),因此你可以从系统设置中选择声音输入。这是我的首选方法,因为它将所有控制集中在一个方便的控制面板上。在一个应用程序中选择一个麦克风,却发现麦克风在其他地方被静音的日子已经一去不复返了。

 title=

设备访问

如果你的发行版或操作系统没有使用 Pulse Audio 音频服务器,或者由于某种原因你喜欢直接访问声音设备,你可以从下拉菜单中选择一个设备。这需要了解你的系统是如何列出声音设备的,这有时候并不很好找。台式机可能有几个输入源,有些在机箱的后面,有些在前面的面板上。笔记本电脑通常输入方式较少,但你可能在网络摄像头附近有一个麦克风,如果你使用的是外部麦克风,可能还有一个。

用 Audacity 录制音频

选中你的输入后,按“ 录音 Record ”按钮(有红点的按钮)。

 title=

如果你是对着麦克风录音,你所要做的就是开始说话。如果你从,比如说,黑胶唱片机 录制输入,那么你必须启动它。不管是什么,只要 Audacity 处于录音模式,任何发送到你选择的输入的信号都会被写入 Audacity 并在你的屏幕上呈现为波形。

我的快捷方式: 我使用 R 键来开始录音。默认情况下,按下空格键停止录音(也可以回放录音)。

编辑音频

录音很少完全按计划进行。也许你过早地开始录音,不得不忍受几秒钟的黑胶静音(它就像静音,但更嘈杂),或者你发现你的语气停顿都是 “呃”、“嗯”或其他声调,或者你一开始就录制错误了。Audacity 首先是一个波形编辑器,这意味着你可以在最终的录音中剪掉你不想要的声音,就像你在文字处理器中输入的文字一样容易编辑。

编辑过零点的声音

Audacity 的主要编辑工具是“ 选择工具 Selection Tool ”。它是你在文字处理程序中看到的熟悉的“工字形”光标,它的功能在这里也是一样。你可以点击并拖动这个光标,穿过声音的一个区域,然后你可以复制、粘贴、剪切、删除或直接播放这个区域。

我的快捷键: 我用 I 键来激活“ 选择工具 Selection Tool ”,因为光标看起来像字母 “I”。

在文字处理器中,你可以非常清楚地看到每个字母的结尾和开头。你不可能不小心选择和删除一个字母的一半。然而,在现代应用程序中,声音的 “分辨率”(称为 采样率)非常好,所以人眼很难在音频波中找到一个清晰的断点。Audacity 可以调整你的选择,使你选择的区域落在所谓的 过零点 zero crossing ,这可以避免在你做切割的地方出现微妙但明显的突兀现象。

 title=

在你做出选择后,进入“ 选择 Select ”菜单,选择 “ 在过零点 At Zero Crossings ”。

我的快捷键: 我使用 Z 键来调整选区到过零点,使用 X 键来删除一个区域(它使我不必将手一直移到 DelBackspace )。

腾出空间

编辑的好处是,你的最终产品不一定要与你录制的内容一致。我曾经录制过一些讲座,甚至录制过一些读物的剧本,但最终因为某种原因而偏离了方向,或者遗漏了一部分重要的信息,后来在发布前又重新编排或添加了全新的音频。

移动所选的音频与删除类似,但不是删除音频,而是复制和粘贴所选内容,就像你在文字处理器中做的那样 —— 使用标准的键盘快捷键复制或剪切,重新定位你的光标,然后粘贴。不过,为插入的内容腾出空间,需要在音频时间线上留出空位,这样你就可以录制额外的音频来填补你所创造的空白。为此,你可以使用“ 选择工具 Selection Tool ”和“ 时间偏移工具 Time Shift Tool ”。

要在音频中创建一个空隙,将你的“ 选择工具 Selection Tool ”的光标放在你想添加空隙的地方。导航到“ 编辑 Edit ”菜单,选择“ 剪辑边界 Clip Boundaries ”子菜单,然后选择“ 分割 Split ”。这将在你的选择点上分割你的音频。

激活顶部工具栏中的“ 时间偏移工具 Time Shift Tool ”(图标是两个连接的箭头,分别指向左边和右边),点击并拖动分割后的音频的右半部分,创建一个间隙。

 title=

我的快捷方式: 我用 K 来分割,用 T 来激活“ 时间偏移工具 Time Shift Tool ”。

导出音频

当你对你的音频感到满意时,你可以导出它,这样你就可以与他人分享。Audacity 可以选择它能够导出的格式,并且它能够将其输出到像 ffmpeg 这样的工具,以获得比你可能永远需要的更多格式。

我更喜欢用 FLAC 格式输出音频,这种音频格式有点像 WAV,只是它是无损压缩的。它只占用一小部分空间,而没有任何质量上的损失。要尝试它,去“ 文件 File ”菜单,选择“ 导出 Export ”子菜单,然后选择“ 导出音频 Export Audio ”。有了 FLAC 文件作为你的 黄金镜像,你可以用 SoundConverter 把你的文件转换成任何数量的传输目标的最佳格式 —— 用于浏览器的 Ogg Vorbis 或 Opus 或 Webm,用于苹果设备的 M4A 文件,也许还有用于传统系统的 MP3。

如果你只是想从 Audacity 快速简单地导出,简单的选择是 Ogg Vorbis。这是一种开源的文件格式,可以在大多数网页浏览器(Firefox、Chromium、Chrome、Android 和 Edge)和 如 VLC、mpv 等媒体播放器 播放。

探索 Audacity

Audacity 是开源软件世界中的一个经典动力工具。基本的录音和编辑仅仅是个开始。你可以添加效果、过滤掉(一些)噪音、调整速度、改变音高等等。无论你是在学校录制讲座、混合鼓循环、为视频游戏拼接声音,还是只是在探索音频世界,都可以去启动 Audacity,发挥创意!


via: https://opensource.com/article/21/12/audacity-linux-creative-app

作者:Seth Kenlon 选题:lujun9972 译者:wxy 校对:wxy

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

用这个方便的 Linux 命令合并 PDF、删除页面、分割 PDF 和填写表格。

 title=

技术白皮书、手稿和 RPG 手册,我每天都要处理大量的 PDF 文件。PDF 格式之所以受欢迎,是因为它包含经过处理的 PostScript 代码。PostScript 是现代打印机的原生语言,所以出版商经常将一本书的数字版本发布为 PDF,因为他们已经投入了时间和精力来制作印刷用的文件。但是,PDF 并不是一种可编辑的格式,虽然可以进行一些逆向处理,但它是数字数据发送到打印机之前的最后一站。即便如此,有时你还是需要对 PDF 进行调整,而我最喜欢的工具之一就是 pdftk-java 命令。

在 Linux 上安装 pdftk-java

顾名思义,pdftk-java 是用 Java 编写的,所以只要你安装了 Java,它就能在所有主流的操作系统上工作。

Linux 和 macOS 用户可以从 AdoptOpenJDK.net 安装 Java。Windows 用户可以安装 Red Hat 的 OpenJDK 的 Windows版本

要安装 pdftk-java

1、从 Gitlab 仓库下载 pdftk-all.jar 程序,并将其保存到 ~/.local/bin/你 path 变量中的其他位置

2、在你喜欢的文本编辑器中打开 ~/.bashrc 并添加这一行:

alias pdftk='java -jar $HOME/.local/bin/pdftk-all.jar'

3、加载你的新 Bash 设置:

$ source ~/.bashrc

命令语法

一个有效的 pdftk-java 命令的结构遵循一个模式,但在模式中的内容有很大的灵活性。语法有点不寻常,因为它没有使用传统风格的 终端选项,但经过实践,它并不难记。

  • pdftk:调用该命令的别名
  • 输入文件:你想修改的 PDF 文件
  • 动作:你想对输入文件做什么
  • 输出:你想在哪里保存你修改过的 PDF 文件

最复杂的是动作部分,所以我将从简单的任务开始。

将两个 PDF 文件合并成一个

一本书的封面通常在一个单独的应用中创建,如 Inkscape 或 GIMP,而书的其他部分通常在 Scribus 等排版程序或 LibreOffice 等办公套件中完成,这种情况并不罕见。你可以在你的排版应用中把这两者结合起来。像 Scribus 这样的出版软件可以很容易地引用一张图片,这样当封面改变时,它就会在版面中自动更新。然而,也可以用 pdftk-java 将封面预置到 PDF 中:

$ pdftk cover.pdf body.pdf \
  cat \
  output book.pdf

在这个例子中,动作是 cat 连接 concatenate 的缩写,和 Linux 的 cat 命令 一样,它将一个或多个 PDF 文件串联成一个数据流,数据流被引导到“ 输出 output ”参数指定的任何文件中。

从一个 PDF 中删除页面

你不能确切地从一个 PDF 中删除一页,但你可以创建一个新的 PDF,只包含你想保留的页面。

$ pdftk book.pdf \
  cat 1 3-end \
  output shorter-book.pdf

在这个例子中,我的书的文件的第 1 页,以及从 3 到结尾的所有页面,都被保存到一个新文件中。因此,我删除的那一页是第 2 页。

将一个 PDF 分割成不同的文件

将一个 PDF 文件分割成许多不同的文件也使用 cat 动作,它的原理与删除页面相似。你可以通过将你想要的页面发送到一个新文件来分割一个 PDF:

$ pdftk book.pdf \
  cat 1-15 \
  output part-1.pdf
$ pdftk book.pdf \
  cat 16-42 \
  output part-2.pdf

如果你需要将一个 PDF 分割成单页文件,有一个特殊的动作,叫做 burst

$ pdftk book.pdf burst
$ ls
book.pdf pg_0001.pdf pg_0002.pdf
pg_0003.pdf pg_0004.pdf pg_0005.pdf
[...]

填写表格

很少有人能否认多年来 PDF 格式变得越来越臃肿,而你有时在 PDF 文件中发现的一个功能是可填写的表格。你会在美国税务文件、RPG 角色表、线上学校作业本和其他旨在互动的 PDF 文件中看到这种情况。虽然大多数现代的 PDF 浏览器,比如 GNOME 的 Evince 和 KDE 的 Okular,都可以填写 PDF 表格,但你也可以在 pdftk-java 的帮助下填写 PDF 表格。

首先,你必须使用 generate_fdf 动作提取表单数据。这将提取表单元素的 ID,并将它们放入一个文本文件。

$ pdftk character-sheet.pdf \
  generate_fdf \
  output chsheet-form.txt

你的目标文件(在这个例子中是 chsheet-form.txt)包含 PDF 中的表格数据,但只是文本部分。你可以在任何标准的文本编辑器中编辑它,如 AtomGedit

在对生成 PDF 的组织的工作流程的有时令人钦佩和有时尴尬的一瞥中,你会发现一些表格有明确的标签,而其他表格有默认的名字,如 “Checkbox\_001” 和 “Textfield-021”,所以你可能要把你的文本文件和你的 PDF 对照一下,但如果你要写一个脚本来自动填写表格,这可能是值得的。每个标签都被标记为 /T 项,在接下来的一行中,有空间(标记为 /V)提供给文本输入。下面是一个片段,它的标签有上下文,并填入了一些数据:

/T (CharacterName 2)
/V (Abaddon)
>>
<<
/T (SlotsTotal 24)
/V ()
>>
<<
/T (Hair)
/V (Brown)
>>
<<
/T (AC)
/V (15)
>>
<<
/T (Background)
/V ()
>>
<<
/T (DEXmod )
/V ()

当你输入了表单数据,你就可以用 fill_form 动作将你的文本输入与 PDF 结构结合起来:

$ pdftk character-sheet.pdf \
  fill_form chsheet-form.txt \
  output completed.pdf

下面是一个结果示例。

 title=

PDF 修改变得简单

当你处理大量的 PDF 文件或通过 shell 脚本处理 PDF 文件时,像 pdftk-java 这样的工具是非常有价值的,因为它使你不必手动做所有的事情。当我从 Docbook 的输出建立一个 PDF 时,它是一个 Makefile,调用 pdftk-java 完成任何数量的任务,所以我没有机会忘记某个步骤或打错命令,也没有必要把时间花在这上面。在你自己的工作流程中,还有很多其他的原因你可能会使用 pdftk-java,它还可以做很多其他的事情,包括 shufflerotatedump_dataupdate_infoattach_files 等动作。如果你发现自己经常与 PDF 文件打交道,可以试试 pdftk-java


via: https://opensource.com/article/21/12/edit-pdf-linux-pdftk

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

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

Fountain markdown 技术只需要一个纯文本编辑器,如 Atom、Kate、Gedit 或类似的编辑器,它可以导出一个正确格式的 HTML 或 PDF 剧本。

 title=

剧本是一部电影的蓝图,过去它是在打字机上撰写的。你买台打字机就可以写剧本,可以写好多好多剧本。而现在没人用打字机写剧本了,因为打字机不再流行。

不过,令人费解的是,随着写作技术变得 “越好”,写剧本就越难。在剧本领域有严格的格式化规则,以帮助电影拍摄中的助理导演(AD)估计每个场景需要拍摄多长时间。你可能认为电脑会比在打字机上的完全手工过程更容易做到。然而,流行的计算机却用昂贵的软件来限制作家,这些软件已经嵌入了好莱坞文化。如果你没有合适的软件,你就会被告知,你永远不可能成为一个正式的编剧。

不过,所有这些都随着开源软件的出现而改变,写剧本的最简单方法之一就是根本不使用特殊的软件。Fountain markdown 技术只需要一个纯文本编辑器,如 AtomKateGedit,或类似的,它可以导出一个正确格式的 HTML 或 PDF 剧本。

安装 Fountain

Fountain 不需要安装,因为它不是软件;它是一套你在写作时使用的规则。你在写作时已经遵循了一些规则,比如你把句子的第一个字母大写,用句号来结束每句话,等等。当你用 Fountain 写作时,只需要添加一些专门针对剧本的新规则。

片段

在剧本中,每个场景都由一行大写字母划定,以 INT.EXT. 开头,然后是一个地点、一个破折号,以及一天中的时间。这些说明被称为 “片段”。方便的是,这也是 Fountain 的规则,所以不用记住什么新的东西就可以创建一个片段。

EXT. CASTLE COURTYARD - DAY

动作

当演员被要求执行一个特定的动作时,剧本中就会包含动作文本。这是正常的普通文本,完全按照你在书中写的文字来写。所有正常的规则都适用,所以对动作文本不用特别记什么规则。

A wizard wanders out of a great stone door. She approaches the center of the courtyard and pauses. Something's caught her eye.

It's a book. She leans down and picks it up.

对话

剧本中的对话格式是从左右边距缩进的。对于普通观众来说,它可能看起来是居中的,但实际上它是左对齐的。采用这种格式是为了帮助演员定位他们的台词,并使得剧本给口语对话留出更多的空间,因为在电影中,口语对话往往占据了大部分的时间。

在 Fountain 中,对话的规则是用大写字母写出说话的角色的名字。然后在下一行,正常写出对话内容。

WIZARD

I can sense your power. Grep? Sed? What strange terms!

当你导出你的剧本时,对话会被调整为适当的格式。

转场

现在这种做法已经不流行了,但传统上,在剧本中会有一些特殊的转场迹象,因为在很久以前,一些转场是要花很多钱的。今天,你仍然可以在剧本中看到转场,但它往往更多的是作为一组场景(或者,经典的整个电影 淡出 FADE OUT. )的一种标点符号,而不是对编辑的实际指示。

要在 Fountain 中创建一个过渡,在你的文本前加上大于号(>)。

>ANGLE ON:

The book's title page. It reads "Introduction to Linux."

>FADE OUT.

更多的规则

你可以在你的剧本中使用许多其他的 Markdown 约定,比如用星号来斜体、加粗和给文字加下划线。在 Fountain 中还有更多的规则来处理边缘情况和风格上的例外,但这四条规则在大多数情况下是你所需要的。

不过,Fountain 的简单性表明,一百年前的剧本格式设计得多么好。它有一个标准的结构,使人的眼睛很容易解析,这种可预测性也能很好地转化为计算机的解析。

输出和渲染

一旦你写完了,你就可以使用渲染程序将你的剧本导出为适当的格式。有 几个渲染器可用,但我最喜欢的是 Atom 编辑器。要配置 Atom 以适当的格式显示 Fountain 预览文件,并在完成后将其导出为 PDF,请进入“编辑” 菜单,选择 “偏好”,并点击左侧面板中的 “安装” 链接。在搜索栏中,输入 “fountain” 来安装由开发者 superlou 发布的 Fountain 插件。

 title=

在安装时,你会被提示同意安装它的一些依赖项。一旦安装完毕,你可以进入 “软件包” 菜单,选择 “Fountain”,然后查看你的剧本预览或导出 PDF 版本。

Emacs 也有一个 Fountain 模式 ,它还可以在你输入时执行一些基本的格式化。

 title=

无论你使用什么文本编辑器,你总是可以使用专门的应用程序来渲染你的剧本。有一个叫 Screenplain 的 Python 模块我觉得很好用。要安装它,请在终端键入以下内容:

$ python3 -m pip install 'screenplain[PDF]' --user

这样将一个剧本渲染成 PDF:

$ screenplain --format pdf myscreenplay.fountain > script.pdf

 title=

开源的电影剧本

Fountain 是方便的。你可以撰写你的剧本,而不需要特别复杂的应用程序。

Fountain 是省钱的。你可以撰写你的剧本而不需要昂贵的软件。

Fountain 是灵活的。你可以在你用来写作的应用程序中进行创作。

Fountain 是适宜保存的。你不会因为一个应用程序过时了,或者没有商业支持了,或者因为你买不起而不能访问你的作品。

使用 Fountain 有很多很好的理由,但最重要的一点是它能帮助你专注于创作。如果你心中酝酿了一部电影,就用 Fountain 来写。这是通向可能是一个非常令人兴奋的旅程的第一步。


via: https://opensource.com/article/21/12/linux-fountain

作者:Seth Kenlon 选题:lujun9972 译者:wxy 校对:wxy

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