遠方の親のスマホをHuawei P9 liteからP30 liteへ機種変更

親のスマホ(Huawei P9 lite)が時々ネットワークエラーになり電波を掴まなくなり、再起動やSIM抜き差しをして様子見をしていたが2年半使ったしそろそろ替え時ということでP30 liteへ機種変更した。

 

データの移行はHuawei Phone Cloneを使用したが、iPhoneのように丸っとコピーできるわけではなく、電話帳・写真・インストールアプリの一部(データ引継ぎはできずインストールされるだけ。Lineなどいくつかのアプリはインストールもされない)・文字入力設定がコピーできた。Lineのように移行続きが必要なものは無理だとしても、全アプリデータは引き継げないので結局再設定になる。

 

P30 liteはAndroid9から10に更新できるが、Android10にするとTeamViewerで遠隔操作できず、画面参照+カーソル位置を相手に示すしかできない。遠方の親のスマホを後から設定できるようにするため、Huawei HiSuiteをPCに入れて、Android10から9にダウングレードした。

Android9にダウングレード後は時々Android10への更新通知が来て、毎回キャンセルを選んで使用するのは面倒なので、更新通知が来ない方法を探した。

https://bbs.kakaku.com/bbs/J0000026846/SortID=22916471/

https://hanpenblog.com/6488

これらのページを参考に

adb shell pm disable-user --user 0 com.huawei.android.hwouc

で無効化した。

 

P9 liteからP30 liteにアプリ設定を移行しているときに、P9 liteが充電しても電池残量がだんだん減り、ついに0%になり電源をオフにして充電してもずっと0%のままに。

Huaweiのページを見ると本体温度が高いとフェールセーフのため充電が止まるとか、純正の充電器を使い充電すると書かれているが、本体温度は上がっておらず、純正充電器も手元にないので参考にならず。

Web検索すると、充電器を変える、充電ケーブルを変えると復活したという事例があり、家にある機器で試したがいくら充電しても0%のまま。

電圧チェッカーで見ると5V 0.5A~0.7Aは流れているので充電はできているようだが、0%表示のままで電源を入れてもすぐにシャットダウンしてしまう。

最後に裏蓋を開けてバッテリーのケーブルを外し、元に戻したら電池残量は100%表示になり起動した。やはり充電はできていたが、0%と誤認していたようだ。

何とか起動している間に移行を終わらせた。

Raspberry Pi 2 Model Bを購入

Raspberry Pi2を購入して、自宅サーバを構築したときのメモ

munin

ローカルリソースの状態をWEBからグラフで確認できるツール

# apt-get install munin

LAN内(192.168.0.0/24)からのアクセスを許可
[/etc/munin/apache.conf]

#       Allow from localhost 127.0.0.0/8 ::1
        Allow from localhost 127.0.0.0/8 ::1 192.168.0.0/24

監視するリソースに、ping結果を追加

# ln -s /usr/share/munin/plugins/ping_ /etc/munin/plugins/ping_www.google.co.jp
# service munin-node restart
# service munin restart

監視するリソースに、CPU温度を追加

[./cputemp]

#!/usr/bin/env perl

use strict;
my $cpu = `cat /sys/class/thermal/thermal_zone0/temp`;
$cpu = ($cpu / 1000) if $cpu;

if ($ARGV[0] eq "autoconf") {
        if ($cpu) {
                print "yes";
        } else {
                print "no";
        }
} elsif ($ARGV[0] eq "config") {
        print "graph_title CPU temperature\n";
        print "graph_vlabel Celsius\n";
        print "graph_category system\n";
        print "cputemp.warning 50\n";
        print "cputemp.critical 60\n";

        print "cputemp.label CPU_temp\n";
} else {
        print "cputemp.value $cpu";
}

cputempを移動してmuninを再起動

# chmod +x cputemp
# mv cputemp /usr/share/munin/plugins
# ln -s /usr/share/munin/plugins/cputemp /etc/munin/plugins/cputemp
# service munin-node restart
# service munin restart

muninの試験方法

# munin-run

参考

PPTP

外出先からWi-Fi利用時に、自宅にPPTPVPN接続すると盗聴対策が出来て、安心してネットを利用可能。
インターネット→PPPoEルータ→raspberry piの経路で接続。通常PPTPは外部向けWAN NIC(サブネット)と内部向けLAN NICが必要だが、WAN NICのみでも動作。

# apt-get install pptp

raspberry piは192.168.0.22の固定IPで運用。PPTP接続してきたクライアントには192.168.0.50〜59をアサイ
[/etc/pptpd.conf]

localip 192.168.0.22
remoteip 192.168.0.50-59

DHCPで払い出すDNSサーバはルータ(192.168.0.1)を指定
[/etc/ppp/pptpd-options]

ms-dns 192.168.0.1

[/etc/sysctl.conf]

net.ipv4.ip_forward=1

sysctl.confの設定内容を反映させて、iptablesを設定

# sysctl -p
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# crontab -e
@reboot sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

[/etc/ppp/chap-secrets]

vpn_user_name     *       vpn_password   *

pptpdを再起動して新しい設定を反映

# service pptpd restart

ルータの設定でポート1723をraspberry piへ転送


参考

VNC

# apt-get install x11vnc

OS起動時にX11自動起動するように設定し、VNCサーバも自動起動するように設定。

起動するときは-neversharedを付けないと、vncセッションが浮いたときに後からvnc接続できなくなるので注意。

[.config/autostart/x11vnc.desktop]

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=X11VNC
Comment=
Exec=x11vnc -forever -display :0 -ultrafilexfer -nevershared
StartupNotify=false
Terminal=false
Hidden=false

パスワードをかけるときは x11vnc -storepasswdで設定して、x11vnc起動時に-usepwオプションを付与する。


参考

ssh rsa keyを使いパスワードなしでログイン

$ ssh-keygen
$ mv .ssh/id_rsa.pub .ssh/authorized_keys

[/etc/ssh/ssh_config]

   RSAAuthentication yes
   PubkeyAuthentication yes

sshdを再起動

# service ssh restart

  1. id_rsawinscpでローカルに転送
  2. Putty Key Generatorでid_rsaをLoadして「Save private key」でid.ppkとして保存
  3. Pagentでid.ppkを「Add Key」
  4. Puttyの設定(接続→SSH→認証)で「認証のためのプライベートキーファイル」にid.ppkを指定し、「Pagentを使って認証する」にチェック


参考

squid

透過Proxyを構築。X-Forwarded-ForとViaヘッダを付けないように設定変更し、接続にはパスワード認証をするように設定

# aptitude install squid
# htpasswd -bcp /etc/squid/passwd proxy_user proxy_password

[/etc/squid/squid.conf]

#http_port 3128
http_port 93128

# forwarded_for on
forwarded_for off

# via on
via off

#acl password proxy_auth REQUIRED
acl password proxy_auth REQUIRED

http_access allow password

auth_param digest program /usr/lib/squid/digest_pw_auth /etc/squid/passwd
auth_param digest children 5
auth_param digest realm Squid proxy-caching web server
auth_param digest nonce_garbage_interval 5 minutes
auth_param digest nonce_max_duration 30 minutes
auth_param digest nonce_max_count 50

squidを再起動

# service squid restart

moto360のレビュー


moto360を一週間使用した感想を少し書きたいと思います。

良い点

  • 丸くて金属製の時計なので仕事でも違和感なく使用できる
  • 色々な時計デザインを試して遊べる
  • 仕事中に届いた通知(メール、メッセージなど)をこっそり見れる

Facer for Android Wearはとても良くできたアプリで、プログラミング知識が無くても複雑な時計を簡単に作成出来ます。

例えばこの画像のようなムーンフェイズ、バッテリー残量、年月日、曜日と複雑な時計も作成できます。

ダウンロードはこちら。



また、スイス国鉄のstop2goという、秒針が毎分0秒位置で2秒止まり分針が1分カチッと動く変わった時計も再現出来てしまいます。

ダウンロードはこちら。

悪い点

  • 時計を見たい時に点灯してくれない
  • 点灯時間を変更出来ない
  • 音声操作が不十分
  • ナビを使うと時計を確認出来なくなる
  • 心拍計歩数計の精度がイマイチ

スマートウォッチは出始めなので仕方ないのですが、やはり悪い点が目立ちます。印象としてはGoogleAppleよりも先にリリースすることを優先したため、ベータ版のまま世の中に出した感じです。


まず時計として時間を見るという基本機能を満足に使えません。
普段は省エネのため画面が消えていて、時計を見る動作をすると加速度センサーが反応して点灯するはずですが、結構な確率で点灯しません。点灯するときも少しタイムラグがあるので厄介です。
アンビエントモードにすると常時点灯しますが、バッテリーを消費するので1日持たなくなるので実質使えません。(半日の使用限定)
ちなみに時計の点灯時間は5秒固定となっており変更出来ないのも不便です。(スマホは変更できるのに)


次にキーボードが無いのでタッチ操作か音声入力をしますが、「心拍数を表示」と言っても「心拍数 表示」と認識されてWEB検索されてしまったり、時間やリマインダ内容を間違ったまま登録したり、とにかく認識精度が悪いし、スマホ経由でクラウドで音声処理をしているため遅延が大きくてストレスが溜まります。
スマホの音声入力より精度が落ちるので、moto360のマイクの問題と考えています。
自転車での操作を想定して音声入力ですべて操作が出来たらいいのですが、キャンセルややり直しを音声入力で指示出来ないので、音声+タッチで操作することになり中途半端なUIです。


自転車でルート表示のためにナビを使うと、常に画面下半分をナビに占有されてしまい、アナログ時計で時刻が確認出来なくなってしまいます。
ナビの画面(カード)を消して時刻を確認したらナビが終わってしまい残念なUI。


心拍数を見れるのは面白いのですが、自転車乗っていたり歩いているときはズレてしまうせいか再スキャンになってしまいます。心拍活動をFitアプリから確認出来ますが、時間別に心拍数・歩数を表示する機能はなく一日に30分運動をしたかしか分かりません。アプリの問題なのでアップデートに期待しています。


まぁまぁ

  • 電池持ちは1日が限度

電池持ちは1〜2日と言われていましたが、やはり毎日充電が必要です。
スマホも毎日充電しているのでまぁ仕方ないです。
スマホと違い専用充電器が必要なので、家にいるときにフル充電する必要があります。

結局のところ

スマートウォッチの有用なユースケースは自転車がメインと考えています。モトローラの写真も自転車利用中のものが多く、ベンダーも同様の考えのはずです。
歩いているときはスマホを見る、運転中はスマホもスマートウォッチも見れないから停止時にスマホを見る、電車・バスで移動中はスマホを見るので、消去法で自転車が残ります。
自転車で移動中に通知が来たら、信号待ちのときにチェックする。わざわざスマホをカバン、ポケットから取り出す必要無し。
便利だけどその為だけにスマートウォッチを使う人は少ないでしょう。


仮に心拍計歩数計・加速度センサーを駆使して、フィットネス用のスマートトラッカー(活動量計)としても使えるようになれば利用者が増えてきそうです。
ただし現時点では前述のようにスマートトラッカーとは程遠く、睡眠測定も出来ません。


2015年以降、Apple Watchや老舗時計メーカ製がリリースされる予定なので、今後スマートウォッチがどのように盛り上がっていくか楽しみです。



Facer用のファイルダウンロード

http://www.speedyshare.com/uktbF/IWC-Portuguese-Chronograph.face

moto360を購入

以前からスマートウォッチは気になっていましたが外観が安いデジタル時計のようで静観していました。
ところがmoto360が3月に発表されて丸型の金属ケースのデザインを見たとき、初めて普段着けている時計の代わりに着けたいと思い、6月のGoogle I/Oのハンズオン動画や記事を見て欲しい気持ちに拍車がかかり発売日を待っていました。


2014/9/4のシカゴでの発表会はマスコミ限定の非公開と分かり夜更かしを後悔しましたが、翌日9/5 11:00 CDT(日本時間 9/6 1:00)の発売開始直後にGoogle Play Storeで購入手続きをしました。

9/5 11:11 CDT (9/6 01:11 JST) Google Play Storeで注文完了 (9/12までに発送開始)
9/13 14:40 JST Googleから発送連絡
9/13 02:30 EDT (9/13 15:30 JST) Louisville, KY / UPS Origin Scan
9/13 07:00 PDT Portland, OR
<土日はスピアネット休業>
9/15 14:00 PDT スピアネット着
9/15 15:00 PDT スピアネット決済メール
9/16 15:00 PDT スピアネット発送メール
9/17 14:00 PDT ポートランド
9/18 16:00 JST 成田着
9/19 13:00 JST 通関通過
9/20 13:00 JST 到着

本体 $249.99
送料 $18.99 (Overnight Shipping:一番高額な配達オプション)
スピアネット費用 $31 (送料$22+手数料$9)
消費税(関税は免税)1,100円
 ※本体の60%に8%。計算途中で3回端数切捨てあり
⇒合計 約33,800円(109円/$と仮定)

参考までに、2010年にGoogle Play StoreからNexus Oneを購入したときアメリカのIPアドレスに偽装する必要がありましたが、今回はGoogle Paymentの住所をアメリカにして、ブラウザの言語設定を英語にすることでmoto360の購入URLに繋がりました。


また、moto360はGoogle Play Store、Best Buy、Motorolaでの同時販売でしたので一通り購入出来るか試してみました。
Best Buyのオンラインストアは発売時刻前に販売URLがリークされたので購入手続きが完了しましたが、日本のクレジットカードは弾くらしくその後強制キャンセルになりました。
motorolaオンラインストアもフライングで購入手続きをするも、やはりクレジットカードのエラーになり、購入手続きを完了にすら出来ませんでした。


http://www.reddit.com/r/moto360/new/にmoto360の情報が集まっていてとても参考になります。
9/9にすぐに在庫切れになりましたが、Google Play Storeに時々在庫が復活したようなので、スクリプトを組み販売URLを監視して購入する強者がいました。

過去ログからニコニコ実況ログを作成する方法

JikkyoRecはテレビ録画時にニコニコ実況ログを保存しますが、保存に失敗したときは外部ツールを使い過去ログを取得してnicoJK形式のログに変換すると便利です。


1. ニコニコ実況コメントビューアをダウンロード


2. ニコニコ実況コメントビューアを使い過去ログをダウンロード。
公式サイトの「過去ログを見る」で番組と時間を選択し、「ブラウザーで見る」ボタンをクリックすると過去ログのURLが生成されるので、それをニコニコ実況コメントビューアのURL欄にコピーすると簡単です。


3. ダウンロードした過去ログ(番組名_時間.xml)を変換。
JKL_conv.batのPATH設定をして、過去ログをJKL_conv.batへドラッグ&ドロップすると、nicoJK形式のログが生成されます。過去ログの中には番組情報が無いため、ログを自動的には適切な番組のフォルダ(jkXX)に移動できません。そのため手動でファイルコピーします。

※2013/2/8にNicoJKPlayModX5がリリースされて、ニコニコ実況コメントビューアのログファイル(.xml)に対応したため、3.の手順は不要になりました。

JKL_conv.bat
@echo off
set output="F:\ts2 data\log"
set perl=C:\Dwimperl\perl\bin\perl.exe
set jkl_conv="F:\ts2 data\log\JKL_conv.pl"

for %%a in (%*) do (
	%perl% %jkl_conv% %%a %output%
)

pause
JKL_conv.pl
use strict;
use utf8;
# use Encode ();
# use Unicode::Japanese;

my $file = $ARGV[0];
my $output_dir = $ARGV[1];

my @lines;
my $start_date = 0;

open FILE, $file or die "can't open file: $file";
while (<FILE>) {
	chomp;
	if (/(<chat .+\/chat>)/) {
		push @lines, $1;
	}
}
close FILE;

if ($lines[0] =~ /date="(.*?)"/) {
	$start_date = $1;
}

if ($start_date != 0) {
	open OUTPUT, ">$output_dir/$start_date.txt" or die "can't open output file: $output_dir/$start_date.txt";
	print OUTPUT join("\n", @lines);
	close OUTPUT;
	
	print "output: $output_dir/$start_date.txt \n";
}

録画したテレビ番組をニコニコ実況のコメント付で再生する方法

録画したテレビ番組を、PC上でニコニコ実況のコメント付で再生したいなと思っていました。
Androidスマホ上では ニコニコ実況プレイヤー を使えば実現できますが、PC上となると最近まで気軽に使えるソフトがなかなか有りませんでした。
例えば、nicort、かぶせるコメントビューア、ニコニコ実況コメントビューアがありましたが、動画再生位置とコメント再生位置を手動で合わせないといけないため、CMスキップや倍速再生する人は使いにくい状況でした。


しかし2013/1/12にnicoJKの改造版(NicoJKPlayMod)が公開され、ようやくPC上で簡単にニコニコ実況のコメント付でテレビ番組を再生できるようになりました。


PC上で録画したテレビ番組を再生するには、TVTest + TvtPlay を使います。
そしてニコニコ実況のコメントを保存したり再生したりするにはTVTest + TvtPlay + NicoJKPlayModX5を使います。
nicoJKPlayModはTVTestで録画する前提で自動的にニコニコ実況のログを保存できますが、EpgDataCap_Bon(EDCB)を使い録画している人が多いと思います。
そこでEDCBで予約録画している裏でニコニコ実況ログを自動的に保存できるように JikkyoRec を改良しました。


JikkyoRec 0.3からはnicoJK形式のニコニコ実況ログも自動的に保存します。

ダウンロード

リリース履歴
・0.1 2012/01/22 初版リリース
・0.2 2012/03/03 ログ形式をlog4jへ変更
・0.3 2013/01/20 TVTestのnicoJKプラグイン形式のログ出力機能を追加
・0.4 2013/01/25 テレ玉/tvk/チバテレビ/BS各局に対応、nicoJK複数行形式に対応
・0.5 2013/01/29 タスクトレイのアイコン表示方法を修正
・0.6 2013/07/17 番組名に/が入っていてもログが保存されるように修正
・0.7 2013/07/18 番組名に*?"<>\が入っていてもログが保存されるように修正

JikkyoRecの使い方はzipファイルの中にあるreadmeを参照して下さい。

参考

Jikkyorec & NicoJK再生対応改造版用小物置場

  • tvrsch2e:Tvrock環境でJikkyorecを使うためのプログラム

  • jkltxtdel:Jikkyorecの.jklと.txtの関連を調べたり削除したりするソフト

  • 2ch2NicoJK:JikkyorecのNicoJK用ログに2ちゃんねる実況をてきとーに書き加える常駐ソフト

  • NicojCatch:Jikkyorecもどき常駐ソフト

  • など便利なソフトがたくさんあります。


    TVRockの場合、tvrock.schをEDCBのReserve.txt風に変換するスクリプトを作成してくれた方がいましたので是非試してみて下さい。
    当方はTVRockを使っていないので動作確認はしていません。

    2倍速動画の作成方法

    スマートフォンをGalaxy S2 (SC-02C)からGalaxy S3 (SC-06D)へ機種変更しました。Xi、おサイフケータイに対応したことは良かったのですが、Androidで唯一2倍速再生できる動画プレイヤーであるdiceplayerが使えなくなったのには困りました。
    チップセットの関係か、動画のフォーマットをh264 mp4からmkvやaviなどへ変えても、2秒程再生するとフリーズしてしまうという状況は変わりませんでした。
    そこで苦肉の策として動画そのものを2倍速に再エンコードし、他の動画プレイヤーで再生することにしました。

    用意するもの

    以下はQSV(Quick Sync Video)対応のCPU使用時に処理を高速化したいときだけ必要

    環境構築

    携帯動画変換君の設定ファイルを作成。

    Transcoding_GalaxyS3.ini
    [Info]
    Title= 2 倍速
    
    [Item0]
    Title= 2 倍速 AVI/16:9 mp4
    Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -s 640x360 -r 14.99 "<%TemporaryFile%>.yuv" -acodec pcm_s16le -ac 2 -ar 48000 "<%TemporaryFile%>.wav""
    Command1=""<%AppPath%>\cores\ffmpeg" -y -s 640x360 -r 29.97 -i "<%TemporaryFile%>.yuv" -bitexact -an -vcodec h264 -b 500 -s 640x360 -r 29.97 -sameq -f mp4 "<%TemporaryFile%>_1.mp4""
    Command2=""<%AppPath%>\cores\sox" "<%TemporaryFile%>.wav" "<%TemporaryFile%>_1.wav" tempo 2.0 30"
    Command3=""<%AppPath%>\cores\ffmpeg" -y -i "<%TemporaryFile%>_1.wav" -bitexact -acodec mp3 -ac 2 -ar 48000 -ab 128 -f mp3 "<%TemporaryFile%>.mp3"" 
    Command4=""<%AppPath%>\cores\mp4box" -add "<%TemporaryFile%>_1.mp4"#video -add "<%TemporaryFile%>.mp3"#audio -new "<%OutputFile%>_x2.mp4"" 
    Command5="cmd /c "del "<%TemporaryFile%>*.*"""
    
    [Item1]
    Title= 2 倍速 AVI/16:9 mp4 qsv
    Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -s 640x360 -r 14.99 "<%TemporaryFile%>.yuv" -acodec pcm_s16le -ac 2 -ar 48000 "<%TemporaryFile%>.wav""
    Command1=""<%AppPath%>\cores\QSVEncC" --input-res 640x360 --fps 29.97 -i "<%TemporaryFile%>.yuv" -o "<%TemporaryFile%>.264""
    Command2=""<%AppPath%>\cores\sox" "<%TemporaryFile%>.wav" "<%TemporaryFile%>_1.wav" tempo 2.0 30"
    Command3=""<%AppPath%>\cores\ffmpeg" -y -i "<%TemporaryFile%>_1.wav" -bitexact -acodec mp3 -ac 2 -ar 48000 -ab 128 -f mp3 "<%TemporaryFile%>.mp3"" 
    Command4=""<%AppPath%>\cores\mp4box" -add "<%TemporaryFile%>.264"#video -add "<%TemporaryFile%>.mp3"#audio -new "<%OutputFile%>_x2.mp4"" 
    Command5="cmd /c "del "<%TemporaryFile%>*.*"""
    
    [Item2]
    Title= 2 倍速 AVI/16:9 mp4 qsv core2最適化
    Command0=""<%AppPath%>\cores\ffmpeg_core2_20120904" -y -i "<%InputFile%>" -s 640x360 -r 14.99 "<%TemporaryFile%>.yuv" -acodec pcm_s16le -ac 2 -ar 48000 "<%TemporaryFile%>.wav""
    Command1=""<%AppPath%>\cores\QSVEncC" --input-res 640x360 --fps 29.97 --gop-len 30 --strict-gop -i "<%TemporaryFile%>.yuv" -o "<%TemporaryFile%>.264""
    Command2=""<%AppPath%>\cores\sox" "<%TemporaryFile%>.wav" "<%TemporaryFile%>_1.wav" tempo 2.0 30"
    Command3=""<%AppPath%>\cores\ffmpeg_core2_20120904" -y -i "<%TemporaryFile%>_1.wav"  -acodec aac -strict -2 -ac 2 -ar 48000 -ab 128k "<%TemporaryFile%>.aac"" 
    Command4=""<%AppPath%>\cores\mp4box" -add "<%TemporaryFile%>.264"#video -add "<%TemporaryFile%>.aac"#audio -new "<%OutputFile%>_x2.mp4"" 
    Command5="cmd /c "del "<%TemporaryFile%>*.*"""
    

    sox.exe QSVEncC.exe MP4Box.exe ffmpeg_core2_20120904.exe を 3GP_Converter034\cores へコピー。

    字幕ファイル(srt)もタイムスタンプを変更し2倍速へ対応しないといけないので、変換するスクリプトを作成しました。動作にはPerlが必要です。

    srt_x2.bat
    @echo off
    
    set output=E:\TS-encoded\2倍速
    set perl=C:\Dwimperl\perl\bin\perl.exe
    set srt_x2="E:\ts-encoded\srt_x2.pl"
    
    for %%a in (%*) do (
    	%perl% %srt_x2% %%a "%output%\%%~na_x2.srt"
    )
    
    
    echo 処理したファイル
    for %%a in (%*) do (
    	echo %%a
    	  for %%I in ("%output%\%%~na_x2.srt") do if %%~zI equ 3 (
    	      rem .srt のファイルサイズが 3bytes の場合
    	      del %%I
    	      echo   deleted
    	  )
    )
    
    pause
    
    srt_x2.pl
    use strict;
    
    my $file = $ARGV[0];
    my $output_file = $ARGV[1];
    
    my @lines;
    
    open FILE, $file or die "can't open file: $file";
    while (<FILE>) {
    	chomp;
    	if (/^(..):(..):(..),(...) --> (..):(..):(..),(...)$/) {
    		# 数字の変更
    		
    		# 開始時刻
    		my $hh = $1;
    		my $mm = $2;
    		my $ss = $3;
    		my $msec = $4;
    
    		my $start = ($hh*3600 + $mm*60 + $ss)*1000 + $msec;
    		$start = int ($start / 2);
    		
    		$hh = int ($start/3600/1000);
    		$mm = int (($start/1000 - $hh*3600)/60);
    		$ss = int (($start/1000 - $hh*3600 - $mm*60));
    		$msec = $start - ($hh*3600 + $mm*60 + $ss)*1000;
    
    		$start = sprintf("%02d:%02d:%02d,%03d", $hh, $mm, $ss, $msec);
    		
    		# 終了時刻
    		$hh = $5;
    		$mm = $6;
    		$ss = $7;
    		$msec = $8;
    		
    		my $end = ($hh*3600 + $mm*60 + $ss)*1000 + $msec;
    		$end = int ($end / 2);
    		
    		$hh = int ($end/3600/1000);
    		$mm = int (($end/1000 - $hh*3600)/60);
    		$ss = int (($end/1000 - $hh*3600 - $mm*60));
    		$msec = $end - ($hh*3600 + $mm*60 + $ss)*1000;
    
    		$end = sprintf("%02d:%02d:%02d,%03d", $hh, $mm, $ss, $msec);
    		
    		push @lines, "$start --> $end";		
    	} else {
    		# 外字の変換 [外:43856FD7C04A779E571FE24C47F02A6C] → [外]
    		s/\[\:.+?\]/[外]/g;
    		push @lines, $_;
    	}
    }
    close FILE;
    
    open OUTPUT, ">$output_file" or die "can't open output file: $output_file";
    print OUTPUT join("\n", @lines);
    close OUTPUT;
    

    使用方法

    1. 任意の動画を640x360にエンコード
    2. 携帯動画変換君へファイルをドラッグ&ドロップ
    3. 字幕ファイル(動画ファイル名.srt)があれば srt_x2.bat へドラッグ&ドロップ

    (A)2 倍速 AVI/16:9 mp4、(B)2 倍速 AVI/16:9 mp4 qsv、(C)2 倍速 AVI/16:9 mp4 qsv core2最適化の設定があります。(A)はソフトウェアエンコード、(B)(C)はハードウェアエンコード(QSV対応のCPUの場合のみ)、(C)はcore2以降のCPUに最適化されたffmpegでマルチスレッド処理もできて高速です。

    参考までにcorei7 2600kの環境で60分の動画処理にかかった時間は、(A)12:42、(B)6:02、(C)4:42でした。QSVの効果(mp4エンコードのみ)は約6倍、core2最適化ffmpegの効果(demux処理のみ)は約2倍です。


    (A)2 倍速 AVI/16:9 mp4

    1. demux 3:11 (3:11)
    2. mp4 11:00 (6:49)
    3. mp3 12:07 (1:07)
    4. mp4box 12:42 (0:35)

    (B)2 倍速 AVI/16:9 mp4 qsv

    1. demux 3:14 (3:14)
    2. mp4 4:20 (1:06)
    3. mp3 5:28 (1:08)
    4. mp4box 6:02 (0:34)

    (C)2 倍速 AVI/16:9 mp4 qsv core2最適化

    1. demux 1:38 (1:38)
    2. mp4 2:48 (1:10)
    3. mp3 3:55 (1:07)
    4. mp4box 4:42 (0:47)