昔録った動画のアスペクト比を間違えて設定してしまってたので一括で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でも使えるのに引数がめんどくさすぎるせいであまり情報がないのがもったいないですよね。
rake task で長時間起動するため排他処理をしておかないと複数起動してしまう物があったので多重起動を禁止にしました。
namespace :foo do task :update_all => :environment do |task| process_count = `ps -ef | grep #{task.name} | grep -v grep | wc -l`.to_i next if process_count > 1 end end でOK。呼び出し部分をメソッド化とかしたかったけど、上手くいかなかったのでとりあえずこれで。タスクのブロック引数としてtaskをちゃんと書いておかないとtask.nameが使えないので注意しましょう。
参考 [ShellScript – Rakeタスク実行時、プロセス起動数を確認して排他制御する – Qiita][1]
task :do_something do return if some_condition? do_job end というように条件に合致しない時に returnを使って処理を抜けようとするとこんなエラーになります。
LocalJumpError: unexpected return これは rake task がメソッドではなくブロックだから起きるので next を使ってやりましょう。それで抜けれます。
task :do_something do next if some_condition? do_job end ちなみにnextは気持ち悪いんのでせめてbreakを使いたいと思ったんですが、それだと
LocalJumpError: break from proc-closure になってしまいます。
参考 [ruby – How do I return early from a rake task? – Stack Overflow][1]
ackで検索してdirnameでディレクトリ名を取得して、rm -rfでまとめて消してます。
ack-grep -l foo | xargs dirname | xargs rm -rf
やり過ぎはダメだと言われても、やっぱり基底クラスの拡張は楽しい!
class Array def duplicated select{ |v| count(v) > 1}.uniq end end 使い方 a = [3, 5, 3, 4] => [3, 5, 3, 4] [15] pry(main)> a.duplicated => [3] [16] pry(main)> a = [3, 5, 3, 4, 5] => [3, 5, 3, 4, 5] [17] pry(main)> a.duplicated => [3, 5] 参考 [Ruby: How to find and return a duplicate value in array? – Stack Overflow][1]
Rasberry Piに初期設定をして電源を挿すだけでノートパソコンから操作できるようにはしたももの、電子工作!!な事を全然やってないし、やり方もわからなかったのでAmazonでそれっぽいスターターキットを買ってみました。
基礎知識 LEDから出てる日本の先端のうち長いのがアノード(電流が入ってくる方)、短いのがカソード(電流が出て行く方)。
GPIO(General-purpose input/output)のそれぞれのピンの役割は以下のとおり。単純に3.3Vや5Vの電圧のところもあるし、Ground(GND)、それにGPIOがある。
つまり全体のこともGTIOと呼ぶし、一部のその機能をもつピンもGPIOと呼ぶらしい。めんどくさい…。
[][1]
B+のモデルにはもっとピンがあるんですが、1から表示されてる部分までは同じらしいです。ちなみに後ろのハンダ付けが四角いのが1だそうです。……なにそのわかりにくい基準。
[][2]
抵抗には向きはないが強さは線の色で決まるので覚えるのが大変。
ブレッドボードは基礎知識がないとつらいのでこちらを読んでおいてください。
http://jsdiy.web.fc2.com/avr_7segclockbb/
LEDをチカチカさせる 最初に載せたキットの解説サイトが[こちら][3]ですので、そこを参照します。
配線方法 ブレッドボードの配線がこんなんで、
[][4]
ラズパイの配線がこんなんで
[][5]
コードがこうです。解説サイトのRubyを修正しています。
port = 24 File.write("/sys/class/gpio/export", port) sleep 0.2 # 書き込みエラー回避 File.write("/sys/class/gpio/gpio#{port}/direction", "out") (1..10).each do |i| File.write("/sys/class/gpio/gpio#{port}/value", i % 2) sleep 0.2 end File.write("/sys/class/gpio/unexport", port) Lチカさせる 以上が上手くいっていたら ruby ~/led_blink.rbでスクリプトを実行したらLEDがチカチカと5回点滅するはずです。やったー!!
できなかった人は一つ一つ手順を確認していきましょう〜。
それではみなさん楽しい Raspberry Pie 生活をお過ごしください。 ノシ
form_tagを使えばブロック内の全体を返してくれるかと思ったのですが、そうではないらしく最終行だけ返ってきてしまいます。
具体例 つまり
def generate_form(path) form_tag(path) do input_tag submit_tag end end だとフォームそのものと最終行のsubmit_tagだけが表示されてその他の入力フィールドが一切表示されません。
対策 なので以下のように毎行Stringを保存しておきましょう。何でこんな仕様になってるんだろう…?
def generate_form(path) form_tag(path) do str = input_tag str += submit_tag str end end 参考 [ruby on rails – How do I use form_tag from within a helper? – Stack Overflow][1]
[初めてのラズベリーパイ 【購入からSSH接続まで】][1] で SSH を使ってラズベリーパイに接続ができたのですが、DHCPでローカルのIPアドレスを振り分けてる時は振り当てられてるIPアドレスを調べるためだけにラズパイにキーボードとディスプレイをさして作業する必要がでてくるので非常にめんどくさいことになります。
Avahi そこでAvahiというソフトを使えば hosts ファイルがなくてもローカルネットワーク内の他のPCからIPアドレスではなく名前で参照できるようになります。。Macの共有機能などで使われている Bonjour と同等のものなんだとか。
インストール /etc/hostname に保存されてる名前で接続できるようになるので初期設定のraspberrypiという名前を別のものに変更しておきましょう。
sudo vi /etc/hostname Avihaのインストールはいつもどおりapt-getでインストールできます。
sudo apt-get -y install avahi-daemon スタートアップに登録 このままでは起動時に自動的にAvahiが立ち上がってくれませんので
sudo update-rc.d avahi-daemon defaults でスタートアップにも登録しておきましょう。
※ 追記 次回使おうとしたら動かなくなってしまってました。 /etc/hostsを編集しないといけなかったようです。
127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 127.0.1.1 raspberrypi となっていますのでraspberrypiの部分を変更した名前に変えておきます。
使い方 インストールが終わったらクライアントからssh pi@raspberry.localのような形で pi@自分で決めた名前.localで接続できるようになります。
それではみなさん楽しい Raspberry Pie 生活をお過ごしください。 ノシ
参考 [RaspberryPi – Raspberry Pi を無線 LAN 経由で SSH 接続できるようにする – Qiita][2]
日付の配列がある時に
pry(main)> dates = (1..10).map{|i| Date.new(2015,i) } => [Thu, 01 Jan 2015, Sun, 01 Feb 2015, Sun, 01 Mar 2015, Wed, 01 Apr 2015, Fri, 01 May 2015, Mon, 01 Jun 2015, Wed, 01 Jul 2015, Sat, 01 Aug 2015, Tue, 01 Sep 2015, Thu, 01 Oct 2015] 現在の日付よりも新しく、かつ一番近い日付を選択したい時の処理
pry(main)> Date.today => Fri, 13 Feb 2015 pry(main)> dates.find{|date| date > Date.today} => Sun, 01 Mar 2015 findメソッドはやっぱり便利!