Evernote Edit

NET/Evernoteに移動。

ペースター Edit

ジャンル的にはクリップボード拡張。選択テキストの加工もできる。大文字小文字などはありがちだが,かなり凝ったことができる。例えば,・正規表現によるテキスト加工(多段も可能=パイプ),・選択テキストを外部Perlスクリプトに渡し加工して貼り付け(UTF-8渡しも可能),・選択テキストを計算式として計算,などが可能。

  • 文章に繰り返しがあり,リストに直せることが(人間には)明らかな場合に,リスト化(この例ではPukiWiki形式)。但し,デリミタがない場合は困難。このスクリプトは,選択文字の先頭文字をデリミタにしてリスト化する。
    繰り返しテキストをリスト化 | [@ s/(.)(.+?)[ ]+(.+?)(?=\1|$)/-$2\n--$3\n/g]
    
  • このままだとゴミが残ることもあるので(多段化)。
    繰り返しテキストをリスト化 |
    [|]
    	[@ s/(.)(.+?)[ ]+(.+?)(?=\1|$)/-$2\n--$3\n/g]
    	[@ s/ +\n/\n/g]
    	[@ s/(-+) +/$1/g]
    /E
    
  • 英文の整形。
    英文を整形 | [@ s/\b(.{50,70}) (?![., ])\b/$1\n/g]
  • TSVをPukiWikiの表組みに変える(外部スクリプト)。
    while (<>) {
    	s/([\d,]+) ([\t\n])/$1$2/g; # エクセルの数値セルをコピーすると余計な空白が付くので除去。
    	s/\t/|/g;
    	s/[\r\n]+//;
    	print "|$_|\n";
    }
    

日本語 Edit

SJIS外の文字も正常に処理できる。PU2で呼出せばUTF-8で渡せる。ただ,Perlスクリプト内でのエンコードには多少注意が必要。

まず,Perlで日本語を扱う基礎知識が必要。これはペースターの問題ではない。UTF-8で渡しても内部表現になっているわけではないので,デコードが必要だし,エンコードも必要。これは普通の日本語処理プログラミングと何ら変わりはない。

use utf8;
binmode STDIN, ":encoding(utf-8)";
binmode STDOUT, ":encoding(utf-8)";
これが簡便でよい。
use encoding "utf8";一部情報が欠落することがある。

Anki Edit

Quick Edit

カードにフィールドを追加する Edit

  1. 「ツール」
  2. 「ノートタイプを管理」
    1. まず,フィールド名を追加する
      • 対象を選び,「フィールド」コマンド
    2. 次に,カード上での表示を設定
      • 「カード」コマンド

ffmpeg Edit

TMPGEncを使わずにこれを使うのは自動化が目的だから、スクリプトを使う。私はPerl (Active Perl)を使う。

#!/usr/bin/perl
use utf8;
# NHKニュース7.ts のエンコード専用
my $serviceID = 1024;
my $fname = qr/^(.+NHKニュース7)\.ts$/;

# .tsのあるディレクトリで実行。
# GUIから直接実行なら、終了後画面が閉じるのでSTDERRを保存する。


use strict;
use warnings;
use Encode;
my $cp932 = find_encoding('cp932');
# http://gihyo.jp/dev/serial/01/modern-perl/0032?page=2
# 画面に出すならこのbinmode STDERR ...はwell works
# binmode STDERR, ":encoding(cp932)"; # ('cp932')はNG
# ファイルに出す
close STDERR;
open (STDERR, '>>:encoding(cp932)', 'ffmpeg.log') or die $!;
$| = 1;

# current directory
use Cwd;
my $wd = Cwd::getcwd();
opendir my $dh, $wd or die "$wd:$!";
my @files = readdir $dh;
closedir $dh;
for (@files) {
	$_ = $cp932->decode($_);
	# 正規表現リテラルで検討するにはdecode必須。
	next unless /$fname/;
	# ファイル名をencodeしないと対外的な操作できない。
	my $infile = $cp932->encode($_);
	my $outfile = $cp932->encode($1) . '.mp4';
	my $mtime = (stat($infile))[9];
	# 動画時間を取得し、何倍速でエンコードできたか表示する
	my $info = qx(ffprobe "$infile"  -hide_banner -show_entries format=duration);
	# STDOUTにこれだけ返り、$infoに入る。
	# [FORMAT]
	# duration=1808.072933
	# [/FORMAT]
	my $duration = 0;
	if ($info =~ m|duration=([\d\.]+)|g) {
		$duration = $1;
	}
	my $stime = time;

	qx(ffmpeg -y -hide_banner -nostats -init_hw_device qsv:hw -i "$infile" -vf "scale=1280:720" -global_quality 25 -c:v h264_qsv -ac 2 -map 0:p:$serviceID:0 -map 0:p:$serviceID:1 "$outfile" );
	# タイムスタンプ変更
	utime($mtime, $mtime, $outfile) if -e $outfile;

	my $passed = time - $stime // 0;
	my $sname = $cp932->decode($0); # $0はPerlの特殊変数でスクリプト名
	printf STDERR "$sname: %.1f times\n",$duration/$passed if ($passed > 0);

}

音声多重を速度を変えてエンコードするには2passにする。

#!/usr/bin/perl
use utf8;
# BS世界のドキュメンタリーのエンコード専用
# 速度を変えるため2回変換している。そうしないと音声多重放送では音ずれを
# 防げないようだ。
my $serviceID = 101;
my $fname = qr/^(BS世界のドキュメンタリー.+)\.ts$/;

# .tsのあるディレクトリで実行。
# GUIから直接実行なら、終了後画面が閉じるのでSTDERRを保存する。

use strict;
use warnings;
use Encode;
my $cp932 = find_encoding('cp932');
# http://gihyo.jp/dev/serial/01/modern-perl/0032?page=2
# 画面に出すならこのbinmode STDERR ...はwell works
#binmode STDERR, ":encoding(cp932)"; # ('cp932')はNG
# ファイルに出す
close STDERR;
open (STDERR, '>>:encoding(cp932)', 'ffmpeg.log') or die $!;
$| = 1;

# current directory
use Cwd;
my $wd = Cwd::getcwd();
# glob関数はWindowsでは正しく動かないという指摘あり(未確認)
opendir my $dh, $wd or die "$wd:$!";
my @files = readdir $dh;
closedir $dh;
for (@files) {
	$_ = $cp932->decode($_);
	# 正規表現リテラルで検討するにはdecode必須。
	next unless (/$fname/);
	# ファイル名をencodeしないと対外的な操作できない。
	my $infile = $cp932->encode($_);
	my $middle = $cp932->encode($1) . '.mid.mp4';
	my $outfile = $cp932->encode($1) . '.mp4';
	my $mtime = (stat($infile))[9];
	# 動画時間を取得し、何倍速でエンコードできたか表示する
	my $info = qx(ffprobe "$infile"  -hide_banner -show_entries format=duration);
	# STDOUTにこれだけ返り、$infoに入る。
	# [FORMAT]
	# duration=1808.072933
	# [/FORMAT]
	my $duration = 0;
	if ($info =~ m|duration=([\d\.]+)|g) {
		$duration = $1;
	}
	my $stime = time;

	qx(ffmpeg -y -hide_banner -nostats -init_hw_device qsv:hw -i "$infile" -vf "scale=1280:720" -global_quality 25 -c:v h264_qsv -ac 2 -map 0:p:$serviceID:0 -map 0:p:$serviceID:1 "$middle" );
	qx(ffmpeg -y -hide_banner -nostats -init_hw_device qsv:hw -i "$middle" -vf "setpts=2/3*PTS" -af "atempo=1.5,pan=mono|c0=c0" -global_quality 25 -c:v h264_qsv "$outfile" );
	# タイムスタンプ変更
	utime($mtime, $mtime, $outfile) if -e $outfile;

	my $passed = time - $stime // 0;
	my $sname = $cp932->decode($0); # $0はPerlの特殊変数でスクリプト名
	printf STDERR "$sname: %.1f times\n",$duration/$passed if ($passed > 0);
}


添付ファイル: fileATOK2014スタイル一覧.xlsx 233件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-12-01 (木) 10:48:20 (567d)