LoginSignup
0
0

More than 1 year has passed since last update.

忘れそうなコマンドの備忘録

Last updated at Posted at 2022-06-21

動画の情報を取得

1つの動画の長さを取得

ffprobe [動画ファイルのパス] -show_entries stream=duration -v error -hide_banner -of csv=p=0:s=, -select_streams v

streamwidth,height,r_frame_rateなどと変更するとそれぞれ幅,高さ,fpsも取得可能.
stream=width,heightのようにカンマで区切ることで同時に取得することも可能.

ちなみにffprobeだけだと以下のように様々な情報が出力される.
スクリーンショット 2022-02-10 221813 (1).png

ここからgrepでDurationを切り取る場合は,

ffprobe [動画ファイルのパス] 2<&1 | grep Duration

として標準エラー出力を標準出力に変更しなければならないことに注意.

カレントディレクトリ以下の全ての動画の長さを取得

find ./ -name "*.mp4"  -exec ffprobe {} -show_entries stream=duration -v error -hide_banner -of csv=p=0:s=, -select_streams v \; 

HMDB51の訓練用と検証用のデータ数の計測

訓練用と検証用のスプリットがいくつか存在する場合

HMDB51のようにラベルごとにスピリット情報が書かれたファイルがある場合,つまりラベル「brush_hair」の第1スピリットの情報がbrush_hair_test_split1.txtに書かれているような場合を考える.

スクリーンショット 2022-02-11 013525 (1).png
上のようにファイルパス,スピリット番号(0が訓練でも検証でもないデータ,1が訓練データ,2が検証データ)となっている.
ラベルごとではなく全てのラベルで一括して動画数を取得したいので,以下のコマンドを使用する.

cat *_test_split1.txt |cut -d " " -f 2| sort |uniq -c

補足:cutでスピリット番号のみを切り取った後にソートし,uniq -cで重複をカウントする.

以下は出力結果.
スクリーンショット 2022-02-11 014506 (1).png

テキストファイルを操作してラベル番号を変更

ファイルパスとラベル番号が紐づいているファイルのラベル番号をラベル名の昇順に変更する

スクリーンショット 2022-02-10 232153 (1).png
上のようにファイルパス,ラベル番号でファイルのラベルが指定されているテキストファイルがある場合(注:実際のファイルを5000行おきに出力したファイル)について考える.今のままではラベル番号がラベル名の昇順になっていないので昇順にする.
ファイルがラベルごとにラベル名のディレクトリに分かれていることを利用する.

方針

  • ラベル(ディレクトリ)名でソートする
  • ラベル番号を0から付けて,ラベル(ディレクトリ)名が変わったら+1する

使用したコマンドは以下

cat labeled_file_path.txt |sort|awk -F "/" 'BEGIN{name=" "} BEGIN{id=-1} {if(name==$2){id+=0}else{id+=1}} {print "/" $2 "/" $3 "," id} {name=$2}'|cut -f 1,3 -d ","

補足:awkを使って1行毎にラベル名を保持する(コマンドではname=$2に相当).
1行毎にラベル名(コマンドでは$2に相当)とname(この時点で1行前のラベル名となる)が一致しているかを確認し,一致していない場合のみラベル番号(コマンドではidに相当)を+1する.ラベル名を保持するためにawkの区切り文字は/にしたため,このままでは元のラベル番号まで出力されてしまうためcutで区切る.

以下は実際の出力
スクリーンショット 2022-02-11 000510 (1).png

追記:
awkの区切り文字は複数指定できるので,以下のコマンドの方が簡潔.

 cat labeled_file_path.txt |sort|awk -F "[/,]" 'BEGIN{name=" "} BEGIN{id=-1} {if(name==$2){id+=0}else{id+=1}} {print "/" $2 "/" $3 "," id} {name=$2}'

サーバ間でデータを移動

大量のファイル移動はrsyncを使う

rsyncを使う理由

  • 変更分を検出して差分のみを転送してくれる
    • 転送処理が途中で中断されても途中から再開できる
  • サーバ間でデータの転送が行える

以下はコマンド

rsync -av [コピー元] [コピー先]

オプションについて
a: 元のパーミッションを保持
v: 処理中の経過ファイル名の表示

注意点はコピー元のディレクトリのパスの最後に/を付けてしまうと,指定したディレクトリ以下のディレクトリがコピー先のディレクトリ以下に転送され,コピー元で指定したディレクトリ自体が保存されない.(Tab保管を使うと/まで入ってしまうのでやりがちなミス)

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0