投稿

5月, 2020の投稿を表示しています

メモ:ffmpeg (mp4→mp4)ストリームをそのままコピーするシェルスクリプト

この記事は ffmpegを使用して、映像/音声/字幕だけをコピーする作業が必要だったので色々勉強しているうちに辿り着いた解答を残すためのものです。 その時々で仕様等が変更されるでしょうから、この記事を確認された時点では少しの改良が必要かも知れません。 MEPG2-TSの場合、ffmpegコマンドでの出力が変わってくるので、cutコマンド・trコマンドをいじる必要があります。 もしかしたら、libassオプションを追加しないと動かないかも知れません・・・ 前提条件 ・FreeBSD 12.1-RELEASE/amd64 ・ffmpeg 4.2.2 (multimedia/ffmpeg) コードと解説 #!/bin/sh : 一応使用方法ですが、コマンドに対してmp4ファイルへの引数が必要です。 : : : とりあえず、ディレクトリとファイル名(拡張子なし)、拡張子を分離。 : コピー先のファイルパスを生成するため。(ffmpegコマンドでエンコード時に指定する) FILE_DIR=$( cd `dirname ${1}`; pwd ) FILE_TITLE=$( basename ${1%.*} ) FILE_EXT="${1##*.}" : : : 映像のマッピング。 ENCODE_OPTION_VIDEO="" for map in $( ffmpeg -i ${FILE_DIR}/${FILE_TITLE}.${FILE_EXT} 2>&1 | grep "Stream" | grep "Video" | cut -f1 -d '(' | cut -f2 -d "#" ) do     ENCODE_OPTION_VIDEO="${ENCODE_OPTION_VIDEO} -map ${map} -c:v copy" done : : : : 音声のマッピング。 ENCODE_OPTION_AUDIO="" for map in $( ffmpeg -i ${FILE_DIR}/${FILE_TITLE}.${FILE_E...

メモ:pidによる簡易的なシェルスクリプト実行制御

#!/bin/sh : : このスクリプトのpidファイルの場所を定義する。 :  basenameコマンドにより絶対パス記述時ディレクトリ部分を除去。相対パス記述時は影響なし。 :  同様のことは${0##*/}でも可能 pidfile="/var/run/`basename${0%.*}`.pid" : : pidファイルは下記のようなプロセスIDの文字列長最大5文字の改行コードを含まないテキストファイルとする。 : # cat ${pidfile} :   process-id[EOF] : : process-idは1-65535までのプロセスIDを示す。 : : pidファイルがあるかないかで制御を分ける。 :  pidファイルがあれば、記述中のプロセスIDについて、${0}と同一コマンドのプロセスか確認する。 if [ -e ${pidfile} ] then         :         : ${pidfile}がある場合、${pidfile}からプロセスIDの情報を抽出する。         run_pid=`cat ${pidfile}`         :         : すでに走っていると思われるこのスクリプトのPID : ${run_pid}         :         : psコマンドを使用して、このスクリプトの名前:${0}を含むプロセスをすべて抽出し、${run_pid}と比較する。         for chk_pid in `ps axww | grep ${0...

メモ:FreeBSDにてNFSやFTP、外部ディスクに退避できない環境下における、緊急で空き容量を確保したい場合

FreeBSDにてファイルシステムいっぱいにデータを詰め込むと、外部ディスクのマウントやネットワーク接続ができなくなるときがあるが、削除できるデータがない、ということが極稀にあるので、削除できそうなファイルについてまとめたもの。 ※実行の結果、不利益が生じてもすべて自己責任ということでよしなに。 〜割とカジュアルにできるもの〜 Ports Collectionを利用したインストールを常用している場合、workディレクトリ残置で容量を食っていることがある。これを削除する。 コマンド: make -j`sysctl -n hw.ncpu` -C /usr/ports clean カスタムカーネルや環境変更を行っていた場合は、そのワークデータを削除する。具体的にはmake buildkernel、make buildworldの作業データ。特に重要なものではない限り削除対象。 コマンド:  rm -dR /usr/obj 〜ここからはちょっと危ないので、具体的な削除コマンドの記述は控える〜 メッセージログ。gzファイルは消しても良いかもしれない。 場所: /var/log Ports Collectionのカタログ。容量が十分に確保されたらportsnap fetch extractで再展開する。ただし/usr/ports/distfilesに必要なソースコードが保存されている場合は再フェッチとなるため、必要に応じて削除から除外したほうが良い。 場所: /usr/ports 現システムで実行中のFreeBSDバージョンのソースコード一式。fetch ftp://ftp.freebsd.org//pub/FreeBSD/releases/`sysctl -n hw.machine`/`sysctl -n hw.machine`/`sysctl -n kern.osrelease | cut -f1,2 -d '-'`/src.txz 後、tar xvzf src.txzで復元することができるので割とカジュアルに削除できるかも・・・ 場所: /usr/src Ports Collectionのカタログファイル類。gzファイルを削除することができる。 必要な場合は、portsnapコマンドではなくsvn...

FreeBSD 11.3R/i386 でxrdp 0.9.13を動かす

とりあえず走り書き程度に。 FreeBSD xrdpサーバ、何年か前にOSCでセミナーがあった時に家でもやってみようかなと思っていたのだが、その当時は接続まで至らなかったので諦めていた。今年に限っては外出しにくい大型連休ということで、とりあえずチャレンジしてみたらあっさり接続できました的ななにか。 ・注意 xrdp 0.9系以前を使用しているシステムで0.9系を適用する場合、startwm.sh/sesman.ini/xrdp.iniの記法が大きく変わっているため、先んじてxrdpの削除とともに、/usr/local/etc/xrdp の設定ファイルはすべて削除したほうが身のためです。 ・サーバ側OSバージョン等の情報 # freebsd-version -k 11.3-RELEASE-p7 # freebsd-version -u 11.3-RELEASE-p8 # sysctl -n hw.machine_arch i386 11.3R/12.1R以降であれば、amd64でも問題ないと思います。 ・xrdpサーバの動作に必要なソフトウェアのインストール等 # pkg info -a | cut -f1 -d' ' | grep xrdp pulseaudio-module-xrdp-0.4_1 xorgxrdp-0.2.13_2 xrdp-0.9.13,1 基本的に、pkg install xrdpで上記がインストールできます。 ・xrdpサーバで動作させるデスクトップ環境のインストール等 # pkg info -a | cut -f1 -d' ' | grep -e openbox -e xterm -e setxkbmap openbox-3.6_6 openbox-arc-theme-20170104 setxkbmap-1.3.2 xterm-353_1 ・サーバ側の/etc/rc.confの設定 # cat /etc/rc.conf | grep xrdp_ xrdp_enable="YES" xrdp_sesman_enable="YES" ・ログイン後の設定(特に行ごとの解説はしないが、日本語ロケ...

使い方メモ:Captain Stag UF-16 スライドミニトーチ

最近、近所のホームセンターの閉店セールがあったのでちょっと覗いてみたらスライドミニトーチが700円ぐらいで売っていたので衝動買いした。 Captain Stag UF-16 スライドミニトーチ https://www.captainstag.net/products/UF-16.html 元々そのホームセンターで買ったミニトーチを使っていたのだが、常用するには着火率が悪いことと、頻繁に使うことからガスがすぐ枯渇するため、他に安く済ませられるものがないか探していたのである。 http://www.shinfuji.co.jp/sfb/products/pt-14ffskcr/ 1年ぐらい使っていたが、火力も十分で使いやすい。プラを曲げたりスプレー用の細いプラパイプを曲げたりするために重宝した。 ここからは使い方のメモである。 着火方法>着火スイッチを押し込むだけである。一般的なライターを使ったことがあればわかると思うので書かないが、強いて言えばLOCK機構があるのでそれが解除されているかどうかを確認することぐらいである。あせって着火する事態はおそらくそうないと思われるが、押してもスイッチが重ければ一度確認してみる。 火口スライド>着火前も着火後も伸ばしたり戻したりできる。安全上着火前に行ったほうが良い。 火口>使用前も使用後も触らないほうがやけどすることはないでしょう。 火力調整>着火前にマイナスドライバーなどで底面にそれっぽいつまみを調整する。着火性も含めて最大火力にした。開梱時の火力は1cm程度、最大火力では3cm程度出る。 補充するガス>とりあえずまずは100均のガスボンベ(ライター用、レジ横においてあることが多い)を一つ買っておくと良い。重要なのはプラ冶具のほう。それがあればカセットボンベからの補充もできるようになる。カセットボンベの口のまま補充しようとすると正しい方法でも霧散するので意味がない。 補充方法>下記の通り。 1. 周囲に火気がないことを確認する。特に口に加えているものは注意。 2. 着火スイッチをロックする。 3. 火口を下に向けて補充口を上に向ける。(燃料のガスは空気より重いので上下逆では補充できない) 4. ガスボンベの口が合うか確かめる。合わなければプラ冶具を使う。 5. シュッと音がす...

なにか終わったらRingRingしたい話

FreeBSD 12.1-R4/amd64で、ある程度時間がかかるスクリプトを実行している中で、終わったら適当な音を出して知らせてくれる機能をお遊び半分で調べて書いたもの。 条件は、追加Portsは一切なし。FreeBSD 12.1-R4/amd64インストール直後でも実行可能であること。サウンドカードの設定はここでは書かないが、デバイスを認識し音声出力ができること。 通常であれば、mpg123で適当な音声を流してみたり、soxコマンドを使って音を生成しつつそれをスピーカに出力する方式を取ると思うが、今回はそれができない。Linux ALSAのようなaplayコマンドの搭載もないので、FreeBSD標準の状態では音声を出力するコマンドはないことになる。しかしFreeBSDハンドブックを読んだことがあれば、 音声出力のテストコマンドとして、 # cat /dev/random > /dev/dsp を投入することで雑音が流れることはご存知だと思われる。またスピーカーから音を出すことにこだわらなければ、beep音としてspeaker.koを使える。これは音程をつけてメロディを流すこともできる。 まずは、手っ取り早く実現できそうなspeaker機能を試す。標準ではカーネルモジュールをロードしておかないと/devディレクトリには見えない。なので、下記のコマンドをrootユーザで実行する。 # kldload speaker すると、/dev/speakerというデバイスが現れる。このデバイスに向かって音階の記号を流す。 # echo "CDEFGAB" > /dev/speaker CDE・・・は馴染みづらいが、昔は音階がラ:Aから始まり、シ:B、ド:Cとなっているという話で、記法が分かればそれほど理解に苦労しない。 参考: https://duckduckgo.com/?q=%E3%83%89%E3%83%AC%E3%83%9F+CDE # echo "CDECDEGEDCDED" > /dev/speaker 上記のコマンドを実行すると、小学校で習う簡単なメロディが流れるはずだ、ったのだがspeakerはパソコンによっては聴こえないことがあるらしい。beep音が流れるようにBIOS/...