カテゴリー別アーカイブ: IT

ffmpegでまともに動くファイル結合法をネットで探すのに時間がかかりすぎたので解説

Windows環境でffmpegで複数の同一フォーマットの動画ファイルを単純に結合する方法。

結合したい動画ファイル一覧のテキストファイルを作成。

ポイントは…
・各行の最初はfileで始めること。
・ファイル名のフルパスはシングルクォーテーションでくくること。
・円マーク(バックスラッシュ)は二重にすること。

file 'C:\\videos\\movie01.mp4'
file 'C:\\videos\\movie02.mp4'
file 'C:\\videos\\movie03.mp4'

このファイルを、例えば filelist.txt という名前で保存する。

次にBATファイルを作成する。

-safe 0 を付けないとエラーになることがあるので、念のため付ける。
-i filelist.txt が上記で作成したファイルリストを指定する部分。
動画も音声も元のエンコードでそのままコピーするので -c copy とする。

ffmpeg -f concat -safe 0 -i filelist.txt -c copy moviefull.mp4

このファイルを、たとえば concatfiles.bat という名前でBATファイルとして保存し、実行する。

ファイルが見つからないなどのエラーが出たら、上記のfilelist.txtとこのBATファイルを同じフォルダに保存する。

そもそもffmpegというコマンドが見つからないというエラーが出たら、ffmpeg.exeのあるフォルダにパスを通してしまえば良い。

以上

新浪微博のユーザ別ツイート添付画像関連API

新浪微博のAPIについて、ほぼどうでもいい覚書。

ユーザのユーザIDから、そのユーザのアルバムデータをJSON形式で取得するAPI。メソッドはGETでよい。

https://photo.weibo.com/albums/get_all?uid=[ユーザID]&page=1&count=5&__rnd=[UNIXタイムスタンプ(ミリ秒)を100で割ったもの]

GETした結果のJSONデータの中にalbum_listというデータが、原則3個入っているはず。

そのうち2つめ、つまりインデックス番号1がツイート添付画像のアルバムデータ。そのalbum_idがアルバムID。

ユーザのユーザIDとアルバムIDから、そのユーザのツイートに添付されている画像データをJSON形式で取得するAPI。

https://photo.weibo.com/photos/get_all?uid=[ユーザID]&album_id=[アルバムID]&count=32&page=[ページNo]&type=3

[ページNo]の数値を1から順に増やすと、過去の画像のURLを順次取得できる。

Video LAN Player: How to play movies cropped with command line options

As you know, VLC (Video LAN Player) can crop the movie. However, I couldn’t find an exact answer of what options are needed when you launch the latest version of VLC.

This is just a note for myself :-)

vlc.exe --video-filter=croppadd --croppadd-croptop=[TOP MARGIN] --croppadd-cropbottom=[BOTTOM MARGIN] --croppadd-cropleft=[LEFT MARGIN] --croppadd-cropright=[RIGHT MARGIN] [MOVIE FULLPATH]

I suppose 'crop' filter is one of the default filters when you install VLC.

First option should be '--video-filter=croppadd'. The other options can be with any order. The unit is pixel.
--croppadd-croptop=
--croppadd-cropbottom=
--croppadd-cropleft=
--croppadd-cropright=

[Example]
vlc.exe --video-filter=croppadd --croppadd-croptop=40 --croppadd-cropbottom=20 --croppadd-cropleft=30 --croppadd-cropright=10 "C:\Users\James\My Videos\sample.mp4"

40 pixels from the top of the movie will be cropped.
20 pixels from the bottom of the movie will be cropped.
30 pixels from the left border of the movie will be cropped.
10 pixels from the right border of the movie will be cropped.

Of course, this cropping setting doesn’t make any sense.

jQueryの初心者がselectタグの選択結果がページ内の特定の要素の表示・非常時を切り替えてみた

jQueryを使って気づいたことのメモ。

まずjQueryを使って書いたJavaScriptは、別ファイルmyscript.jsとして作成し、該当のHTMLファイルから読み込むようにする。

JavaScriptとHTMLはファイルを分けたほうがメンテナンスがしやすいため。両社が同じフォルダ内にある場合は”./~.js”という具合に指定。

<script src=”./myscript.js” type=”text/javascript”></script>

以下、セレクタについて。

class名はドット始まり。id名は#始まり。

// classが class_name という名前の要素すべて
$(“.class_name”)

// idが id_name という名前の要素すべて
$(“#id_name”)

さらに属性で絞り込みたい場合は [属性名1=’値1′][属性名2=’値2′]… とつなげればよい。

$(“.class_name[attribute1=’val1′][attribute2=’val2′]”)
$(“#id_name[attribute1=’val1′][attribute2=’val2′]”)

これらの絞り込みが想定しているのは、下記のようなHTML。

<div id=”id_name” attribute1=”val1″ attribute2=”val2″>
here goes some html
</div>

この要素はidが id_name で attribute1 が val1 で attribute2 が val2。

したがって

$(“#id_name[attribute1=’val1′][attribute2=’val2′]”)

と書けばピンポイントでこの要素に絞りこめる。

ある要素の配下にある、特定のclassやidで絞り込みたい場合は[class=’クラス名’] [id=’id名’]とすればよい。

つまり、class名もid名も、セレクタで絞り込むときには属性と同等にあつかえる。

$(“.class_name[id=’id_name’]”)
$(“#id_name[class=’class_name’]”)

これらは以下のように書いても同じ。

$(“.class_name #id_name”)
$(“#id_name .class_name”)

ここまで、属性の絞り込みには等号「=」を使っているが、この等号にはバリエーションがある。

参考:jQueryリファレンス Selectors:セレクタ

あくまで値を文字列として扱う前提。

=:等しい
^=:~で始まる
$=:~で終わる
*=:~を含む

以上の方法で絞りこめるようにするために、PHPなどでHTMLを出力する時は、絞り込みたい要素に属性値をたくさんつけておくとよい。

そうすると、複数の属性値の組み合わせで、柔軟に要素の絞り込みができる。

<div id=”id_name” attribute1=”val1″ attribute2=”val2″>
here goes some html
</div>

確実にページ内の特定の部分に存在するclassやidだけを絞り込みたい場合は、その部分全体を、あらかじめclassやidで囲んでおく。

<div class=”container1″>
<div id=”id_name” attribute1=”val1″ attribute2=”val2″>
here goes some html
</div>
</div>

その上でセレクタで絞り込むとよい。

上記の要素は以下のセレクタでピンポイントで絞りこめる。

$(“.container1 #id_name[attribute1=’val1′][attribute2=’val2′]”)

セレクタで絞り込んだ要素だけを表示したい場合は、全要素をいったん非表示にしてから、絞り込んだ要素だけを表示する。

非表示にする:スタイルシートのdisplayをnoneにする。
表示する:スタイルシートのdisplayをblockにする。

// いったん特定のクラスの全要素を非表示にしてから…
$(“.container1 .class_name”).css(“display”, “none”);

// 絞り込んだ要素だけを表示する
$(“.container1 .class_name[attribute1=’val1′][attribute2=’val2′]”).css(“display”, “block”);

以上のような要素の絞り込みと、表示・非常時の切り替えを、selectタグで何かの値を選択したときに実行したいとする。

ページ全体のいずれかの要素のクリックや選択などのイベントを拾うには、以下のように記述すればいい。

$(function() {

……

});

名前のない関数は、最初は非常に気持ち悪いが、慣れればよい。

例えばidがselect1というselectタグがあったとする。

<select id=”select1″>
<option value=”val1″>選択肢1</option&g;
<option value=”val2″>選択肢2</option&g;
</select>

このselectタグの選択値が変更されたときの処理は以下のように書く。

$(function() {

$(“#select1”).change(function() {
……
});

});

$(“#select1″)で、そのページの中でidがselect1である要素に絞りこめる。

選択値が変更されたときの処理を書きたい場合は、その要素のchange()という関数を呼び出す。

具体的にどういう処理をしたいかは、change()関数の中に、また名前のない関数function() { …… } を書いて …… の部分に記述する。

……の部分には、ふつうにJavaScriptやjQueryで書けるロジックは何でも書ける。

……の部分で、その処理のきっかけになった <select id=”select1”> 自体を参照したい場合は $(this) と書く。「自分自身」の意味だと思えばいい。

選択した値を読み取りたい場合は $(this).val(); と書けばいい。

ちなみに、デバッグしながらコードを書きたい場合は、console.log(~); の「~」の部分に、その時点の値を確認したい変数を書けばいい。

console.log(); で書き出したログは、たとえばGoogle Chromeなら[Ctrl]+[Shift]+[i]キーを押して、[Console]というタブを選べば、確認できる。

$(function() {

$(“#select1”).change(function() {
console.log($(this).val());
});

});

このように書いておいて、該当のページでselectタグで例えば「選択肢2」という項目を選択すると、その瞬間、以下のログが書き出される。

val2

ここまでにやったことを組み合せると、attribute1という属性が、selectタグで選択した値と同じである要素だけを表示する、といったことができる。

$(function() {

$(“#select1”).change(function() {
var selected_val = $(this).val();
$(“#id_name”).css(“display”, “none”);
$(“#id_name[attribute1='” + selected_val + “‘]”).css(“display”, “block”);
});

});

selectで選択した値を、分かりやすくするためにいったん selected_val という変数に代入している。

そしてそのselected_valを使ってセレクタ文字列を組み立てる。

例えばそのページの中でidが id_name である要素すべてを、まずいったん非表示にする。

$(“#id_name”).css(“display”, “none”);

その後、そのページの中でidが id_name であり、かつ、attribute1が選択した値である要素だけは表示させる。

$(“#id_name[attribute1='” + selected_val + “‘]”).css(“display”, “block”);

セレクタの文字列の組み立て部分は、以下のようなしくみ。

選択した値が「val1」だったとすると

“#id_name[attribute1='” + selected_val + “‘]”

この文字列の計算結果は

“#id_name[attribute1=’val1’]”

となる。つまり、idがid_nameである要素のうち、attribute1がval1のものという意味になり、下記のidがid_nameである要素がいったんすべて非表示になり、いちばん上の要素だけが表示される。

<div id=”id_name” attribute1=”val1″>表示したい要素の1つ目
</div>
<div id=”id_name” attribute1=”val2″>表示したい要素の2つ目
</div>
<div id=”id_name” attribute1=”val3″>表示したい要素の3つ目
</div>

企業向けモバイル端末管理製品2017年版「マジック・クアドラント」公開

毎年6月前後に公開されている、企業向けモバイル端末管理製品(Enterprise Mobility Management)の「マジック・クアドラント」2017年版が公開された。

今まで「リーダー」だった5強のうち、AirWatch(VMware社)、Mobileiron、MaaS360(IBM社)、BlackBerryは安泰だが、Citrix社だけが「ビジョナリー」に事実上の格下げになった。

各社の「強み」と「注意点」は以下のとおり。以下の要約はあくまで単なる参考であり、正確な内容については必ず原文を参照のこと。

VMware AirWatch

「強み」
・垂直統合型市場のほとんどで大規模導入実績あり。
・OS新バージョンの即日サポート、管理対象外端末に対する独自のソリューションについて技術革新を継続推進。
・これまでのEMMのみの導入に対して「Workspace One」が対象機能範囲を大きく拡張、競争力のある位置づけ。

「注意点」
・顧客企業から、テクニカル・アカウント・マネージャー(TAM)に直接コンタクトがとれないとの不満を継続して受けている。TAMオプション購入済み企業からは問題の報告なし。大規模導入についてVMware社は「pods」と呼ばれる直接サポートを追加。
・旧版のAirWatch Inboxをまだ利用している顧客企業が機能面と安定性の面で問題を報告している。Boxerの新機能S/MIMEサポートの品質が現時点で検証されていない。
・AirWatchのコード品質について継続的に報告を受けており、広範な互換性を提供しようとしている結果と思われる。

Mobileiron

「強み」
・昨年、顧客サポートの全般的な改善が報告されている。オンプレミス導入の顧客企業にも最新のパッチ適用を積極的に促し、クラウドユーザには定期保守によるサービス停止を適時に通知している。
・セキュリティと使いやすさの両立に焦点を当てている。各種法規制に対応、企業アプリストアやEmail+などの使いやすさも改善。
・クラウド版が、10万端末以上の大規模顧客にも導入されている。

「注意点」
・専業EMMベンダーとして、広範な製品を持つベンダーの競争力からプレッシャーを受けており、長期的に顧客が同社製品の適用範囲を縮小する脅威がある。
・導入直後からすぐ使えるレポーティングや分析機能が管理画面に組み込まれていない。
・AppConnect機能を利用しているユーザ企業が機能制限を考慮しなければならない。Android用AppConnectはiOS同様のSDKをサポートしていない。AndroidのAppConnectはラッパーにしか対応していない。

IBM MaaS360

「強み」
・システム管理者に便利な端末状況把握の機能を提供している。例えばポリシー違反や組織がさらされている脅威情報のダッシュボードなど。
・Windows 7、8、10、macOSに従来のクライアント管理ツールだけでなくEMM機能も提供している。
・この数年間、導入企業から他の製品よりMaaS360は導入が簡単という報告を受けている。

「注意点」
・SaaSのみでオンプレミスの提供がない。ただしメールやその他アプリケーションについてオンプレミスとのゲートウェイは提供している。
・WindowsやmacOSの高度な管理機能は、BigFixと組み合せる必要があり、完全統合されていない。
・MaaS360のiOSアプリは96MBもあり、他のEMM製品のiOSアプリよりかなりサイズが大きい。インターネット回線の遅いユーザは導入時に困難がある。

BlackBerry

「強み」
・個人情報管理(PIM)アプリは依然として強力で、セキュリティや遵法対応のPIMが必要な企業・組織では、EMM製品の中で最も多く採用されている。
・BlackBerry、WatchDox、Goodの歴史的経緯、社会的評価、セキュリティ機能から、セキュリティ重視の企業・組織にとって強力な製品である。
・BlackBerry Dynamicsは機能が豊富、サードパーティーアプリに対して機能が豊富で、セキュアで汎用的なSDKを提供しており、社内でアプリ開発をする企業・組織はSDK方式に価値を見出している。

「注意点」
・PCやMacの管理機能の実績がほとんど報告されていない。報告されている反応はおおむねプラス評価だが、少数の事例では、全般的なテストやパイロット展開を計画したいとしている。
・アプリ・ラッピング機能の提供を停止したが、Appdomeとして継続提供される。モバイルアプリ管理を計画している場合、この点を考慮する必要がある。
・IDaaSなどサードパーティーの認証サービスやアクセス管理のサポートは限定的。導入済みのIDaaSと互換性があるか確認が必要。

最後に、参考までにMicrosoftとCitrixの評価も見てみる。両社はEMM分野で2016年5月に広範な提携を発表しているため、その経緯の部分も含める。

Citrix XenMobile

2017年、XenMobileを独立した製品として提供しつつ、Microsoft Intuneの移行を検討している企業や導入済み企業にXenMobileを販売するため、Microsoftと大規模な提携をした。このシナリオでXenMobileは、Intuneが端末登録(entrollment)なし設定の場合の追加ツールと位置づけられる。Citrix社のコンテナ化アプリはIntuneのMAM機能でも管理できる。

「強み」
・Microsoft Intuneの影響力拡大に対応するため、XenMobileとの連携戦略をとることで、防御的なスタンスを取っている。
・Citrix Secure Mailはいくつかの競合他社製品の追加機能と比べてプラス評価を得ている。
・NetScalerのネットワーク管理、ShareFileのデータ処理とデータ保護と密に統合され、Citrixのアプリ仮想化、デスクトップ仮想化との統合で強い製品戦略を示している。

「注意点」
・iOS 10.xとAndroidをサポートする機能に現時点でギャップがある。
・とくに小さな組織でサポート問題が指摘されている。サポートや機能要望に同社経営層との直接連絡が必要になることがあるため。
・仮想化によりデスクトップやデスクトップアプリへの接続機能は強力だが、端末管理機能は他製品より弱い。

Microsoft
2016年に、同社EMS製品への注目が大きく拡大し、機能拡張にともない導入事例も増加。”Intune in Azure Portal Preview”としてAzureへの移行が2016年12月から始まり、2017年5月には一般提供開始。これが過去の同製品の弱みに対処するマイルストーンとなった。EA契約締結ずみの組織や同社を戦略的パートナーとする組織にはよく適合する製品で、Office 365導入組織、Azure AD導入済・導入予定組織に適している。

「強み」
・Office 365モバイルアプリと独自連携が可能、同アプリデータ漏えい保護機能を直接管理可能。
・250ユーザ以上の組織でEA契約が広がっており、Intuneはライセンス面で非常に魅力的。
・Azure ADとAdvanced Threat Protectionとの強力な統合で、豊富な遠隔セキュリティ監視が利用可能。

「注意点」
・初期設定とIntuneインストールの難しさが継続して報告されているため、Microsoft FastTrackから直接支援を受けることが推奨される。
・サードパーティーのIAM製品導入済みの場合、Intuneは現時点でAzure ADの統合のみをサポートしている点に注意が必要。
・Intuneはクラウドサービスとしてのみ利用可能で、オンプレミスやハイブリットのローカルアクセス機能はない。ローカルアクセスの必要な企業は他製品の検討が必要。