Snippets / Tips

プログラミング関連のスニペット・Tipsとか.項目ごとに大きくなったら分離していく

自分用のメモなので汚いです.Sorry.

Shell Script

ファイルをfindして諸々処理

for file in $(find $target -maxdepth 1 -type f | sort); do 
    $ZCAT $file | 
    # replace '\t' to tab
    sed -e 's/\\t/\t/g' |
    # grep target row
    grep -E "HOGEHOGE" |
    # print
    awk -F'\t' '{ \
        gsub(/.*HOGE/, "", $15); \
        gsub(/HOGE.*/, "", $15); \
        gsub(/\/.*/,"",$21); \
        print substr($3,0,10) "\t" $15 "\t" $21 \
    }' |
    # sort
    sort -k3 | uniq |
    # count
    awk -F'\t' '{print $1 "\t" $3}' | uniq -c | sort -nr |
    # output
    awk -F' ' '{print $2 "\t" $1 "\t" $3}'
done

引数の数からヘルプ表示

set -eu
if [ $# -ne 1 ]; then
    echo "usage: ./filename.sh [file | directory/ ]"
    exit
fi

unameに応じて変更

ZCAT="zcat"
if [ "`uname`" = "Darwin" ]; then
    ZCAT="gzcat"
fi

PATH設定

export PATH=$PATH:[path]

ファイルに対して実行

for file in $(find . -maxdepth 1 -type f); do
    # TODO
done
# name指定
for file in $(find . -maxdepth 1 -name '*.png'); do
    cp $file $file.tmp
done

Convert

for f in $(find . -maxdepth 1 -type f -name 'file_*.bgra' | sort); do
convert -format "BGRA32" -size 1280x720  -depth 8 $f "${f%.*}.png"
done

MySQL

csv export

SELECT * FROM users
INTO OUTFILE '/var/lib/mysql-files/output.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"';

Git

git checkout tag

git merge 取り消し

git reset --hard ORIG_HEAD

コンフリクト

上:マージ先の変更 下:マージしようとした変更

ブランチ名変更

git branch -m <古いブランチ名> <新しいブランチ名>
# 今開いているブランチをリネームする場合は、単純に新しいブランチ名を指定するだけ
git branch -m <新しいブランチ名>

Gitでブランチを作るのを忘れてmasterにコミットしてしまったときの対処法

Qiita参考記事

git add を取り消す

git reset HEAD sample.txt

FFmpeg

時間指定切り出し

ffmpeg -ss [開始地点(秒)] -i [入力する動画パス] -t [切り出す秒数] [出力する動画パス]

# 動画の先頭から30秒を切り出す時
ffmpeg -t 30 -i input.mp4 out.mp4

# 動画の45秒目から15秒を切り出す
ffmpeg -t 15 -ss 45 -i input.mp4 out.mp4

# 最後から -sseof でマイナス時間を指定する。書式は hh:mm:ss[.xxx], ss[.xxx]
# 既定値では最後から指定時間だけ出力される。
ffmpeg -sseof -<seconds> -i input output

# -t も併用することで時間の調整も出来る。
ffmpeg -sseof -<seconds> -i input -t <seconds> output

drawtext

# 経過時間を書き込む
# 最後の00はマイクロ秒ではなくフレーム数
ffmpeg -i input.mp4 -vf "drawtext=fontfile=/System/Library/Fonts/Helvetica.dfont: timecode='00\:00\:00\:00': r=30: fontsize=48: fontcolor=black@0.8: x=2:y=2:" out.mp4

png

# 動画to png
ffmpeg -i input.mp4 -vcodec png -r 30 "./%04d.png"

# png to 動画
ffmpeg -r 30 -i %04d.png -r 30 -an -vcodec libx264 -pix_fmt yuv420p video.mp4

concat

ffmpeg -f concat -safe 0 -i <(for f in input/*.mp4; do echo "file '$PWD/$f'"; done) -codec copy output.mp4

bitrate

ffmpeg -i input.mp4 -b:v 100k out.mp4

psnr

ffmpeg -i base.mp4 -i compare.mp4 -filter_complex psnr out.mp4

usb video

ffmpeg -f v4l2 -input_format h264 -framerate 30 -video_size 1920x1080 -i /dev/video0 -c:v copy test.mp4

image

ffmpeg -f v4l2 -i /dev/video0 -vframes 2 test%3d.png

loglevel

‘quiet’
‘panic’
‘fatal’
‘error’
‘warning’
‘info’
‘verbose’
‘debug’

resize

ffmpeg -i input.png -vf scale=320:240 output.png