悪魔の原理は単純です。 デーモンは、ビデオファイルがダウンロードされるフォルダーを調べ、そこに新しいファイルが表示されると、別のフォルダーにコピーし、バックグラウンドで変換プロセスを開始し、プレビューを作成し、受信したビデオをユーザーフォルダーにコピーします。
スクリプトはbashで記述されているため、デーモンモードではnohupコマンドまたは画面で実行する必要があります。 欠点は、負荷制御の欠如です。 ファイルのロードがアクティブな場合、サーバーのオーバーロードは現実のものです。 この問題はまだ私たちにとって重要ではありませんが、そのような解決策を持っていない人にとって最も簡単な方法は、flockコマンドを使用してプロセスキューを作成することです。
デーモンの最も重要なパラメーターは、コマンドラインから指定できます。 -hオプションを指定してスクリプトを実行すると、コマンドのリストを取得できます。
-uオプションに注意してください。 これを使用して、変換されたビデオがコピーされるユーザーフォルダーの場所を指定できます。 フォルダ構造は厳密に設定されており、変更するにはスクリプトを編集する必要があります。 ただし、デフォルトのディレクトリ構造は次のとおりです。 <USER_ID> / video
つまり、FLV形式に変換されたビデオがビデオフォルダーに追加されます。
そして別のそのような瞬間。 -sおよび-tオプションを使用して、変換用のソースディレクトリと中間ディレクトリをそれぞれ指定できます。 -sパラメーター(デフォルトでは/ var / videoinput)で指定されたディレクトリ内のファイルは、名前<USER_ID> _ <FILE_ID>でロードする必要があることを知っておくことが重要です。<Avi | mpg | 3gp | ... >これはユーザーID(つまり、彼のフォルダーの名前)であり、 <FILE_ID>はファイルID、たとえばデータベース内のレコードのIDです。
プレビューは、同じ名前で、拡張子がpngのビデオファイルと同じ場所にコピーされます。 プレビューは16秒から取られます。 原則として、クリップの長さを決定する必要があります(16秒より短い場合があります)が、これは独立した作品としてあなたに任せます;)
コードからは明らかですが、それでもスクリプトが機能するために必要なソフトウェアについて説明します。
mencoder-実際に変換
mplayer-プレビューのカット用
convert-プレビューのサイズを変更するための ImageMagikユーティリティ
flvtool2 -FLVでメタ情報を記録するため
#!/bin/bash
# folder_monitor.sh
# This is a daemon shell script for monitoring video input directory.
#
#
SRC_DIR=/var/videoinput
TRG_DIR=/var/videooutput
PARAMS='-ovc lavc -lavcopts vcodec=flv:keyint=50:vbitrate=300:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 -vf scale=480:360 -of lavf -oac mp3lame -lameopts abr:br=64 -srate 22050'
OUTPUT_FORMAT='flv'
USER_FOLDER="/usr/local/jboss/server/default/resources/files/user_folders"
THUMBNAIL_WIDTH=175
THUMBNAIL_HEIGHT=110
#
while getopts ":s:t:hp:u:H:W:" optname
do
case $optname in
"u")
USER_FOLDER="$OPTARG"
;;
"p")
PARAMS="$OPTARG"
;;
"s")
SRC_DIR="$OPTARG"
;;
"W")
THUMBNAIL_WIDTH="$OPTARG"
;;
"H")
THUMBNAIL_HEIGHT="$OPTARG"
;;
"t")
TRG_DIR="$OPTARG"
;;
"h")
echo "-h - help"
echo "-W - width of thumbnail"
echo "-H - height of thumbnail"
echo "-p - command line params for mencoder"
echo "-u - path to user folders"
echo "-s - source dir"
echo "-t - target dir"
exit 0;
;;
*)
echo "Unknown parameter or option error with option - $OPTARG"
exit 1;
;;
esac
done
while :
do
echo "Looking dir ${SRC_DIR}...\n"
#
FILES=$(find $SRC_DIR -type f -exec basename '{}' \;)
#
for FILE in $FILES
do
# ,
USER_ID=$(echo $FILE | sed 's/[^0-9]/ /g' | awk '{print $1}')
VIDEO_ID=$(echo $FILE | sed 's/[^0-9]/ /g' | awk '{print $2}')
#
(echo "Converting $FILE..."
#
mv ${SRC_DIR}/${FILE} ${TRG_DIR}/${FILE}
#
mplayer -ss 16 -frames 1 -vo png -nosound ${TRG_DIR}/${FILE}
THUMBNAIL="${USER_FOLDER}/${USER_ID}/video/${VIDEO_ID}.png"
#
mv 00000001.png $THUMBNAIL
#
convert $THUMBNAIL -resize ${THUMBNAIL_WIDTH} -gravity center -crop ${THUMBNAIL_WIDTH}x${THUMBNAIL_HEIGHT}+0+0 -quality 75 $THUMBNAIL
#
mencoder ${TRG_DIR}/${FILE} -o "${TRG_DIR}/${FILE}.${OUTPUT_FORMAT}" ${PARAMS}
#
flvtool2 -UP "${TRG_DIR}/${FILE}.${OUTPUT_FORMAT}"
#
rm ${TRG_DIR}/${FILE}
#
mv "${TRG_DIR}/${FILE}.${OUTPUT_FORMAT}" "${USER_FOLDER}/${USER_ID}/video/${VIDEO_ID}.${OUTPUT_FORMAT}"
) &
done
sleep 10s
done
明けましておめでとうございます!
UPD。 記事の続き