2021年7月31日土曜日
動画ファイルの一覧を作成し、ファイルサイズ順に並べ替えて出力するスクリプト
カレントフォルダ以下の動画ファイルを並べ替えて出力します(対応する拡張子は @mvext で指定)。 実行結果
2021年7月17日土曜日
VLC用のプレイリストを作成するスクリプト
サブフォルダを一つ一つリストからクリックして展開すると利用可能になりますが、あまりにも使い勝手が悪いので、その手間を省く方法を考えてみました。
以下のスクリプトを実行すると、XSPF と言う XML形式のプレイリストが出力されます。
出力される内容をファイル保存し、VLC で再生するとサブフォルダの内容もはじめから展開された形で再生が可能になります。 実行例
2021年7月9日金曜日
自宅PCのグローバルIPアドレスをメール送信するスクリプト
Postfix で Gmail へ送信できる環境を整えておき(OSX postfix 等参照)、グローバルIPが変更される度にメールを送信してくれるスクリプトになります。
スクリプトを実行すれば curl が http://ifconfig.co/ にアクセスしてIPアドレスを取得し、その結果をコンフィグファイルに書き出します。
その結果が変更されればメールを送信します。
crontab に登録しておけばアドレスが変更されても自宅PCにアクセスすることができます(まだ未検証ですが)。
2020年1月3日金曜日
libcurl を用いた画像のPOST(multipart/form-data or raw 形式)
multipart/form-data にて Base64化された送信(CURL_PostFormMedia)と、バイナリ形式での送信(CURL_PostRawMedia)をそれぞれ切り替えて利用することが出来ます。
サーバー側の実装例も合わせて記載(CGIを実行する際の引数で受信する形式を切替)。
multipart/form-data で送信する際には、ファイルが埋め込まれたフィールド名(<input type="file" name="file" />)を送受信側で合わせる必要があります。
サーバー側の form 内に、<input type="file" name="file"> と記載されている場合には name で指定されている "file" というフィールドに画像データを埋め込んで送信する必要があります(下記実装例では、CURL_PostFormMedia 関数の引数 fdname で指定しています)。
サーバ側実装例(perl/cgi)
サーバー側では GET で画像ファイルをPOSTする form を表示し、自分自身に画像をPOSTする実装となっています。また、このCGIに直接画像をPOSTする際には引数にて(postimage.cgi?name=sample.jpg&type=raw) と指定すればバイナリ形式での受信も可能となります。 実行結果
2019年1月1日火曜日
フォントを指定して文字列画像の作成(libgd):絵文字対応
文字列中の絵文字を、twemoji にて用意されている絵文字画像で置き換えながら描画していきます。
指定されたフォントで割り当てられていない文字や絵文字は「?」で表示されます。
また、UTF-8 文字列を UNICODE化(32bit)し、Freetype により一文字ずつ描画可能な文字かどうかを判定しています(FT_Get_Char_Index)。
実行ファイルと同じパスに NotoSansCJKjp-Regular.otf と、twemoji からダウンロードした絵文字画像を配置してください。 実行結果 ALIGN=center/left/right の順に作成した結果。
2018年12月29日土曜日
UTF-8文字列をUNICODE化し、絵文字判別
絵文字かどうかの議論は色々あるかと思いますが、twemoji 内に格納されている絵文字を基準としています。
→ emoji-png フォルダに png として保存し、ファイルを検索してチェック
絵文字に対応していないフォントを用いているUI等では、絵文字が表示されない場合がありますので、絵文字の部分は twemoji 内の png で置き換えて表示したりすることができます。 実行結果
2018年9月23日日曜日
Broadcast Wave Format に対応した WAVE 音声の読み込み
Broadcast Wave Format (BWF) は、マイクロソフトのWAV音声ファイルフォーマットの拡張であり、映画やテレビで使われているノンリニアデジタルレコーダーの録音フォーマットとしてよく使われている。WAVEファイルの読込み/再生 での例題で WAVEファイルを読み込んだ際、ヘッダ部分がうまく取得できないWAVEファイルが存在していました。
中身を見ると、フォーマット用のチャンク部分に「fmt 」ではなく、「bext」と記載されているファイル形式のファイルでした。
PCMの音声データ部分のチャンクは「data」から始まり、PCM音声部分の抜き取りは正常に動作していたのですが、元の音声の形式がどのようなものかを正常に取得できていないので困ることになります。
なので、この「bext」のチャンクが含まれる Broadcast Wave Format の WAVE 形式にも対応した形で読み込み部を修正しています。
Broadcast Wave Format(BWF)は CM 位置へのスキップ等に対応した CUE というイベント情報等を含められるようですが、今回はヘッダ部分のパースと WAVE の保存形式を正常に認識するための修正のみを行っています(CUE が入った音声サンプルが手に入らないため)。
また、4GBの壁にも対応した修正になっています(本来はWAVE64というフォーマットがありますが、WAVEに4GB以上のデータが含まれるもの)。
WAVEファイルのヘッダ構造体は32bitですのでその部分で4GBの壁となります。
WAVEで保存するICレコーダー等で4GB以上の録音となる場合にこういった不具合が発生することがあります。
data チャンクの長ささえ取得できれば音声部は正しく保存されていますので、その部分から読み込みを開始すればデータ部は正しく取得できます。 実行結果