トップ 最新 追記

Masa's blog

検索キーワード:

2015年08月21日 Sort in VBScript with ADODB [長年日記]

_ Sort in VBScript with ADODB

adodb.recordsetのsortメソッドは以下に示すように、ロケール指定無しの「sort」コマンドと同様に機能する。

C:\Users\m-ito>type testdata.txt
あ
 ←ここは全角スペース
12

C:\Users\m-ito>sort testdata.txt
 ←ここは全角スペース
12
あ

C:\Users\m-ito>sort /L C testdata.txt
12
 ←ここは全角スペース
あ

C:\Users\m-ito>type sorttest.vbs
Option Explicit

Dim objRs
Set objRs = CreateObject("ADODB.Recordset")

objRs.Fields.Append "key1", 200, 256
objRs.Open
While Not WScript.StdIn.AtEndOfStream
        objRs.AddNew
        objRs.Fields("key1").Value = WScript.StdIn.ReadLine
Wend

objRs.Sort = "key1 ASC"
objRs.MoveFirst
While Not objRs.EOF
        WScript.StdOut.WriteLine objRs.Fields("key1").Value
        objRs.MoveNext
Wend
C:\Users\m-ito>cscript /nologo sorttest.vbs <testdata.txt
 ←ここは全角スペース
12
あ

C:\Users\m-ito>

ところが、VBScript中の大小判定(">", "<")は「sort /L C」コマンドの並び順と一致する。UNIX系OSで言うと「LC_ALL=C sort」と同じ意味なので、単純に文字コードの並びとなる。

この状態だと、VBScriptで並び替えたデータを大小判定を伴う別のVBScriptで処理すると矛盾を生じる場合がある。

なので、「sort /L C」コマンドと同じ並びを実現しようとするのだが、「SetLocale(lcid)」関数では「C」ロケールを意味する引数が存在しない(?)。

そこで、無理矢理ねじ込んだのが以下の方法。

C:\Users\m-ito>sort /L C testdata.txt
12
 ←ここは全角スペース
あ

C:\Users\m-ito>type sorttest.vbs
Option Explicit

'
' 文字列を文字コードの16進数文字列に変換する
'
Function getHexString(str)
        Dim strChar
        Dim strHex
        Dim intLen
        Dim intCnt

        strHex = ""
        intLen = Len(str)
        For intCnt = 1 To intLen
                strChar = Mid(str, intCnt, 1)
                strHex = strHex & Hex(Asc(strChar))
        Next
        getHexString = strHex
End Function

'
' 主処理
'
Dim strRec
Dim objRs
Set objRs = CreateObject("ADODB.Recordset")

objRs.Fields.Append "key1", 200, 256
objRs.Fields.Append "data", 200, 256
objRs.Open
While Not WScript.StdIn.AtEndOfStream
        objRs.AddNew
        strRec = WScript.StdIn.ReadLine
        objRs.Fields("key1").Value = getHexString(strRec)
        objRs.Fields("data").Value = strRec
Wend

objRs.Sort = "key1 ASC"
objRs.MoveFirst
While Not objRs.EOF
        WScript.StdOut.WriteLine objRs.Fields("data").Value
        objRs.MoveNext
Wend

C:\Users\m-ito>cscript sorttest.vbs <testdata.txt
12
 ←ここは全角スペース
あ

C:\Users\m-ito>

簡単に説明すると、ソートキーの対象を「生」の文字列とせずに、文字コードを16進数表現の文字列に変換したものをソートキーの対象として設定すると、期待したとおりの並びとなる。


2015年08月27日 gecko-mediaplayer-1.0.8 with gecko-sdk-40.0.2 [長年日記]

_ gecko-mediaplayer-1.0.8 with gecko-sdk-40.0.2

I have built gecko-mediaplayer-1.0.8 with gecko-sdk-40.0.2 ;)

gmtk-1.0.8.tar.gz

$ tar xvvf gmtk-1.0.8.tar.gz
$ cd gmtk-1.0.8
$ ./configure && make
# make install && ldconfig

gnome-mplayer-1.0.8.tar.gz

$ tar xvvf gnome-mplayer-1.0.8.tar.gz
$ cd gnome-mplayer-1.0.8
$ ./configure && make
# make install && ldconfig

gecko-mediaplayer-1.0.8.tar.gz

$ sh
$ export XULDEV="/usr/local/gecko-sdk-40.0.2/sdk"
$ export CPPFLAGS="-I/usr/local/gecko-sdk-40.0.2/sdk/include"
$ tar xvvf gecko-mediaplayer-1.0.8.tar.gz
$ cd gecko-mediaplayer-1.0.8
$ ./configure
$ make

# make install && ldconfig
# exit
$ exit

Build has done with success :)


2015年08月29日 mencoder's options that I often use :) [長年日記]

_ mencoder's options that I often use :)

container

-of lavf -lavfopts "format=FORMAT"

 FORMAT  mpg      MPEG-1 systems and MPEG-2 PS
         asf      Advanced Streaming Format
         avi      Audio Video Interleave file
         wav      Waveform Audio
         swf      Macromedia Flash
         flv      Macromedia Flash video files
         rm       RealAudio and RealVideo
         au       SUN AU format
         nut      NUT open container format (experimental)
         mov      QuickTime
         mp4      MPEG-4 format
         ipod     MPEG-4 format with extra header flags required by Apple iPod firmware
         dv       Sony Digital Video container
         matroska Matroska

-of lavf -o outout.EXT

 .EXT will determine container format.

video codec

-ovc lavc -lavcopts "vcodec=CODEC:vbitrate=BITRATE[:vpass=PASS]"

 CODEC  asv1       ASUS Video v1
        asv2       ASUS Video v2
        dvvideo    Sony Digital Video
        ffv1       FFmpeg's lossless video codec
        ffvhuff    nonstandard 20% smaller HuffYUV using YV12
        flv        Sorenson H.263 used in Flash Video
        h261       H.261
        h263       H.263
        h263p      H.263+
        huffyuv    HuffYUV
        libtheora  Theora
        libx264    x264 H.264/AVC MPEG-4 Part 10
        ibxvid     Xvid MPEG-4 Part 2 (ASP)
        ljpeg      Lossless JPEG
        mjpeg      Motion JPEG
        mpeg1video MPEG-1 video
        mpeg2video MPEG-2 video
        mpeg4      MPEG-4 (DivX 4/5)
        msmpeg4    DivX 3
        msmpeg4v2  MS MPEG4v2
        roqvideo   ID Software RoQ Video
        rv10       an old RealVideo codec
        snow       (also see: vstrict) FFmpeg's experimental wavelet-based codec
        svq1       Apple Sorenson Video 1
        wmv1       Windows Media Video, version 1 (AKA WMV7)
        wmv2       Windows Media Video, version 2 (AKA WMV8)

 BITRATE  bitrate in KHz for video codec

 PASS     "1" means pass 1 in 2 pass mode
          "2" means pass 2 in 2 pass mode

-ovc x264 -x264encopts "bitrate=BITRATE[:pass=PASS]"

 BITRATE  bitrate in KHz for video codec

 PASS     "1" means pass 1 in 2 pass mode
          "2" means pass 2 in 2 pass mode

video filter etc

-vf "scale=SCALE_X:SCALE_Y,expand=EXPAND_X:EXPAND_Y"

 SCALE_X:SCALE_Y   screen size that movie should be shown in
 EXPAND_X:EXPAND_Y screen size that contains above screen with black border

-vf "crop=WIDTH:HEIGHT:X:Y"

 WIDTH:HEIGHT  rectangle area to crop
 X:Y           position of area to crop(left:top)
               if omitted then center

-vf "flip"     flip image upside down

-vf "mirror"   flip image leftside right

-vf "rotate=DIRECTION"

 DIRECTION     "1" means clockwise 90 degree
               "2" means counterclockwise 90 degree

-vf "eq2=GAMMA"

 GAMMA         gamma value(0.1 to 10.0, default 1.0)

-aspect ASPECT

 ASPECT            aspect ratio(ex. 16/9, 1.7777)

-ofps FRAMERATE

 FRAMERATE  frame rate per socond(ex. 24, 24000/1001, 30, 30000/1001)

audio codec

-oac lavc -lavcopts "acodec=CODEC:abitrate=BITRATE"

 CODEC  ac3        Dolby Digital (AC-3)
        adpcm_*    Adaptive  PCM  formats  - see the HTML documentation for details.
        flac       Free Lossless Audio Codec (FLAC)
        g726       G.726 ADPCM
        libfaac    Advanced Audio Coding (AAC) - using FAAC
        libmp3lame MPEG-1 audio layer 3 (MP3) - using LAME
        mp2        MPEG-1 audio layer 2 (MP2)
        pcm_*      PCM formats - see the HTML documentation for details.
        roq_dpcm   Id Software RoQ DPCM
        sonic      experimental simple lossy codec
        sonicls    experimental simple lossless codec
        vorbis     Vorbis
        wmav1      Windows Media Audio v1
        wmav2      Windows Media Audio v2

 BITRATE  bitrate in KHz for audio codec

-oac mp3lame -lameopts "abr=BITRATE"

 BITRATE  bitrate in KHz for audio codec

-oac faac -faacopts "br=BITRATE"

 BITRATE  bitrate in KHz for audio codec

audio filter

-af "resample=SAMPLE_RATE"

 SAMPLE_RATE   sampling rate(ex. 44100)

general option

-ss START_TIME

 START_TIME    start time to encode(ex. "00:01:00" starts encoding from 1minute after)

-endpos TOTAL_TIME

 TOTAL_TIME    total time to encode(ex. "01:00:00" performs encoding in 1 hour)

2015年08月30日 ffmpeg and mencoder [長年日記]

_ ffmpeg and mencoder

convert to 2X speed movie with keeping audio pitch

SPEED=2.0
START=00:00:00
ELAPS=00:01:00
INPUT=input.mp4
OUTPUT=output.mp4
ffmpeg -ss ${START} -i "${INPUT}" -t ${ELAPS} -vcodec copy -acodec copy tmp.1.$$.mp4
ffmpeg -i tmp.1.$$.mp4 -y -an -vcodec copy tmp.2.$$.mp4
ffmpeg -i tmp.1.$$.mp4 -y -vn -acodec copy tmp.3.$$.m4a
mencoder -speed ${SPEED} -ovc x264 -of lavf -o tmp.4.$$.mp4 tmp.2.$$.mp4
ffmpeg -i tmp.3.$$.m4a -vn -af "atempo=${SPEED}" tmp.5.$$.m4a
ffmpeg -i tmp.4.$$.mp4 -i tmp.5.$$.m4a "${OUTPUT}"
rm -f tmp.*.$$.*

play 2X speed movie with keeping audio pitch

mplayer -speed 2.0 -af scaletempo input.mp4

convert movie to pictures, edit pictures, convert pictures to movie

mkdir tmp.0.$$.dir
mkdir tmp.5.$$.dir
START=00:00:00
ELAPS=00:01:00
FRAMESTEP=2
INPUT=input.mp4
OUTPUT=output.mp4
IFPS=`ffmpeg -i "${INPUT}" 2>&1 | egrep fps | sed -e 's/^.* \([0-9\.]*\) fps.*$/\1/'`
OFPS=`echo "scale=2;${IFPS}/${FRAMESTEP}" | bc`
ffmpeg -ss ${START} -i "${INPUT}" -t ${ELAPS} -vcodec copy -acodec copy tmp.1.$$.mp4
ffmpeg -i tmp.1.$$.mp4 -y -an -vcodec copy tmp.2.$$.mp4
ffmpeg -i tmp.1.$$.mp4 -y -vn -acodec copy tmp.3.$$.m4a
mplayer -vo jpeg:outdir=tmp.5.$$.dir -vf "framestep=${FRAMESTEP}" tmp.2.$$.mp4
pushd tmp.5.$$.dir
for i in *jpg; do jpegtopnm <$i | pamedge | pnminvert | pnmtojpeg >../tmp.0.$$.dir/$i; done
popd
mencoder "mf://tmp.0.$$.dir/*.jpg" -mf type=jpg:fps=${OFPS} -ovc x264 -of lavf -o tmp.4.$$.mp4
ffmpeg -i tmp.4.$$.mp4 -i tmp.3.$$.m4a "${OUTPUT}"
rm -fr tmp.*.$$.*