英語の勉強にアメリカドラマから音声を抜き出して、その中のサイレンス部分を削除したかったのでやり方を調べたらffmpegとsoxで簡単にできることがわかったので、その方法を紹介します。 動画から音声を抜き出す 一つの動画から音声を抜き出すときは ffmpeg -i input.mp4 -vn output.wav で抜き出せるので フォルダごとまとめて処理するには find . -name '*.mp4' -exec ffmpeg -i '{}' -vn '{}'.wav ';' でフォルダ内の全ての.mp4の動画ファイルから.wavファイルが抜き出されます。-vnが no videoのオプションです。 他にも-acodec copy として音声ファイルを変換せずに抜き出すこともできます。 無音部分を自動検出して削除 次に無音部分を自動的に認識して削除するのにsoxを使います。やり方によっては.wav以外も認識するようにできるようなのですが、うちの環境ではできなかったので.wavで処理をしています。 find . -name '*.wav' -exec sox '{}' '{}'_remove_silence.wav silence 1 0.1 1% -1 0.1 1% ';' で先ほど作った.wavファイルから無音部分が全て削除されました。 wavをm4aに ffmpeg で変換 wavのままだとファイルがでかすぎるのでm4aに変換します。mp3でもいいんですが、m4aの方が圧縮効率がいいのでこちらを使います。 find . -name '*_remove_silence.wav' -exec ffmpeg -i '{}' '{}'.mp3 ';' 以上で変換終了です。 まとめ この3行を一括変換したいフォルダにcdで移動して実行すればOKです。.wavファイルは手動で削除しときましょう。rm *.wavでもいいですが。 上記は全てcygwin上で行ってますがもちろんLinuxでもMacでも動くはずです。 find .

続きを読む

何故動かないか結構困ったのでメモ。 動かないもの find . -name '*.mkv' -exec bash -c 'echo "{}"' \; cygwin 環境、というかcmd.exeでcygwinの中のfindコマンドを呼び出してるとこれはエラーになっちゃいます。 理由 何故ならfindの\;の\は;をエスケープする役割なので、当然ここにはエスケープキャラクターを入れて置かなければならないわけですが、Windowsのcmdにおいて\はパス区切りであって何もエスケープしてくれません。 なのでcygwinのfindをcmd.exeやnyaosなどのWindows環境のシェルから使うときはcmd.exeのエスケープキャラクターの^を使ってこんなふうに書きましょう。 find . -name '*.mkv' -exec bash -c 'echo "{}"' ^; もしくはどちらの環境でも使える方法の find . -name '*.mkv' -exec bash -c 'echo "{}"' ';' を使うのもいいかもしれません。

続きを読む

今まではcygwinをインストールしたディレクトリを全部SugarSyncで同期して使ってたんだけど、 よくわからないままに色々入れてたら700MBぐらいあったので整理整頓することにしました。 どうするか? 既にインストールされてるcygwinのファイルを整理するのはめんどくさかったの新規インストールをすることにしたのはいいけど、何せパッケージ選択がめんどくさい。めんどくさいっていうか手動でやると必ず忘れてしまうので自動化したい。 そこでコマンドラインインストールの登場です! インストール方法 setup-x86.exe --quiet-mode -P util-linux,curl,wget,openssh,rsync,zip,tree -s ftp://ftp.iij.ad.jp/pub/cygwin/ --root %USERPROFILE%\cyg --local-package-dir %USERPROFILE%\cyg これでホームディレクトリ直下の C:\Users\ironsand\cygとかにインストールされる。 やめたパッケージ gccとか入れてcygwinでコンパイルして色々してると毎回ドツボにハマるので、もうそういうのはVirtualBox上のUbuntuですることにする。 rubyやpythonはWindowsのネイティブパッケージを使う。結局なんだかんだでそれが一番安定してる気がするので。 gitもcygwin用のパス名周りのエラーが鬱陶しくなることがちょくちょくあったのでChocolatey使ってcinst gitでインストールする方法に変更。 注意点 何故か 64bit バージョンは動きませんでした。理由はわかりませんが、こういう関係のソフトは32bit版のほうが今はまだ安定してる気がするし大量にメモリ使うこともないので気にしないことにします。 sshだとsshコマンドはインストールされないのでopensshを指定しましょう。 インストール後に/etc/passwdのホームディレクトリ設定を/home/usernameからcygdrive/c/Users/usernameとWindowsのホームフォルダに変更しておくとsshとかのコマンドの時に設定ファイルを自動的に読みに行ってくれるので便利。便利というかしないとちゃんと動かない。 あと環境変数にset HOME=%USERPROFILE%もどこかに仕込んでたほうが良いかも。 Util-Linux 何故かカレンダー表示のcalコマンドが見つからなかったので探してみたら、calのみのインストールはないらしい。 とりあえずutil-linuxが良さそうなんでこれを使う事にした。 tree Windows由来のコマンドなのにWindowsのtreeコマンドは階層指定もできない残念仕様なのでcygwinのを入れました。tree -L 2とかで階層指定できる。便利!

続きを読む

/var/www配下のパーミッションをどうすべきかについて情報が錯綜してて困ったので自分なりに調べたことをまとめておきます。 サーバープロセスが直接ファイルの変更を行うか、複数人管理かがどうかで結構変わるのでめんどくさくなってるみたいですね。 まとめ サーバープロセスがファイルの変更を行わず、sudo可ユーザーのみが変更 `/var/www` 以下は全て `root:root` 理由:apache, nginx などのプロセスが乗っ取られてもroot権限がないと改変できないため サーバープロセスがファイルの変更を行わず、sudo不可のユーザーも変更 `/var/www/site` を `ftp-user:root` に。 複数ユーザーがFTPでアクセスして書き込み権を持つなら `ftp-user:ftp-user`で適当にユーザーをグループに追加 サーバープロセスがファイルの変更を行う(WordPressなど)、 `/var/www/site` 以下の必要なフォルダ、ファイル_だけ_を `ftp-user:www-user` にして サーバープロセスのユーザーをwww-userに追加、apache所有には_絶対にしない_。

続きを読む

文字幅をしるために全角=2,半角=1で文字サイズが取得したかったので やり方 "日本語とEnglish".each_char.map{|c| c.ascii_only? ? 1 : 2}.inject(:+) Rubyばんざーーい! 参考 [2013/02/20/Rubyで全半角混在文字の文字幅を計算する方法 – ヽ(´・肉・`)ノログ][1]

続きを読む

db/seeds.rbにUser.createでencrypted_passwordを与えてDeviseのユーザーを作ろうとしたら失敗した。 原因 passwordが存在しないためにvalidationに引っかかってしまってる。 対策 passwordを平文で打てば解決するらしいけど、平文のパスワードは使いたくないのでバリデーションの方を無効化してしまいましょう。 User.new(email: someone@example.com).save(validate: false) でOKです。encrypted_passwordの取得方法は色々あるでしょうが、自分の場合は一度Deviseで作ってからそれをrails console使ってUser.first.encrypted_passwordを取ってきました。 参考 [Cannot create Devise account using rake db:seed for Rails 3.0 – Stack Overflow][1]

続きを読む

一度cygwinをインストールした後ならaptcygとかcygaptとか「あれどっちだっけ?」となるapt風味のインターフェースがあるんですが、初回インストール時の方法があまりなかったので書いておきます。 インストール方法 setup-x86_64.exe --no-admin -l %USERPROFILE%\cyg\package -P wget,ssh,rsync --download -s ftp://ftp.iij.ad.jp/pub/cygwin/ -q --root %USERPROFILE%\cyg これでc:\Uers\ironsand\cyg配下にwget,ssh,rsyncが入ります。32bit版でも引数の取り方は変わりません。

続きを読む

/usr/bin/env: ruby.exe: そのようなファイルやディレクトリはありません というエラーがwheneverで作ったcronのログとして出てきて困ってた。 bin/railsの実行権限とか/usr/bin/env ruby --version でちゃんとrubyが動いてるかどうか確認したりとか色々。 答え Windowsで作ったRailsプロジェクトだったので ruby<strong>.exe</strong>になってた。なんてことだ…。 解決策 bin/railsの一行目usr/bin/env ruby.exeの.exeを削除しておきましょう。ふぁっく。

続きを読む

mapcar で perform-string を使って文字列置換しようと思ってかなりハマったのでメモって置きます。 ダメな例 (mapcar '(lambda (s) (goto-char (point-min)) (perform-replace s "" nil t t nil)) '("foo[0-9]" "bar[0-9]")) これだと “foo1 bar2” は削除できるけど “bar2” と2個めの検索要素だけしかないときに削除できない 良い例 (mapcar '(lambda (s) (goto-char (point-min)) (perform-replace s "" nil t t t)) '("foo[0-9]" "bar[0-9]")) perform-replaceの最後の引数NOERRORをtに設定しておけば該当する文字列がなくてもスムーズに次に進んでくれます。

続きを読む

プロフィール画像

ironsand

語学好きのプログラマーです

Railsエンジニア

Yokohama