sed をやめて perl にしよう。perl sedのススメ 文字列置換・一括

sedは起動にも使われていたりシステム全体に関わっていたりするので、sedを削除したりリネームするわけにはいきません。sedはなくてはならないツールです。

ただ、正規表現の文法はperlでいいよね派なので。覚えることは減らしたい。方言は減らしたい。

zsh なので、.zshrcに


alias psedbak="perl -i.bak -pe"
#perl -i -pe 's/(123)/${1}456/' メモ
という記述をいれています。-iで上書き、-i.bakとするとその拡張子(bak)でバックアップが作られます。これは古典的SEDにはない機能です。

abc.txt には、Doctor という文字列があったとして、

$ perlsed 's/doctor/Dr./' abc.txt

で一括で変更できます。この記述内容をperlの正規表現で詳細に記せるので便利なわけです。sedの文法は忘れてもいいです。私はほぼ忘れたいと思います。

Dr.James Brown male
Dr.Ann Esex female
という医師名簿テキスト1.txt があって、男性にMr. と女性にMs.とつけ直すとすると
perlsed 's/^(Dr.)(.*? )(female)$/Ms.$2/' 1.txt
perlsed 's/^(Dr.)(.*? )(male)$/Mr.$2/' 1.txt


と2回繰り返せば複雑な記述をしなくても処理できますね。
一行でもいけるでしょう。

私が日常必要としているのはこの程度なのでsedでもいいわけですが、perlの作法だけ気にすればいいので結局楽かなと思っている次第です。

ubuntu/mint rename コマンドは、perlなので超便利。初心者こそ試してみるべき。

以前はこのRename(Perl/CPAN)だったのですが、現在のディストリビューションはGNUユーティリティがデフォルトではいっているケースが増えたような気がします。ですから、以下の記述はあくまでPerlで作られたRenameコマンドです。

一括でファイル名を変更したい。
置換には正規表現が使いたい。
エレガントに処理したい。(=楽したい)

その答えがrenameコマンドです。

mv使うとか、for で処理するとか。それはおいておきましょう。いまどきエレガントと言えるかどうかは別として。議論はしません。

さて、

abc.txt AAAabc.txt があったとして、

$ rename "s/abc/あいう/" *.txt

とすれば、2つのファイル名abc部分があいうに置換されます。

肝は、「強力なperlの正規表現」が使えるということです。これは美味しいです。

覚えておいて損はありません。

使いこなしのためにというよりむしろ泣かないために:

rename -v で成功結果を表示
rename -n では実際には置換しない。失敗しないためにはこれを覚えておきましょう。
-fでは同一名称でも強制的に既存ファイルを上書きします。

man rename でも確認できます。
実態は、perlのスクリプト。


[20150106]全角半角ESC入れ替える(0105 Ver.).desktop3

というファイルがありました。

$ rename -n "s/\[.*?\]//" *.desk*3
[20150106]全角半角ESC入れ替える(0105 Ver.).desktop3 renamed as 全角半角ESC入れ替える(0105 Ver.).desktop3

というように、ファイル頭の[2015うにゃ]が削除されていることがわかると思います。

rename -n 's/(\[.*?\])(.*?)(ESC)(.*?)/$3$2/' *.desk*3
renamed as ESC全角半角入れ替える(0105 Ver.).desktop3
となりますね。

というふうに、perlの基礎で対応できますから、便利です。

シェルはzshを使っています。bashとたまに動きが違います。

強引なインストール miniDLNA 1.1.4 deb 1.1.5 deb on Linux mint 17.3

よほどの理由がない限り、メンテされているパッケージを使うべきという原則を忘れずに。配布終了しました。

配布終了しました。以下記録用メモとして残します。

不具合があればアンインストールしてください。^^; 導入はクリックするだけ。環境は、14.04.1/17.1 64bit AMD64 です。その他設定については、これまでの記事をご覧ください。右上でminidlnaで検索するといいかも。

minidlna1.1.5についての補足

起動スクリプトがうまく作られないので(中にありません)、インストールするというよりも、既存1.1.2などでうまく動いていれば、minidlnad のみバックアップして、この中のminidlnadと差し替えてみてください。だめなら戻してください。1.0.0の頃からお使いの方は自分で起動スクリプトを作成したはずなので、それと同じ手順を踏めばよいのです。


通常インストールは、ubuntu 15.04では問題がないので、次のLTS(16.04,mint18)ではだいじょうぶかなと思います。追記:だいじょうぶでした。

バイナリを差し替えました。ファイル名は同じですが、コンパイル環境が少し違います。


Universal media server がトランスコードする場合(もしない場合も)はおすすめです。Windowsでは、WMPとUMSで、Linuxでは、MiniDLNAとUMSで、かなりハッピーな生活を送っています。とりわけUMSは毎月ブラッシュアップされていくのでとても楽しみです。


EACやそのケーススタディ(1) wav,ape,tak,tta,flac,+cue FLACに決めた. manjaro/ubuntu/mintの楽曲管理

可逆圧縮完全マニュアル(への道) の構成

  1. EACの実際とWindowsとの共存、文字コードの解決
  2. WAVE+CUEの多角的活用法の提示、Linuxで自由自在
  3. 可逆圧縮完全コントロール。ここまでできて「漢」
  4. DLNA/uPnP配信まで視野にいれよう。
  5. きっかけ

FLACで行こう::可逆圧縮ファイル・パーフェクトマニュアル(への道のり)

  • FLACで決まった。アップルもサポートした。
  • 可逆圧縮戦国時代もいちおうの結果を見た。FLACが制覇。
  • SONYは自社フォーマットを捨てた。

(4年ほど検討に検討を重ねた自分の結論::長い序文なので、最期に付記しました)

本論開始::事前作業として、EACをダウンロード、設定


(Exact Audio Copy本家より落とすより、CNET経由がいいかと個人的には思います。adwareがはいっている気がする。気のせいかも)

今日現在の最新安定版であるWINE 1.8で、EAC1.1がうまく動作します。ubuntuでもこのクラスの性能の取り込みソフトウェアはありますが、 これが楽かも。

インストール(簡単なので略)

取り込み(吸い出し) のために、日本人アーティスト、曲名、本人名日本語という条件のCDを使います。マルチバイト、ワイドキャラクターの文字列が含まれるってことですね。英語CDで試しても仕方がないので。インストール作業はWindows初心者用記事をググってください。というか、そのままで何も考えなくてもうまくいくと思います。

リッピングとCUEシート生成(簡単なので略)

(リッピング作業、省略:Windows初心者向けサイトをみてください。丁寧なページがいくつかありますが、普通に触れば誰でもわかるかと思います)

完了すると3つのファイルが出来上がっています。WINE 1.8 EAC1.1(当時)
  1. log 文字コード : UTF-16 ※取り込んだ時点でエラーがでなければ特に確認の必要はない。
  2. cue 文字コード : アスキー、Shift_JIS
  3. wav バイナリ・CDイメージ
(タグ付け、曲名ファイル化をしないのであれば、GUI、ドラッグ&ドロップで、WAV化できますけどね。あはは。そうなんですよね。実はカンタンなんです) 

これで以下の準備ができました。その前にチェック作業です。

Cueシートの文字コードは確認しよう。UTF-8推奨です。

一般に、正常取り込みの場合ログはみないですよね。飛ばします。

少なくとも、CueはUTF-8にエンコードを共通にしておくと何かとはかどります。たとえば、再生ソフトのAudaciousやCDemuは、CUEがシフトJISだと動作が正常ではありません。最新版のFLACONは、ShiftJISに対応していただけたようです(ロシア語完全対応のついでともいう)。日本語がSJISでも通るようになりました。これでかなり使い勝手が向上しました。ただ、統一しておくほうが楽です。
考えたくなければ、UTF-8にしておく。Windows下で使う場合もUTF-8のままで問題ありません。
改行コードは、LFにしなくても、だいじょうぶ。Winから使う場合とLinuxから使う場合を共通化したいのなら、UTF-8必須です。というか、クリエイター側がUTF-8でしか扱いづらい文字をバンド名や楽曲タイトルに使う時代に変わってきています。いつまでもEUCやShiftJISでは文化的に立ち遅れてしまいます。

さて、UTF-8推奨という注意さえ守ればどんな環境でも母艦セット:Cue+WAV(flac)が空気のように扱えるはずです。蛇足ですが、文字コードはWindows7でも問題が出る場合もあるみたいですね。(詳しくはしらんけど) UTF-8にとにかく統一しましょう。たぶんそれがハッピーかと思います。

Linuxでコマンドで文字コードを扱う例
nkf -g *.cue  文字コード調べる

nkf -w --overwrite *.cue UTF-8で上書き。

上書きしなくても、*.utf-8.cue にしておけばいいです。

実際にEACを使ってみる

上原れなさんのアルバムがamazonから届いたところなので。具体でいきましょう。

Windowsなら当職は、SONY MediaGO でリッピングします。iTunes は使いません。
そして、Linuxなので、WINEでEACを起動して、1ファイルリッピングを行います。
クリックしていくだけなので、作業は省略します。

結果です。

FILE "上原れな - Emergence.wav" WAVE
のWAV形式をFLACにしてみます。たったこれだけの青コマンドです。
$ flac *.wav
flac 1.3.0, Copyright (C) 2000-2009, 2011-2013  Josh Coalson & Xiph.Org Foundation
flac comes with ABSOLUTELY NO WARRANTY.  This is free software, and you are
welcome to redistribute it under certain conditions.  Type `flac' for details.
上原れな - Emergence.wav: wrote 479090446 bytes, ratio=0.698

FLACが古いですね。ま、いっか。

以下リストの7行目を確認してください。これはFLACではなくて、WAVです。アプリによっては、そのあたりを自動的に処理してくれますが、合わせておくほうがよいですね。またフォーマットによっては、Cueシートを圧縮ファイルに埋め込むことができ、1ファイル管理も可能ですがそれは本稿では触れません。それこそ、埋め込むCUEの文字コードの問題が再浮上します。

FLACにしたので、Cueの頭の方 この場合は、7行目のFILEではじまる行に修正が必要です。具体的には、
FILE "上原れな - Emergence.flac" WAVE
にしておきます。日本語がはいっても構いません。赤いところだけ

     1    REM GENRE JPop
     2    REM DATE 2014
     3    REM DISCID DA0F340E
     4    REM COMMENT "UTF-8 Cue"
     5    PERFORMER "上原れな"
     6    TITLE "Emergence"
     7    FILE "上原れな - Emergence.wav" WAVE  <<実ファイルと一致させる。WAVの場合。
     8      TRACK 01 AUDIO
     9        TITLE "届かない恋'13"
    10        PERFORMER "上原れな"
    11        INDEX 01 00:00:00
    72      TRACK 14 AUDIO
    73        TITLE "さよならのこと"
    74        PERFORMER "上原れな"
    75        INDEX 00 59:32:52
    76        INDEX 01 59:34:69

新しい7行目は次のようになります。

     7    FILE "上原れな - Emergence.flac" WAVE

freedbで正確ですね。感謝です。Gracenoteでなくてもってかんじかも。

WAVのままハンドリングしていくのもありです。30%圧縮なので大差ないんじゃないの?!って見方もできますよね。本稿を描き起こした時期よりSSD価格は1/6以下になってますから、圧縮しなくてもいいんじゃない、ってわけです。これを「Cue/WAV(またはFLAC)」のふたつのセットを母艦セットと便宜的に名づけて(2)以降に続きます。

FLAC音楽サイト増えました。SONY、オンキョーなどが販売もし、あー、めんどくさいので……

FLACになります。FLACで決まりました。
Windows10は標準(2016年7月)。アンドロイドも標準
Linuxも標準(たぶん)。appleも2017年9月に対応。

自分はこう決めたのでした(10年はこれでいきます)。ちなみに、マルチメディアフォーマットとして関連付けられていますので、どのフォーマットのファイルでもクリックで再生できますね。いずれせによ可逆形式であればWAVに戻せますから。そこがいいところ。

終わり::2017年秋追記 FLACで決まりました。アップル陥落。2025年ぐらいまで独自路線でいってほしかった。ネタにできなくなった。とにかくみんなで標準的なフォーマットを使うのが楽ちんですからね。

以下に続きます。初心者の方はこれで十分です。パワーユーザーの方は次をぜひどうぞ。 

  1. EACの実際とWindowsとの共存、文字コードの解決
  2. WAVE+CUEの多角的活用法の提示、Linuxで自由自在
  3. 可逆圧縮完全コントロール。ここまでできて「漢」
  4. DLNA/uPnP配信まで視野にいれよう。
  5. きっかけ

miniDLNA/readyMedia 美しいソートのための実例 1.1.4 編集ポイント

force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title で、ソートを綺麗にする。

#機能が1年程度前から追加されている。manにはない。sfのdiscussionで見つけた。

# always force SortCriteria to this value, regardless of the SortCriteria passed by the client 綺麗にソートされますね。昔に戻った。(^o^) 以下の行のみ、

#/etc/minidlna.conf の最下行に単純付加してください。

force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title



おまけ

# * "A" for audio (eg. media_dir=A,/var/lib/minidlna/music)

# * "P" for pictures (eg. media_dir=P,/var/lib/minidlna/pictures)

# * "V" for video (eg. media_dir=V,/var/lib/minidlna/videos)

media_dir=/var/lib/minidlna



#テストするには、↑だけ修正しちゃえば動作確認には十分です。または、デフォルト指定先にファイル動画、音声、写真を放り込む。

#書式が変わっている。1行で列記。以前は複数行でした。

album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg/Front.jpg/front.jpg/Back.jpg/back.jpg


1.1.4 パッケージ試験的に置いてみました。15.04では不要です。インストール候補に復活しています。

fcitx が中国語メニューになっておいしい。困った。

以下は過去の話で、現在はじぶんのところでは不具合はありません。記録のために残しておきます。2016-06-26現在、fictxで快適です。一気によくなりましたよね。不安は消えました。皆様のおかげです。

過去稿


fcitx が中国語メニューになってしまう。とほほ。全削除して一個づつ入れていく修正をとってましたが、よい方法を見つけました。

単純に、

sudo apt-get remove fcitx-ui-qimpanel

これで修正できました。ありがとうございます。中国語メニューで下からふたつ目が再起動です。同じ漢字文化圏ですが想像つきませんね。

参考:
http://blog.goo.ne.jp/ikunya/c/156b5116d1aae9603428679c1a5fbee2 
Linux Mint 17.1に見るCJKへの無理解

ibusに戻したけど。あはは。

H.265 HEVC 動画を Ubuntu/Mint/Debianで再生する。14.04LTS not 15.04 later

LTSを使う限り(ubuntu 16.04LTS、Mint 18 がリリースされるまで)は、導入が必要です。

※追記:2017/06/14。なぜかアクセスが減っていくのならわかるのですが、増えてきているので誤解を与えているのではないかと心配です。ここで言っているのは

  • 「再生する」であって、HWデコーダー(mesa/vdpau/vaapi)を有効にするという話ではないです。
  • vdpau/vaapi は、必要なドライバを組み込んで、再生ソフト/VLC/MPVなりで有効にすることが必要です。 別の話です。
  • そして、大事なこと。そのグラフィックチップは、hevcに対応していますか? ハードウェア再生支援はGPUの機能です。機能がなければ、ソフトウェアデコードです。
  • ちなみに、当方の Radeon R7 360は、H264_10bit、HevcやVP9に対応していません(=ハードウェアデコードが使えない)。ドライバによりますが、たいがい、ソフトウェアデコードのほうが安定していたります。だから悔しくないのです(嘘)。

継続性が求められていないのであれば、来年18.04をいれるか、現在の安定LTS 16.04にしましょう。それが一番らくな方法です。 あえて14.04を使う必要はありません。


※追記:16.04LTSでは、ビデオ(TOTEM)が廃止でVLCが標準っぽいですね。

追記:MPVは、必ず launchpadのバージョンを使いましょう!! とても重要です。PPA追加なしだととても古いバイナリなのでまともじゃないかんじです。だめな場合は検討してみてください。当方のRADEONの問題なのかもしれませんが。

追記:H.265、HEVC再生 on 14.04LTS、Mint 17.x を想定した内容です。15.04,15.10ユーザーは、気にしないでいきましょう。新規インストールしてみて確認しましたが、Linux Mint 17.3でも必要です。

また、14.04.2では下記の緑化現象もおきないようになっていますので、アップデートしてみるのが先ですね。正常に再生できている方は、以下を読むのは時間の無駄です。

蛇足:本稿を書いた当初はメインの環境では、mpvを使ってなかったのですが、現在はsmplayerでもmpv指定で使っていますし、mpvが自分の中でのデフォルトメディアプレイヤーになってしまいました(Windows環境でも使えますし)。僭越ながら、mpv使ってない方には強くオススメしておきます。適度なGUI、キーボード操作もいけて、コマンドラインからの起動「も」素敵です。

14.04LTSでの対応例


新規にターミナル(端末)を開きます。ubuntu系は以下を同時押し。CTRL+ALT+T
http://www.libde265.org/blog/2014/02/22/gstreamer-4k-h265-hevc-plugin/

sudo apt-add-repository ppa:strukturag/libde265
sudo apt-get update

VLCを使う場合

sudo apt-get install vlc-plugin-libde265

Totem(標準でいうところの「ビデオ」)を使う場合

sudo apt-get install gstreamer1.0-libde265

以上4行入力すると視聴可能になります。
 

mpvとsmplayerを導入。PPA登録バージョン


sudo add-apt-repository ppa:mc3man/trusty-media
sudo add-apt-repository ppa:mc3man/mpv-tests
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install mpv
sudo apt-get install smplayer

https://launchpad.net/~mc3man/+archive/ubuntu/trusty-media

これでHEVCが再生できる環境が整いました。

※2行目を書き忘れていました。訂正しました。


※先日アルファ版16.04を試したところ、標準サポートではありませんでした。参考までに。
※16.04 beta2で確認したかんじだと、TOTEMがなくなって、VLCのみになっています。追加でmpvとvlcのDailyBuildを入れて、HEVC再生ができるみたいですが、まだいろいろと不具合がありますね。正式リリースが期待です。

補遺::当職は、SIMなしにしたNexus6をまだだいじに使っているので、HEVCにエンコードして容量を確保したりしていますが、やっぱりH.264がよいと思いますし、この記事は冒頭にも書きましたが、過去のモノです。現在では何も考えなくてもどのディストロでもデフォルトでHEVC再生は可能だと思います。一部例外はありますが。


How to Install miniDLNA/readyMedia 1.1.4


改稿:2015年2月13日

1.1.2をダウンロード。Wクリックで導入。
http://ftp.slackware.com/pub/ubuntu/pool/universe/m/minidlna/minidlna_1.1.2+dfsg-1~ubuntu14.04.1_amd64.deb 

1.1.4をコンパイル。バイナリ minidlnadをコピー。(または、探す)

sudo mv minidlnad /usr/bin

これで再起動すればOK。その前に、minidlna.confを編集しましょう。

以下から落とすほうがいいかも。


----

miniDLNA 1.1.4の導入と設定、DB強制更新

minidlnaってなあに?! と思った人は、3年前のエントリー記事をよろしければどうぞ。
https://help.ubuntu.com/community/MiniDLNA (全体設定、個別ユーザー設定)
※素直に、メンテナー提供版をいれておくのが楽でいいと思います。2015年2月11日現在では、1.1.2 です。以下は、最新版1.1.4 を自compileしてdpkgする場合の話。compile手順などは省略します。

0)前提


基本的にメンテナーのバージョンをいれておいたほうがハッピー。ubuntu 14.04系(debianでも同じだった。mintでも当然同じ)でインストール候補に見つからない場合は、launchpadから導入。1.1.4で半年使ってますが十分安定しているし高速です。前バージョンも同様でした。最高のuPnP/DLNA環境です。

デコーダー類さえ整備すれば、H.265もFLAC(標準かつ、PCMレベル及びハイレゾレベル)もOKです。唯一の問題、ディレクトリ、ファイルのソートオーダーが気に入らないってことぐらいですね。
(追記:miniDLNAソート問題は解決しました)


2)minidlna 1.1.4 2015年2月5日時点での最新版


ひとつ前のその前のバージョンあたりから、minidlna がminidlnad に変更になっています。これまでの環境引き継ぎだと、initスクリプトを1文字修正しなければなりません。自動的に修正されないはずです。

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="DLNA/UPnP-AV media server"
NAME=minidlna
DAEMON=/usr/bin/minidlnad
PIDDIR=/run/$NAME
PIDFILE=$PIDDIR/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
DEFAULT=/etc/default/$NAME

また自分でコンパイルした場合も、/usr/local/sbinなど意図しない場所に配置されていないかは確認しておきましょう。単純にdaemonの位置が食い違わなければいいわけです。

前バージョンの実行ファイルが残っていないかはチェックしておいた方がいいかも、混在していても気にせずにminidlnaは動作します。(d付きとdなし。d付きがある環境にはdなしは不要なので削除)

DBの更新の問題(新規メディアが更新されない)

inotify=yes 「yes」にしていてもうまくいかない場合、DBディレクトリをRAMに展開して起動毎に更新するようにすると問題がなくなりました。この使い方で2年以上問題ありません。

具体例

sudo gedit /etc/minidlna.conf で以下を追記または修正
db_dir=/tmp/minidlna

sudo gedit /etc/fstab で以下を追記または修正
tmpfs  /tmp  tmpfs  defaults,size=256m  0  0

OS起動毎に、DBが新規に作成されますが、所要時間はほとんど気になりません。なお、MS-Windows MediaPlayer12 でも同じ現象は起きます。その場合管理者でたしか3つぐらいのファイルを削除しDB更新すればOKです。マルチブートならLinux側でマウントして削除。
詳細はググッてみてください。Windowsは詳しくないので。

3) おまけ


sudo、root権限で、リスキャンしたりってのもなんかアレだなと長いこと考えていました。滅多に触る必要はないとはいえど。
標準で、minidlna ユーザー、グループなわけですが、そこはいじらずに、

minidlnaの一時的ログイン停止・ログイン不可を解除、パスワード付与でいこうかなと思っています。

ユーザーminidlnaは、sudoなどが実行できない限定ユーザーです。そこも変えません。

もともと実害も何もないわけで、DLNAクライアントから、machine:user と見えるか、machine:rootと見えるか、それだけの違いです。こだわっても仕方ないかも。笑)

friendly_name=ReadyMedia 1.1.4 ともできるし、そもそも、
notify_interval=89 というふうに監視間隔を短くすればいいだけ。
つまりやはりこだわっても仕方ないということですね。

4)おまけ2


ぶっちゃけ。minidlnadをminidlnaにリネームすればいいんじゃね?!
ですよね。これまで(数年前)通り使えます。笑)

追記
1.1.4 パッケージ試験的に置いてみました。