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にコミットしてしまったときの対処法
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