音声つき単語帳の単語と例文とかを切り出してランダム出題する形にしたかったのでまずsoxを使って無音部分で音声を分割しました。 $ sox in.wav out.wav silence 1 0.3 0.1% 1 0.3 0.1% : newfile : restart これでout001.wavなどのように連番でファイルが保存されます。初めの0.3が音声の前の部分の無音の長さで、後ろの0.3が音声の後に続く無音部分の長さです。 参考 [sox fails to split files – Stack Overflow][1]

続きを読む

昔録った動画のアスペクト比を間違えて設定してしまってたので一括で16:9にしたかったのでやり方を調べました。 方法 $ ffmpeg -i movie.mp4 -c copy -aspect 16:9 movie_out.mp4 とこんな感じで出来ます。ちなみにある程度新しいffmpegじゃないとちゃんと動かないので新しいのを入れましょう。あとコンテナがアスペクト比の設定に対応してないともちろんダメです。 ちなみに私はWindowsで動かしました。

続きを読む

ffmpegを使って複数の音声と字幕から一つの動画を作成する方法。 ffmpeg.exe -i video.mp4 -i de.mp4 -i de_sw.mp4 -i fr.mp4 -i ru.mp4 -i de_co.mp4 -i de.srt -i en.srt -map 0:0 -metadata:s:v:0:0 language=ger -map 2:0 -metadata:s:a:1:0 language=ger -map 1:0 -metadata:s:a:0:0 language=ger -map 3:0 -metadata:s:a:2:0 language=fre -map 4:0 -metadata:s:a:3:0 language=rus -map 5:0 -metadata:s:a:4:0 language=ger -map 6:0 -metadata:s:s:0:0 language=ger -map 7:0 -metadata:s:s:1:0 language=eng -c copy -scodec mov_text out.mp4 コマンドの解説 まず入力ソースに使う動画は一つ一つに-iオプションを付けて呼び出します。 そして-map の横についてる数字は何個目の引数として呼び込まれたか:その動画や音声のどのストリームかを表しています。そして-metadataを使って音声や字幕の言語を指定するのですがこの時に映像・音声・字幕でそれぞれ別のストリームとして言語を設定しないといけません。これがわからずにかなりの時間を費やしてしまいました…。 ちなみに-acodec copy -vcodec copyという使い方をされてる人が多いですが-c copyで一括指定できます。 知っとくと便利なこと -t 数値で出力する長さを選べるのでちゃんと合成で来てるか確認したいだけの時は-t 180などして簡単に動画の確認だけすると良いでしょう。 ffmpegはなんでもできるし、どのOSでも使えるのに引数がめんどくさすぎるせいであまり情報がないのがもったいないですよね。

続きを読む

cygwinはWindows上で作成されたファイルを全て755の実行可能ファイルとして扱ってしまうので、そのままgitで扱うとすべてのファイルが実行可能権限を持ったなんとも危なっかしい構成になってしまいます。 対策 $ git config core.filemode false でfilemodeの変更を無視するように設定しておきましょう。 参考 [Windows Git users: Please check your core.fileMode setting – Google グループ][1]

続きを読む

何故動かないか結構困ったのでメモ。 動かないもの 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とかで階層指定できる。便利!

続きを読む

Digital OceanではOSを気軽にDropletで作成して、気軽にポイポイ捨てれるのが売りですが、そのせいで sshで新しく繋ぎ直したホストに繋ごうとすると @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the RSA key sent by the remote host is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx. Please contact your system administrator. Add correct host key in /home/ironsand/.ssh/known_hosts to get rid of this message.

続きを読む

wget と curl

「wgetかcurlで既にファイルが存在してたら上書きしないし、該当のディレクトリがなかったら自動的に生成するにはどうすればいいのかな?」という疑問をStack Overflowで検索! ディレクトリが存在しない時に自動的に作成する [linux – wget -O for non-existing save path? – Stack Overflow][1] 回答意訳 curlならできるよ! curlの方が強力なツールだからね! 既にファイルが存在した時に上書きしない [curl – Don't download or overwrite file if exists – Stack Overflow][2] 回答意訳 wgetならできるよ! wgetの方が強力なツールだからね!           今ここに新たな「きのこたけのこ紛争」が巻き起ころうとしている!!

続きを読む

プロフィール画像

ironsand

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

Railsエンジニア

Yokohama