DeadLineでエンコードする方法

# はじめに
Deadlineを使ってパイプラインツールを使わずに連番ファイルをエンコードする方法を記します。

## 環境
Deadline 10.0.21.5
FFmpeg ＋　DeadLineClientが入ったサーバ
DeadLine　Monitoringが入ったユーザパソコン

## FFmpeg
### このソフトについて
OSSで配布されているエンコード、デコードができるものうちで有名な部類のものです。
コマンドでもApiでもコントロールができるという意味で右に出るものはないです。
streamでも活躍するので、配信系をやる場合にも、とてもうってつけなものです。

### FFmpegについて
コマンド規則は次のとおりです。
`ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...`

global_optionは、基本的に使ったことがないので、なんともですが、おそらく[Options](https://www.ffmpeg.org/ffmpeg.html#toc-Options)の中のGlobalの内容を入れることになりますが、検証はしていません。
基本的に、`input_file_option` `output_file_options`については[Options](https://www.ffmpeg.org/ffmpeg.html#toc-Options)にて、定義されてますが、追加いそうなのだけピックアップします。（ただし、映像のみ）

|コマンド|file_options|コメント|
|:-----------------:|:------------------|:------------------|
| -i <fileパス>|input|ファイルを利用する場合に利用|
|　-n　|global　|強制的に上書きをさせる。|
|　-r[:stream_specifier] <fps>　|input/output|フレームパス|
|-c[:stream_specifier] <codec>|input/output,per-stream|codecの指定。|
|-vcodec <codec> |output|-codec:v(-c:v)のエイリアス。同じ意味。|
|-disposition[:stream_specifier] <value> |output,per-stream|画像等諸々入れ込むときに使う|
|-s[:stream_specifier] <size>|input/output/per-stream|画面サイズの指定。640✕320やqvga等で指定できる。|
|-aspect[:stream_specifier] <aspect>|output/per-stream|アスペクト比で指定ができる。4:3とかで指定できる。|
|-frames[:stream_specifier] <framecount> |output/per-stream||
|-vframes <number>|output|-frames:vと同じ。numberに出力したいフレーム番号を入れる。例１００-1110|
|-vstats|output|映像出力時の情報をtxtとして出力する。いわゆる証明的なものになる。|

stream_specifierについては、[stream_specifier](https://www.ffmpeg.org/ffmpeg.html#Stream-specifiers-1)の記載に従って使う。

###Hapについて
今回hapへの圧縮をするため、そのコーデックオプションをまとめる。

|コマンド　<値種別>|入力できる値|デフォルト|
|:-----------------:|:------------------|:------------------|
|-format <integer>|hap/hap_alpha/hap_q|hap|
|-chunks <integer>|1-64|1|
|compressor <integer>|none/snappy|snappy|

※1 chunks(チャンク)は１フレームを分割して、エンコードするその数。マルチスレッドで行うため、CPUマルチスレッドの量を超えると当たり前だが計算できずに落ちる。ただ、うまく使えば高速にエンコードできる。当たり前だが、どうしてもHAPは重くなるので、うまーく使うべし。
多分、2,4,6,8,9,12とかになると思うが。。。
*2　二段階圧縮で何を選択するかを記載している。ファイルをより軽くすることが可能である。[snappy](http://google.github.io/snappy/)はgoogleが開発したものであり、OSSとして出ている。noneだとchunkは１へ制限される（分割して高速化する意味はないから。）。


#エンコード手順
##概要
###例データ
今回は連番ファイル（Sequence）をmovファイル動画に書き換えます。
また、Deadlineで何かをかけていて、そのあと連続して掛けることを想定してます。
　・フレームレート　30fps
　・コーデック　hapQ
　・チャンク数（フレーム分割数）　6
　・連番ファイル　¥¥NAS¥pngseq¥test[0000-1000].png
　・出力ファイル　¥¥NAS¥pngseq¥movie¥test01.mov
　・pool/secondpool decode

#### ffmpegのコマンド
`ffmpeg -vcodec hap -format hap_q -v 30 -chunks 6`

##Deadlineの設定
1.Deadline Moniterを起動
2.Submit>Processing>FFmpegの順に開く
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166400/c082e6c4-3936-25df-3654-a46450fe7383.png)
3.次の項目に必要なものを入力する。(一部デフォルト放置のものは省略。)

|項目|今回の例の場合|説明|
|:-----------------:|:------------------|:------------------|
|Job Name|test001|ジョブ名として入れたいものを入れます|
|Comment|none|コメントしたい内容を入力する|
|Pool|decode|システム管理者に指定されたものを入力|
|SecondaryPool|decode|システム管理者に指定されたものを入力|
|Priority|50|優先度。優先させたいときに若く番号を設定すると良い|
|Dependancies|後ほど|かけているジョブを選択します。|
|InputFiles|¥¥NAS¥pngseq¥test0000.png|連番ファイルの一番最初のファイルを入力する|
|Replaces Fleams...|チェックオン|連番ファイルを読む設定とのこと。（DLによると）|
|OutputFiles|¥¥NAS¥pngseq¥movie¥test01.mov|最終出力するファイル名を記載|
|OutputArguments|`-vcodec hap -format hap_q -v 30 -chunks 6`|ffmpegのコマンドを入力する。|
|Additional Arguments|今回はなし|gloｂal optionがある場合に使う。|

![image.png](https://qiita-image-store.s3.amazonaws.com/0/166400/21d39f85-18b3-d102-bedd-e512143977bb.png)
4. Dependanciesを選択して、現在かけている自分のjobを選び[OK]を選択する。 
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166400/c1862040-045c-d2ac-2df5-3f246bbb906a.png)
5. [Submit]を選択する。

#参考
https://www.ffmpeg.org/ffmpeg.html