はじめに
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の中のGlobalの内容を入れることになりますが、検証はしていません。
基本的に、input_file_option output_file_optionsについてはOptionsにて、定義されてますが、追加いそうなのだけピックアップします。(ただし、映像のみ)
| コマンド | file_options | コメント |
|---|---|---|
| -i | input | ファイルを利用する場合に利用 |
| -n | global | 強制的に上書きをさせる。 |
| -r[:stream_specifier] | input/output | フレームパス |
| -c[:stream_specifier] | input/output,per-stream | codecの指定。 |
| -vcodec | output | -codec:v(-c:v)のエイリアス。同じ意味。 |
| -disposition[:stream_specifier] | output,per-stream | 画像等諸々入れ込むときに使う |
| -s[:stream_specifier] | input/output/per-stream | 画面サイズの指定。640✕320やqvga等で指定できる。 |
| -aspect[:stream_specifier] | output/per-stream | アスペクト比で指定ができる。4:3とかで指定できる。 |
| -frames[:stream_specifier] | output/per-stream | |
| -vframes | output | -frames:vと同じ。numberに出力したいフレーム番号を入れる。例100-1110 |
| -vstats | output | 映像出力時の情報をtxtとして出力する。いわゆる証明的なものになる。 |
stream_specifierについては、stream_specifierの記載に従って使う。
Hapについて
今回hapへの圧縮をするため、そのコーデックオプションをまとめる。
| コマンド <値種別> | 入力できる値 | デフォルト |
|---|---|---|
| -format | hap/hap_alpha/hap_q | hap |
| -chunks | 1-64 | 1 |
| compressor | none/snappy | snappy |
※1 chunks(チャンク)は1フレームを分割して、エンコードするその数。マルチスレッドで行うため、CPUマルチスレッドの量を超えると当たり前だが計算できずに落ちる。ただ、うまく使えば高速にエンコードできる。当たり前だが、どうしてもHAPは重くなるので、うまーく使うべし。
多分、2,4,6,8,9,12とかになると思うが。。。
*2 二段階圧縮で何を選択するかを記載している。ファイルをより軽くすることが可能である。snappyはgoogleが開発したものであり、OSSとして出ている。noneだとchunkは1へ制限される(分割して高速化する意味はないから。)。
エンコード手順
概要
例データ
今回は連番ファイル(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の順に開く

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 | 今回はなし | global optionがある場合に使う。 |

4. Dependanciesを選択して、現在かけている自分のjobを選び[OK]を選択する。

5. [Submit]を選択する。
参考