ファイル名の全角スペースや不要な文字列を自動削除

TS録画した際に、アニメ~という風にタイトルとは関係の無い文字列や、全角のスペース付きで録画される事があり、それが邪魔だったので自動削除するというお話です。

我が家ではchinachu+mirakurunで自動録画を実施していますが、録画した際に<アニメギルド>やアニメA・などの不要な文字列が録画されたタイトルに入っているのが気になり、何となく最初は手で消していました。

しかし、録画するファイルが増えるにつれてどんどん面倒になってきたので、なんとかして自動で削除出来ないかという事で色々と調べて回りました。

我が家の録画サーバーはLinuxですので、基本的にLinuxによる方法を実装しています。

当初はWindows向けも検討しましたが、Windowsだと色々と不便だったので諦めました。

では早速方法を記述します。

renameコマンドを使おう

sedコマンドでも出来るらしいのですが、何かうまく行かない事があったので、最終的にrenameコマンドをインストールして使っています。

閑話休題、実際に動かしているコマンドはこちらです。

sudo find . -name "*アニメA・*" | sudo rename 's/アニメA・//g' *.ts

この例の場合、findコマンドでアニメA・というタイトルを見つけて、アニメA・だけを削除してくれます。

対象となるフォルダは、find . の部分になりますが、このコマンドを実行する前に、cdで対象のTSファイルが置いてある場所をカレントとしています。

例:録画場所がNASの場合、/mnt/nasでLinux上でマウントしておき、事前に cd /mnt/nasを実行してから上記のコマンドを実行します。

ですので、実際にはこうなります。

#!/bin/sh

cd /mnt/nas
sudo find . -name "*アニメA・*" | sudo rename 's/アニメA・//g' *.ts

このシェルスクリプトを作成して、定期的にcronで実行するという算段です。

ちなみに、これだとアニメA・しか削除出来ないので、力技でこういう風にしています。

#!/bin/sh

cd /mnt/nas
sudo find . -name "*アニメA・*" | sudo rename 's/アニメA・//g' *.ts
sudo find . -name "*<アニメギルド>*" | sudo rename 's/<アニメギルド>//g' *.ts
sudo find . -name "*アニメの神様*" | sudo rename 's/アニメの神様//g' *.ts
sudo find . -name "*アニメ *" | sudo rename 's/アニメ //g' *.ts
sudo find . -name "* *" | sudo rename 's/ //g' *.ts
sudo find . -name "*TOKYOMX1*" | sudo rename 's/TOKYOMX1/TOKYO MX1/;' *.ts

全角スペースの削除を実行して、文字列に無駄な空白が残らないように調整し、空白を削除し過ぎたTOKYOMX1をTOKYO MX1に最後にリネームをします。

これをやらないと、この素材はTOKYO MXの素材だと認識してくれないプログラムがあったからです。

これで一通りはファイル名が綺麗になります。

<余談>ファイル名を置換した経緯

そもそも何故、ファイル名の置換を実施しようと思ったかと言うと、録画したTSファイルから生成される成果物(MP4)の音声がズレている場合がたまにあり、その場合に改めて作成をする為にffmpegにファイルを渡すという事をしていた際に、ファイル名に全角のスペースがあると上手く引数として渡せないという事象があり、このような力技を取るようになりました。

上記の引数が上手く渡せないのはWindows環境だったので、もうこれもLinuxにしてしまうかという思いもあります。