2019年7月26日金曜日

PARCOに宇宙がやってきた

今日、浦和PARCOに行ったら、宇宙関連物の展示があった。
本物の宇宙服も展示されていた。
日本の宇宙開発の歴史や、月探査衛星かぐややISSのきぼうモジュールの模型も展示されていた。
実は先日、JAXAの施設の見学に行っていた。
ブログに書こうと思っていたのに、忘れていた。
PARCOに行って思い出した。今度、その記事を書こう。

Street view

今年の4月頃、某所を歩いているときに、Google Street View の車とすれ違った。
過去にもすれ違ったことがあるが、その時は高速道路上の車内だったので、すれ違った場所もわかりにくいし、仮に場所が解ったとしても自分を識別できるかどうかは疑問だったので、チェックすらしなかった。

今回は、狭い市街地の道路だったので、写っているかもしれないと思って、時々StreetViewをチェックしていた。
そして先日、その写真に更新されているのを発見した。
ズームすると、こんな感じ。
マスクをしているときだったので、顔はわからないが、えんじ色のNewBalance、普段着ている服、肩に掛けたウエストポーチは、間違いない。

2019年7月6日土曜日

水害から街を守れ!

温暖化の影響で、大気が持つエネルギーがどんどん増えている。そのため気象は凶暴化し、毎年のように大規模な豪雨と山火事が世界のどこかで発生している。

日本も例外ではない。海抜0m地帯に広がる首都圏の人口過密地帯は、洪水にも注意しないといけない。梅雨時期は特に。
洪水の防災施設として、埼玉には通称「春日部地下神殿(正式名称:首都圏外郭放水路の庄和排水機場)」と呼ばれる巨大な施設がある。
申し込めば見学することもできる。
見学コースは「立坑体験コース」「ポンプ堪能コース」「地下神殿コース」の3種類がある。機械好きの私としては、ポンプ堪能コースを選んだ。

ただし、これは人気がありなかなか取れない。
さらに、大雨が降れば見学は中止になり、しかも、中止になるとお金は戻ってこない。
逆に言えば、梅雨時期の今はリスクを恐れて、誰も予約しないので、自分は「晴れ男」であると自信のある者は、今こそ予約の時期だ。

先日、予約をして見学してきた。もちろん中止にはならなかった。

東武アーバンパークライン(旧:野田線)の南桜井駅から2kmちょいなので、Google Mapを見ながら歩いていった。
見学前の集合場所の隣には「操作室」と呼ばれる部屋がある。様々なTV番組や映画で、基地や司令室として使われているそうだ。未来的でカッチョいい。

色々説明を受けて、地下のポンプ室へ。
4機の巨大な排水ポンプが並んでいる。

1号ポンプのアップ。
「1号機」と書いてある部分に水車の回転軸がある。
水車はタービンエンジンで駆動する。水平方向に設置されたタービンエンジン(ターボシャフトエンジン)の出力軸から、傘歯車経由で垂直方向の回転にして、ギアで減速して水車を回す。
水車や水路は床の下なので、見えていない。
燃料は重油で、ある程度備蓄しているそうだ。

タービンエンジンは小型で出力が大きいが、大量の空気を吸い込み排出する。そのため、巨大な給排気ダクトがついている(奥に斜めに見えている銀色の部分)。
実はタービンエンジンは、このダクトの向こう側にあり、手前のクリーム色の構造物は、ギアや水車の軸が収まっている。
写真をよく見ればわかるが、斜めのダクトの奥に、もう一つ太いダクトがある。この2つで吸気と排気だろう。
そのため、最初の「1号機」と書かれているブロックは、ポンプシステムの一部でしかない。全体はその何倍も大きいのだ。

これは、4号機。
すべての排水ポンプの上に、採光用と思われる窓がある。
ちなみに、周りの赤いのは消火設備。

これを地上から見ると、こんな感じ。

地上には、水門を動かす装置もある。
ずらりと並んで、壮観だ。
機械なので色はどうでもいいと思うが、風化した大理石のようなクリーム色になっており、これらも神殿感を出している。

いよいよ地下神殿へ。
その入り口は、遺跡感がない。写真には写っていないが、その横ではスケボー少年達が遊んでいる。なんだか興ざめ。

地下に入って、まず目につくのは、この巨大な縦穴。
神殿というよりも、SF映画に出てくる巨大設備のようだ。
この季節でもひんやりとしていて、異世界感満点。
しかも、音がすごくカッチョいい。「ゴーン、ゴーン、ゴトーーン」という感じの、機械が低く唸るような、重厚な音が鳴り響いている。この巨大な構造物を見ながらその音を聞いていると、火星のテラフォーミング施設にでも来たような気分になる。
説明員にこの音について聞いてみた。地上のスケボーの音が巨大施設に響いてこのようなSF的な音になると話していた。
スケボー少年、素晴らしい演出じゃないか!ありがとう。

奥を見ると、こんな感じ。
個人情報保護の観点から、なるべく人が映らないように撮影したのだが、スケール感がまったくない。
そのため、そこにいた人に撮影してもらったのがこの写真。
柱の手前に立っているのが、身長189.5cmの私だ。

神殿感もあったが、巨大な施設はSF感もある。とても興味深い見学だった。

2019年7月5日金曜日

動画圧縮し直しスクリプトをまた直した

Ubuntuのインストールし直しで色々な作業をしているが、今年直したばかりの動画圧縮し直しスクリプトもまた直した。

ffmpegのaacのエンコーダが変わったようで、エンコーダの指定を変更する必要があった。
また、サイズの取得に失敗するときがあったので、サイズの取得方法を強化した。
ついでに、出力ファイルがすでに存在している場合、ファイル名の末尾に"-<数字>"を付けるようにした。
$ source-highlight --out-format=html -i ~/bin/toH264.sh
#!/bin/bash
SRCFILE=$1
DSTFILE=$2

if [ -z "$DSTFILE" ]; then
    BASENAME=$(basename $SRCFILE)
    DSTFILE=${BASENAME%.*}.mp4
fi

DIRNAME=$(dirname $DSTFILE)
BASENAME=$(basename $DSTFILE)
i=0
while [ -e "$DSTFILE" ]; do
    i=$(( i +1 ))
    DSTFILE=$DIRNAME/${BASENAME%.*}-${i}.mp4
done

#---------------------------------------------------------------#
#  Extract informations from source video.                      #
#---------------------------------------------------------------#
CREATION_TIME=""
ENCODER=""
videoFormat=""

while read s; do
    s=$(echo $s | sed -e "s/^ *//g");

    if [[ "$s" == creation_time\ :* ]]; then
        if [ -n "$CREATION_TIME" ]; then
            echo "creation_time duplicated. Discard candidate $CREATION_TIME"
        fi
        CREATION_TIME=$( echo $s | sed -e "s/^[ \t]*creation_time[ \t]\+:[ \t]\+//g" )
    fi

    if [[ "$s" == encoder\ :* ]]; then
        ENCODER=$( echo $s | sed -e "s/^[ \t]*encoder[ \t]\+:[ \t]\+//g" )
    fi

    if [[ "$s" == Stream\ *:\ Video:* ]]; then
        videoFormat=$( echo $s | sed -e "s/^[ \t]*Stream \+#.*: \+Video: \+//g" )
    fi
done < <( ffprobe ${SRCFILE} 2>&1 )


echo creation_time=$CREATION_TIME, ENCODER=$ENCODER, videoFormat=$videoFormat

#exit 0
#CREATION_TIME=$(ffprobe $SRCFILE 2>&1 | grep "creation_time" | head -n 1 | sed -e "s/[ \t]*creation_time[ \t]*:[ \t]*//g")

echo SRC: $SRCFILE
echo DST: $DSTFILE
if [ -z "$CREATION_TIME" ]; then
    echo "No \"creation_time\" metadata. use ctime."
    CREATION_TIME=$(stat "$SRCFILE" | grep "^Change:" | head -n 1 | sed -e "s/^Change:[ \t]*//g" | sed -e "s/\.[0-9]* +.*$//g")
fi
echo CERATION_TIME: \""$CREATION_TIME"\"

#---------------------------------------------------------------#
# Auto bitrate                                                  #
#   H.264には、エンコード品質を表すBPP(Bit Per Pixel)という     #
#   指標がある。                                                #
#   BPPを用いて、ビットレートは以下のように計算される。         #
#                                                               #
#                       BPP x fps x width x height              #
#     bitrate[kbps] = ------------------------------            #
#                                  1000                         #
#                                                               #
#   H.264のBPPは、動画の動きの速さと、品質で以下のように        #
#   決まっている。                                              #
#                |               品  質                         #
#                |---------+---------+---------+--------        #
#                |   最高  |   高    |   中    |   低           #
#     -----------+---------+---------+---------+--------        #
#       高  速   |  0.225  |  0.175  |  0.125  |  0.100         #
#       中  速   |  0.200  |  0.150  |  0.100  |  0.075         #
#       低  速   |  0.175  |  0.125  |  0.075  |  0.050         #
#                                                               #
#           高速: スポーツまたはミュージックビデオ              #
#           中速: 映画                                          #
#           低速: ナレータ(ニュースや演説など)                  #
#                                                               #
#---------------------------------------------------------------#
#videoFormat=$( ffprobe ${SRCFILE} 2>&1 | \
#               grep "Stream \+#[0-9]:[0-9]: \+Video: \+" | \
#              sed -e "s/^ \+Stream \+#[0-9]:[0-9]: \+Video: \+//g" );

#bpp="0.225"
bpp="0.125"
width_height=$(echo ${videoFormat} | sed -e 's/^.*, \([0-9]\+x[0-9]\+\), .*$/\1/g')
if [[ ! "$width_height" =~ ^[0-9]+x[0-9]+$ ]]; then
    width_height=$(echo ${videoFormat} | sed -e 's/^.*, \([0-9]\+x[0-9]\+\) \+\[.\+\], .*$/\1/g')
fi
if [[ ! "$width_height" =~ ^[0-9]+x[0-9]+$ ]]; then
    echo "Unknown video size." 1>&2
    exit 1
fi

width=$(echo ${width_height}  | sed -e 's/ *\([0-9]\+\)x[0-9]\+ *$/\1/g')
height=$(echo ${width_height} | sed -e 's/ *\+[0-9]\+x\([0-9]\+\) *$/\1/g')
fps=$(echo ${videoFormat}    | sed -e 's/^.*, \+\([0-9.]\+\) \+fps,.*$/\1/g')

if [ -z "$width" -o -z "$height" -o -z "$fps" ]; then
    echo "cann't get information for bitrate. Use 8192kbps"
    vBitrate=8192k
else 
    echo "bpp=$bpp, width=$width, height=$height, fps=$fps"
    vBitrate=$(echo "scale=0; $bpp * $width * $height * $fps / 1000" | bc)"k"
fi

echo "bitrate=${vBitrate}"
#exit 0

#---------------------------------------------------------------#
# Convert video format                                          #
#---------------------------------------------------------------#
ffmpeg -i $SRCFILE -nostdin -y -acodec aac -profile:a aac_low -b:a 128k -ar 44100 -ac 2 -vcodec libx264 -profile:v main -b:v ${vBitrate} -pix_fmt yuv420p -f mp4 -metadata "creation_time"="$CREATION_TIME" -metadata "encoder"="$ENCODER" $DSTFILE

# No audio
#ffmpeg -i $SRCFILE -nostdin -vcodec libx264 -profile:v main -b:v ${vBitrate} -pix_fmt yuv420p -f mp4 -metadata "creation_time"="$CREATION_TIME" -metadata "encoder"="$ENCODER" -map 0:0 $DSTFILE

touch -r ${SRCFILE} ${DSTFILE}
Ubuntu 18.04のffmpegのaacエンコーダ指定にしてしまったので、16.04で使うなら以前のスクリプトを参考に、最後の方をかきかえろ。

なんか最近、linux関連記事ばかり書いているな…