#!/bin/bash
recode() {
mencoder -o $2 $1 -ovc x264 -x264encopts bitrate=22000:keyint=50 -oac mp3lame -lameopts vbr=3:br=320 -fps 50
}
recode input/00108.mts 00108.avi
recode input/00109.mts 00109.avi
...
...
すべての準備が整っているように見えますが、2つのうち1つのプロセッサしかロードされていないことに気付きました。つまり、このプロセスを2回加速できます。
最初の方法:メンコーダーによる並列化
メンコーダーオプションを設定できます。 x264コーデックの場合、スレッドの数を指定できます。
- スレッド= <0-16>
複数のプロセッサで同時にエンコードにストリームを使用します(デフォルト:1)。 これにより、エンコードの品質がわずかに低下します。 0または 'auto'-プロセッサの数を自動的に決定し、適切な数のスレッドを使用します。
この方法は優れていますが、一般的ではなく、結果の品質が低下する可能性があります。
2番目の方法:Bashを使用した並列化
この方法は単純で、たとえば次のようにプロセスを並行して開始します。
(recode input/00108.mts 00108.avi
recode input/00109.mts 00109.avi
...
...) &
(recode input/00108.mts 00110.avi
recode input/00109.mts 00111.avi
...
...)
この方法の欠点は、ファイルのサイズが異なるため、ファイルの処理時間が大幅に異なる可能性があり、その結果、一方のプロセッサが他方よりもはるかに早くアンロードされる可能性があることです。
3番目の方法:GNU makeとの並列化
2つのタスクが常に並行して機能し、完了したときに新しいタスクが開始されるように、シナリオを何らかの形で改善したかったのです。 これを行う方法を考えて、必要なことを正確に実行できるすばらしいビルドユーティリティがあることを思い出しました。 次のことが判明しました。
メイクファイル:
all: 00108.avi 00109.avi 00110.avi 00111.avi 00118.avi 00119.avi 00120.avi 00123.avi
VPATH = input:.
%.avi: %.mts
mencoder -o $@ $< -ovc x264 -x264encopts bitrate=22000:keyint=50 -oac mp3lame -lameopts vbr=3:br=320 -fps 50
驚くほどシンプルで短いことがわかりました。 最初に、受信したいすべてのファイルのリストがリストされています。 その後にソースファイルへのパスとビルドルールが続きます。 コマンド「make -j 2」を使用して実行し、2つのプロセスが同時に機能するようにします。
(habrの最初の記事、厳密に判断しないでください)