# Media Killer

MediaKiller 是一个命令行工具，用于快速删除媒体文件。

它的基本工作方式非常简单：
输入命令之后，拖入多个`预设文件`和多个`源文件`，并按回车键开始执行即可。

但是简单的用法之后还有丰富的细节：

## 源文件

在 MediaKiller 中，`源文件`并不一定是需要转码的文件。
MediaKiller 将会基于提供的源文件路径自动探测可能的原始文件。
基本上遵循以下规则（以下`源文件路径`指的是用户直接提供的路径）：

1. 如果`源文件路径`为以下类型之一，则会直接读取并展开其中包含的文件路径：

    - EDL 剪辑决定表 (.edl)
    - Fcp7XML 经典 XML 时间线文件 (.xml)
    - Final Cut Pro XML 项目文件 (.fcpxml | .fcpxmld)
    - Davinci Resolve 导出的媒体元数据信息 (.csv)
    - 包含路径信息的纯文本文件（包括脚本文件） (.txt | .sh)

2. 如果`源文件路径`是一个*文件夹*，则会递归地展开其中所有的文件和子目录中的文件。
3. 将所有探测到的文件按照对应的`预设文件`中的预设进行筛选。

> 项目文件的解析功能本身是由工具集中的另一个工具—— `MediaScout` 实现的。

可以一次性输入多个预设文件，MediaKiller 会分别生成转码任务并统一执行。

> 总之，把所有的预设文件或源文件或者包含原文件的文件夹全加进来就行啦~

## 预设文件

预设文件是一个 toml 格式的文本文件，其中包含对于转码任务的描述。

不建议直接手动编写预设文件，应当使用 `-g` 选项生成示例预设文件之后进行修改。

```bash
mediakiller -g example.toml
mediakiller --generate example1.toml example2.toml
```

虽然没有什么意义，但是可以一次性新建多个预设文件。

`预设文件`的意义在于可以保留并重复使用，
所以建议每次制作新的预设文件后，充分调试并妥善保存以备长期使用。

> 示例预设文件中包含详细的描述信息，所以本文档不再详细介绍预设文件中的各项参数。

### 预设文件中的字段引用

预设文件支持以 `${tag}` 的形式引用一些信息。有一些信息可以使用参数进行进一步的定制。
下面是一些介绍：

- `${source}` 引用当前任务的源文件信息，默认情况下返回源文件的绝对路径。

| 参数                 | 介绍              |
|--------------------|-----------------|
| ${source:fullpath} | 源文件的绝对路径        |
| ${source:parent}   | 源文件的上级目录        |
| ${source:name}     | 源文件的文件名（不包含路径）  |
| ${source:basename} | 源文件的基本名（不包含扩展名） |
| ${source:suffix}   | 源文件的扩展名（包含点号）   |

- `${target}` 引用标准情况下的目标文件名，此文件名是由源文件和`[target]`组中的设置计算而来的。其选项和`source`相同。

- `${sep}` 表示当前操作系统中的路径分隔符，在 Windows 中是反斜杠，其它系统中是正斜杠。

- `${custom:}` 直接引用`[custom]`组中的自定义字段。

- `${preset:}` 引用配置文件的基本信息。

> 强烈建议在尝试使用这些标签时，使用 `--debug --pretend` 选项进行调试。

## 其它细节

MediaKiller 本质上是在后台操作 ffmpeg 进行转码，所以需要提前安装 ffmpeg ，
并在配置文件中指定 ffmpeg 的路径。

`--jobs` 选项可以指定使用多少个进程并行执行任务。
可是多媒体转码本身就是一个计算密集型的任务，所以过多的进程可能反而会降低效率。
所以如果你不知道自己在做什么，请不要滥用这个功能。

`--save-script` `-s` 选项可以指定一个输出文件，
此时 MediaKiller 不再执行转码任务，而是将任务编译为一个脚本文件。
这样你就可以在没有 MediaKiller 的计算机上进行批量任务了。
