カテゴリー別アーカイブ: シェルスクリプト

mkvをmp4に変換するバッチスクリプト

mkv2mp4_flac1

よく使う割には手順が多くて面倒なのでバッチを作った。

h.264 + FLACなmkvファイルをmp4に変換する。
中身のFLACファイルはmp4には入らないので、AACに変換。
可変フレームレート対応。

使い方など
mkv2mp4_flac1 -v 0 -a 1 file.mkv [file2.mkv] [file3.mkv] …
事前に、ファイルのトラック番号をffmpegなどで調べる。
-v < ビデオトラックID> -a < オーディオトラックID>
ファイルは指定しただけ処理される。

続きを読む mkvをmp4に変換するバッチスクリプト

wgetでベーシック認証をかける方法

こんにちは、最近スノボによく行っている岡田洋一です。

スノボに行ったりしている間はサーバが自動で処理をしてくれたりする機能、いわゆるバッチ処理があるんですが、こちらがエラーになっていたのでその対処。


shell> wget -O - http://www.example.com/action.php
--2014-01-22 19:23:10-- http://www.example.com/action.php
Resolving www.example.com (www.example.com)... 192.168.1.1
Connecting to www.example.com (www.example.com)|192.168.1.1|:80... connected.
HTTP request sent, awaiting response... 401 Authorization Required
Authorization failed.

見ればベーシック認証でコケている様子。前はどこからでもアクセスできたんですが、今はアクセス制限をしているのでその対応ですね。

wgetのオプションを調べると –userと–passwordで設定する様子。


shell> wget -O - --user=username --password=somepassword http://www.example.com/action.php

HTTP request sent, awaiting response... 401 Authorization Required
Reusing existing connection to www.example.co:80.
HTTP request sent, awaiting response... 200 OK
Length: 11206 (11K) 
Saving to: `STDOUT'

というわけでうまくいきました。

LDAPで利用するパスワードの期限が切れた

1. LDAPのクライアントになるホストにsshしたら怒られた

LDAPのクライアントになってユーザ認証を行っているホストにsshでコマンドを流したら怒られた。


shell> ssh host command
WARNING: Your password has expired.
Password change required but no TTY available.

エラーの内容からすると、”あなたのパスワードは期限が切れています。そしてパスワードの変更をしたいけれど、プロンプトがないからできません”となっている。

確かにsshでコマンドを直接流しているのでTTYがない。なのでパスワード変更ができない。他の方法でTTYが存在するログインをしてみた。


shell> login
login: hogetan
Old Password:
New Password:
Retype New Password:

こっちでは正常にパスワードの変更を求められた。さてココで、古いパスワードを入力し新しいパスワードを入力し、パスワードの変更を正常に行った、かに見えたんだけれど、再度ログインすると同様にパスワードの変更を求められる。

コレはおかしいぞ、ということでちょっと調べてみた。

続きを読む LDAPで利用するパスワードの期限が切れた

FreeBSDでNFSマウントされたホーム+zshでcompinitするとログインが激遅

FreeBSD 8.2でも 9.0-RC3でも同じだけど、NFSでマウントされたホームディレクトリで、zshをログインシェルにしていて、zshの設定でcompinitをしていると、ログインがめちゃくちゃ遅い。ログアウトも遅い。
あまりスマートじゃないかもしれないけど、NFSがいかんのならローカルにzshのファイル置けばいいじゃない。と
.zshrcに以下の6行を書き加えてみた。

autoload -U compinit
if [ "$OSTYPE" = "linux*" ]; then
  compinit -d ~/.zcompdump_${HOST}
else
  compinit -d /usr/home/$USER/.zcompdump  
fi

保存先のディレクトリは作っておかないといけないけど、別になくてもログインできなくなったりはしないっぽい。

転送量に制限をかけてバックアップをとりたい

1. 転送量多いとISPから怒られちゃうよ!

現在、インターネットを通じてファイルのバックアップを行っている。夜中などのトラフィックが比較的すいている時間帯を選んでバックアップを行っている。

バックアップの内容はいろいろなもので、そしてそこそこ大きい。バックアップするデータ量は日によってまちまち。で、このバックアップデータが結構でかいので、バックアップにちょっと頭を悩ませている。というのも、利用しているISPが一日の転送量に制限をかけているからだ。

制限といっても一定量に達したら自動的に帯域を絞る、というものではなく、なんと警告メールがくる。あなた帯域使いすぎですよ、って。正直怖いッス。

で、なにかよいバックアップ方法がないだろうかと考えてみた。

まず、バックアップの特性について考える。

  • バックアップデータは大きい。結構大きい。数GB単位。
  • ファイルは分割されている。一つのファイルはおおよそ数MB ~ 1GB。
  • 転送量は一日ごとに上限値が決まっている。そしてそれはユーザが意識して制限量以下に抑える必要がある。
  • 転送量制限が一日ごとなので一日ごとにバックアップをとりたい
  • バックアップしたいデータ、例えば1日目に1日目の増分の50%、二日目には一日目の増分の残り50%と二日目の増分100%、のように、遅れてバックアップを取っても良い。ただし増分が一日の転送量を超えてしまうと終わりなきキューになるのでダメだけれどね。

上記の条件の内、とくに一日目、二日目という風にバックアップを分けてもよい、という条件があるので、コレを利用したrsyncを使ったバックアップ方法を考えてみた。

続きを読む 転送量に制限をかけてバックアップをとりたい

mp4ファイル内のh.264トラックのエンコードオプションをLinuxとかで表示

mp4の中にh.264トラックが入っているファイルで、コマンドラインからエンコードオプションを表示したかったのでメモ。
表示した所で、ffmpegで使う場合とかx264で使う場合とかvlcで使う場合とか、使ってるライブラリは同じx264でも、引数はバラバラ。

strings /path/to/file.mp4 | grep -m 1 x264 | sed -e "s/\ /\n/g"

若干見やすくするために空白文字を改行に置換してる。
あと、このコマンドだとx264でエンコードされた物以外は無理。x264以外でエンコードされたファイルを持ってないけど。

WindowsとMacのSafariでブックマーク共有

Windows7上のSafariとMac OS X 10.7上のSafari(共にバージョン5.1)で、ブックマークを共有したかったのでやってみた。
クラウドだとか便利なソフトとかあるようだけど、何もインストールせずに実現してみた。

今回はメインで使ってるWindows7側のブックマークを、Macでも使いたかっただけなので、Mac側での変更は消える仕様。

まず、Windows7側でバッチファイルを書いた。(yubirdとかの部分はユーザ名なので適当に)

CD C:\Users\yubird\APPDATA\Roaming\Apple Computer\Safari
COPY /y Bookmarks.plist Z:\Safari\
COPY /y History.plist Z:\Safari\
COPY /y TopSites.plist Z:\Safari\

Zドライブは、Linuxのサーバで立ててるSambaをネットワークドライブとして割り当ててる。

で、このバッチファイルをスケジュール
スタートメニュー->アクセサリ->システムツール->タスクスケジューラ
で、タスクを作成。

適当な名前をつけて
トリガーは「アイドル時」、操作は「プログラムを開始」で作成したバッチファイルを指定、条件設定はそのままで作成。

次にMac側でサーバからファイルをコピーさせる

ホームに適当なディレクトリを作成してrsyncさせる。
crontab -eで、スケジュール作成

*/30 * * * * rsync -av --delete server_address:~/Sync/Safari/ ~/Sync/Safari/

あと、エディタがvimの場合は.vimrcに

set backupskip=/tmp/*,/private/tmp/*

を追加しておいて、crontab編集時のtmpファイル作成をさせないようにしないと、編集が反映されない。

で、Mac側のブックマークファイルをシンボリックリンクにする(当然Safariは終了させておく)

cd /Users/yubird/Library/Safari
rm Bookmarks.plist
rm History.plist
rm TopSites.plist
ln -s ~/Sync/Safari/Bookmarks.plist
ln -s ~/Sync/Safari/History.plist
ln -s ~/Sync/Safari/TopSites.plist

で、恐らく問題無し。

syslogで管理してるファイルのファイル名を変更した

syslogで管理してるファイルのファイル名を変更した。

ホストA上のプログラム -> ホストA上のsyslog -> ホストB上のsyslog-ng

という順序で受けているファイルのファイル名を変更した。

まずは受け側をうまく受けてやるように、ホストB上のsyslog-ngをconfいじって変更。syslog-ngを再起動。

次いでホストA上のプログラムでsyslogのプログラム名を変更。プログラムを再起動。

syslogも適当に変更して再起動。

この段階でホストB上にファイルが作られてログが流れてきたことを確認。

# cat now.log>> old.log ; mv old.log now.log

ってやって、作業中に流れたログをこれまでのログとまとめてやる。

最後にログのファイル名を変更する必要がある。

%find ./ -name ‘hogehoge*’ -print | sed -ne ‘s/.\/hogehoge-httpd_backend-\(.*\)/sudo mv hogehoge-httpd_backend-\1 httpd-\1/p’ | sh

確認しながらやろう。