1

ビデオエンコーディングを開始する前にクロップ値を検出するスクリプトがあります。私は特定の間隔で、たとえば100フレームごとにいくつかのプローブを実行します。プローブされたすべてのフレームのすべてのトリミング値が一致する場合、問題はなく、スクリプトはエンコード機能を開始します。切り抜きの値が異なる場合、スクリプトはエラーで終了し、正しい切り抜きの値を手動で選択する必要があります。これは煩わしいことです。

したがって、エラーでスクリプトを終了する代わりに、「最良の」可能な値を選択します。この状況では、最も繰り返される数値です。

では、コレクションから最も繰り返しの多い文字列を選択するにはどうすればよいですか?

たとえば、すべての切り抜きの値を配列に入れます。Crop =( '3''4''3''5''7''3''7'); したがって、この状況では、最も頻繁に繰り返される値「3」を選択します。Bashでプログラムでそれを行うにはどうすればよいですか?

ありがとう。

- 編集 -

質問を簡単にするために、ご迷惑をおかけしましたことをお詫び申し上げます。実際の作物の値は、「720:568:0:4」のようになります。

4

1 に答える 1

2

連想配列を使用した純粋なbashソリューション(bashバージョン4が必要):

#! /bin/bash
crop=(3 4 3 5 7 3 7)
declare -A count
max=0
for c in "${crop[@]}" ; do
    (( count[$c]++ ))
    if (( count[$c] > max )) ; then
        max=${count[$c]}
        idx=$c
    fi
done
echo $idx
于 2013-03-19T00:20:35.367 に答える