デーモンビデオをFLVに変換

ビデオホスティング用に新しく作成したデーモンコードを共有することにしました。

悪魔の原理は単純です。 デーモンは、ビデオファイルがダウンロードされるフォルダーを調べ、そこに新しいファイルが表示されると、別のフォルダーにコピーし、バックグラウンドで変換プロセスを開始し、プレビューを作成し、受信したビデオをユーザーフォルダーにコピーします。



スクリプトは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。 記事の続き



All Articles