ブログを作る※無料・簡単アフィリ    ブログトップ | 楽天市場
098576 ランダム
《コマンドライン活用術 No.8》 BA… (パソコン・家電)楽天ブログ 【ケータイで見る】 【ログイン】
kiraruノートの《切れ端》
ホーム 日記 プロフィール オークション 掲示板 ブックマーク お買い物一覧

PR

カレンダー

2012年3月
    123
45678910
11121314151617
18192021222324
25262728293031
<一覧へ今月次の月>

キーワードサーチ

カテゴリ

バックナンバー

モバイル

m ケータイに
このブログの
URLを送信!

 

書き留めておきたき事

<< 前のページへ一覧

2007年12月08日 楽天プロフィール Add to Google XML

 《コマンドライン活用術 No.8》 BAT中で相対日付を求める
[ コマンドライン ]    

皆さんはBAT中で1週間前の日付が欲しくなったりしたことがありませんか?
例えば、タイムスタンプが過去1週間より以前のファイルを削除したいとか。
そういう場合、日付を求めなくても済む方法を探したり、フリーソフトを
探したり、wsh(Jave/VBスクリプト)で組んだりしますよね。
でもBATコマンドのみで何とかスクリプトを組めないかと苦心したことがあり
かなり以前某所にUPしたものをここに発表します。

ここには、ちょっとだけ面白い(たぶん最初の頃は思いつかないような)
テクニックが使われてたりして何かの参考になるかと思います。

getdate 日付 [-d|-m] 差分
  日付: YYYYMMDD または YYYY/MM/DD
  区分: -d:日数 -m:月数
  差分: 999 または -999

  復帰値:%YYYYMMDD%, %days%環境変数
       計算後の文字列日付と
       1600/03/01からの通算日数がセットされる。
【例】
  getdate 20071208 -d -1 (20071208の1日前の日付を求める)
  getdate 20071208 -m 13 (20071208の13ヶ月後の 〃   )
  getdate %date% -d 100 (WindowsXPで100日後の日付を求める)
  getdate %date:~-10% -d 100 (Windows2000で 〃     )

  なお、3/31の1ヶ月前を求めると2/28(又は29)になる。
  同様に、3/31の1ヶ月後は4/30、2/28の1ヶ月後は3/28になる。


--- getdate.cmd ---
@echo off
rem パラメタ %1: YYYYMMDD または YYYY/MM/DD 日付
rem パラメタ %2: -d -m 差分区分(-d:日数 -m:月数)
rem パラメタ %3: 差分数
rem 返り値 %YYYYMMDD%, %days% 計算後の文字列日付と通算日数
rem
rem 西暦1600月3月1日を基点に日数計算
rem 1年は3月から始まり2月で終わることとする
rem --------------------------------------------------
rem   3  4  5  6  7  8  9 10 11 12 01 02月  月号
rem   0  1  2  3  4  5  6  7  8  9 10 11月  新月号
rem   31 30 31 30 31 31 30 31 30 31 31 28
rem   0 31 61 92 122 153 184 214 245 275 306 337   年頭からの通算日
rem --------------------------------------------------

setlocal EnableDelayedExpansion
set days_table=312831303130313130313031
set YYYYMMDD=%1
set YYYYMMDD=%YYYYMMDD:/=%
set YY=%YYYYMMDD:~0,4%
set MM=%YYYYMMDD:~4,2%
set DD=%YYYYMMDD:~6%
if "%MM:~0,1%"=="0" set MM=%MM:~1%
if "%DD:~0,1%"=="0" set DD=%DD:~1%

if "%2" equ "-d" (
call :ADtoTD
set /a days = !days! + %3
call :TDtoAD !days!
goto :end
)

if "%2" neq "-m" (
call :ADtoTD
goto :end
)

set /a Y1 = %3 / 12
set /a Y2 = %3 %% 12
set /a YY += Y1
set /a MM += Y2
if %MM% LEQ 0 set /a YY -= 1, MM += 12
if %MM% GTR 12 set /a YY += 1, MM -= 12
set /a mon = (MM - 1) * 2
set max=!days_table:~%mon%,2!
if %MM%==2 (
set /a mod4 = %YY% %% 4
set /a mod100 = %YY% %% 100
set /a mod400 = %YY% %% 400
if !mod4! neq 0 goto xxx
if !mod400! equ 0 set /a max += 1 & goto xxx
if !mod100! equ 0 goto xxx
set /a max += 1
)
:xxx
if %DD% GTR %max% set DD=%max%
set MM=0%MM%
set MM=%MM:~-2%
set DD=0%DD%
set DD=%DD:~-2%
set YYYYMMDD=%YY%%MM%%DD%
if "%MM:~0,1%"=="0" set MM=%MM:~1%
if "%DD:~0,1%"=="0" set DD=%DD:~1%
call :ADtoTD

:end
endlocal & set YYYYMMDD=%YYYYMMDD% & set days=%days%
echo %YYYYMMDD%
goto :eof

rem -----------------------------
rem 西暦を通算日に変換する
rem -----------------------------
:ADtoTD
set totaldays_table= 00 31 61 92122153184214245275306337
set /a YY = YY - 1600
if %MM% LEQ 2 set /a YY -= 1
set /a MM = (MM + 9) %% 12

set /a days = YY * 365 + (YY / 4) - (YY / 100) + (YY / 400)
set /a mon = MM * 3
set /a days += !totaldays_table:~%mon%,3! + %DD% - 1
endlocal & set days=%days%
goto :eof

rem -----------------------------
rem 通算日を西暦に変換する
rem -----------------------------
:TDtoAD
set days=%1
set /a d1 = days / 146097
set /a a1 = days %% 146097
set /a d2 = a1 / 36524
set /a a2 = a1 %% 36524
if %d2% equ 4 set /a d2 -= 1, a2 += 36524
set /a d3 = a2 / 1461
set /a a3 = a2 %% 1461
set /a d4 = a3 / 365
set /a a4 = a3 %% 365
if %d4% equ 4 set /a d4 -= 1, a4 += 365
set /a d5 = a4 / 153
set /a a5 = a4 %% 153
set /a d6 = a5 / 61
set /a a6 = a5 %% 61
set /a d7 = a6 / 31
set /a a7 = a6 %% 31

set /a YY = 400*d1 + 100*d2 + 4*d3 + d4 + 1600
set /a MM = 5*d5 + 2*d6 + d7 + 3
set /a DD = a7 + 1
if %MM% GTR 12 set /a MM -= 12 , YY += 1
set MM=0%MM%
set MM=%MM:~-2%
set DD=0%DD%
set DD=%DD:~-2%
endlocal & set YYYYMMDD=%YY%%MM%%DD%
goto :eof
追記:2007/12/08 4:40 プログラム修正

最終更新日  2007年12月08日 04時40分54秒
コメント(203) | コメントを書く


2007年12月07日

 保守(^^;)

1年ぶりの日記です。
某所とは違うけど、あまり長いことほったらかしにしとくとアカウントが消えるかもしれないので。

■ああ、俺ってガキだなあ
つい最近非常につまらんことで言い争いになった。
無記名の気楽さからか、はたまた、俺の偏屈で狭量で意固地な性格の現れなのか
実はかなり早期から相手の言いたいことは判っていたんである。
(そもそも最初の書き込み時、もしかしたら突っ込まれるかも、って思ったし)
でも、それを素直に認められず、つい判らない振りをして意固地なやり取りを楽しんでた。
これが記名での書き込みだったらまた全然違った対応になったはずである。
(まったく無記名のままでいるつもりだったんで我侭ほうだい)

そうこうするうちに、相手が有名人だって判り、ちょっと浮かれあがって
こっちも正体を暴露しちゃったのが運の尽き目。
しかも相手だって無記名の身分を楽しんでただろうに、巻き添えで
一緒に正体をバラしちゃい、本当迷惑してるだろうね。

某所では綺麗ごとの言い訳を書き連ねたが、内心はコッチが本当。
追記:とは言え某所で書いたことも決してウソではなく、分かっていても実際直面しちゃうと燃え上がっちゃうとかあるし、それに人間ってもんは色々な感情が入り交じって行動する動物でしょ?


でもそのうち懲りずにまたやるかもしれない。

最終更新日  2007年12月07日 20時14分14秒
コメント(1) | コメントを書く

2006年12月24日

 exavi_vfr0311-1
[ Avisynth ]    

exavi_vfr.auo v0.3.11-1

■更新内容
 オリジナル版exaviのver.0.3.10及びver.0.3.11の反映

■音声にバグあり
 音声無しで使用してください。
 時間が無いため未修正のままです。
 avsスクリプトでは、KillAudio()を挟む
 当初やっつけで作ってたバッファ制御に論理ミスがあり、インターリーブされる音声データ量がどんどん減っていき1バイトとかにもなることがあった。
 修正は、バッファ端で折り返しに掛かるときに、データリード時に拡張エリアまでデータコピーするだけなのだが(ミスはライト時にやってた)修正は来年になってしばらくしてからになりそうです。

最終更新日  2006年12月24日 18時07分12秒
コメント(0) | コメントを書く

2006年08月21日

 exavi_vfr 0.3.9-3
[ Avisynth ]    

■更新内容
 1)音声ありの場合、エンコードの最終段階でダンマリとなるのを修正
  後処理のデータフラッシュで、READERスレッドがWAIT状態に遷移してしまっていた場合、
  WRITER側でREADERのWAIT状態を解かずにいたのでREADERスレッドが止まったままなのに、
  バッファからあふれている音声データが読み込まれるのを延々と待ってしまっていたため。
  (デッドロック)
  ただし、音声の出力は非推奨のままです。(映像データとまったく同期が取れてないため)

 2)コンソールへのプログレス表示で表題が複数行出力されることがあるのを修正
  プログレス表示タイミングで、フレームが5フレーム未満の場合、表題が何度でも表示されてしまうようになっていた。(エンバグ)

 3)先読みバッファのサイズの指定を追加した。
  なお、デフォルトは6フレーム分

 4)スレッドの制御を微調整した。
  以前は、
   READ側:バッファにデータがあればWRITE側のWAIT状態(エンプティでWAIT状態)を即解除
   WRITE側:バッファに空きが出来ればREAD側のWAIT状態(フルでWAIT状態)を即解除
  だったものを、
   READ側:ある程度データが溜まるまでWRITE側のWAIT状態の解除を保留
   WRITE側:ある程度空きができるまでREAD側をWAIT状態の解除を保留
  さらに、このある程度というのを動的に変動させる。
  この処理により、スレッドの空回りを抑えて効率よく動作できることを狙った。
  (以前よりCPU使用率が大きく変動するようになり、場合によっては効率アップするかも)

 5)実験的に入れていた空白キーのキーボードフックを外した
  フックのチェーンを他アプリで解除されてしまうことがあるため。

 6)プログレス(ダイアログ)で表示されるフレーム数を+1した
  0から始まるフレーム位置を表示していたのを1から始まるフレーム数に修正。

exavi_vfr.auo v0.3.9-3
(v0.3.8-9b3までとは、定義ファイル(cfg)に互換性がありませんので再度作成してください)

最終更新日  2006年08月21日 07時51分31秒
コメント(255) | コメントを書く

2006年08月05日

 exavi_vfr 0.3.9-2
[ Avisynth ]    

■さらに修正

更新内容
 1)AVI2.0ファイル出力時、AVI1.0互換インデックスをRIFFチャンク内に入れた。

avi2 riff chunk 2

 2)statusウィンドウのframeの項目に、読み込みフレーム数を追加

  読み込みフレーム数/バッファの読み込みフレーム位置(書き込みフレーム数)/総フレーム数
status

exavi_vfr.auo v0.3.9-2
(v0.3.8-9b3までとは、定義ファイル(cfg)に互換性がありませんので再度作成してください)

■Winnyについて思うこと

 もし衰退させようとするのなら、ノードを見張ったりしてないで
 開発者が使っていたと謂われるダウンロード専用とか、乃至は
 ダウンロード数制限なし、自動転送なし、アップロードファイルの削除機能とかある奴を
 ウィルス対策して積極的に広めたら良いと思う。
 公開する名目は、ウィルス対策とかより便利にとか謳えば良い。
 ほとんどの一般人は欲しいファイルをダウンロードすることが目的なんだから
 こういうバージョンが出たら飛びついて使うだろうし、アップロードなんてしなくなるだろう。
 これで急激にWinnyワールドを衰退させることが出来ると思う。


最終更新日  2006年08月05日 19時56分16秒
コメント(0) | コメントを書く

2006年08月04日

 exavi_vfr 0.3.9-1
[ Avisynth ]    

■exavi_vfrの更新
 なんか最近、ブログでばっかり更新してる気がする。
 更新履歴が溜まってきて整理するのが大変になってきてるし、早くなんとかしなければ!

 ver.0.3.8-9b3からの主な更新内容(思い出せる範囲で記述)

 1)exavi.auoの0.3.9の内容を反映
   この修正で、AVI2.0ファイルで、AVI1.0互換インデックスがRIFFチャンクの外に
   出ちゃってるだけど本当にこれで良いのか気に掛かるところ。
   ちなみにVirtualDubでAVI2.0出力では、これはRIFFチャンクの中に入ってる。

 2)AVI1.0出力時、ファイルの最後にゴミがくっ付き、ごく稀にmmg(mkvmerge)でエラーになる
  ことがあるのを対処。

   (なおこの場合でもVirtualDub, AviUtl, WMP, AVI_Muxではエラーにならない)
   これは、VFWのAVIStream関数群でファイルを作成すると、最後のindex部分が余分に
   獲得されていてその余計なデータが場合により不正なRIFFと認識されているようです。
   対処方法は、ファイルクローズ後にRIFFチャンクのサイズにまで縮めています。
   avi1_invalid chunk
    (VirtualDubのHex Editorでの表示、上記invalid chunk部分を削除するよう修正)

 3)AVI2.0出力で、LISTチャンクでAVIXを作成しているのをRIFFチャンクに変更
  それに合わせて、先頭のRIFFチャンクのサイズを修正
   (AVIX(LISTチャンクヘッダ)までが含まれるようになってたのを含まないようにした)
avi2_riff invalid chunk
   (純正exavi 0.3.9だとこのようになっているのを以下のように修正)

avi2_riff chunk

 4)強制キーフレーム指定有効/無効で、今まで分かれていた0.3.8-8と0.3.8-9b(0.3.8-7)を統合
   設定プロパティで選択できるようにしたが、そのため設定ファイル(cfg)の互換性が
   失われて、再作成しないといけない。
   (リザーブ領域を作ったので今後はある程度は設定項目が増えても互換性は保たれるかも)
   (とは言っても、XviD(shibuya7/15版)とかに入れ替えるとそこでcfg作り直しなんだが)

  ・XviDだとNULLありなしで一応正常みたい。(DivXは後述のバグのためNULLなしだけ正常)

 5)DivX ver6.x系でもAVI独自のピクチャタイプのシーケンス制御するように修正
   0,0,0,1,2,3,4,...というように先頭フレームが重複して(その分ずれて)出力されていた

  【制限】
   ただそれだけでは、ver.5.x系までとは異なりNULLありの場合おかしなことになる。
   0,n,n,n,n,1,2,n,n,n,n,3,n,n,n,n,...というように1フレーム目にNULLフレームが
   付加されない。
   >>茂木氏が修正されるのを待ちましょう!!

     
 6)B-VOP使用時ごくたまに最後に1フレーム余分に出力されていたのを削除
    0.3.8-2で、対処してたがその後のverで再び出力されるように戻してた
    (タイムコード出力をその分増やす)のを再び削除するようにした。

 7)ちらつくので、statusウィンドウのリドローをしないようにした

 8)タイムコードの四捨五入をprintfの書式文字列("%.0f")で行わせるように変更

exavi_vfr.auo v0.3.9-1
(v0.3.8-9b3までとは、定義ファイル(cfg)に互換性がありませんので再度作成してください)


最終更新日  2006年08月05日 19時21分08秒
コメント(0) | コメントを書く

2006年07月07日

 60fpsのこと、その他
[ Avisynth ]    

●Itsの説明とか以前のブログに、itsで60fps区間を指定すると
 再生時一瞬止まったりカクついたりと書いたことがあったんだけど、これは単に
 処理が追いつかないでレンダラで不都合が発生したせいだったようだ。
 具体的には、私の場合MPCでデコーダとレンダラの間に、あじ氏の色変換フィルタ
 (NTSC to sRGB Directshow Filter ver2.6)をかませてあり、これの処理を
 含めて60fpsのスピードを出すにはPC性能が不十分だったためのようです。
 まあ言い訳を書くと、レンダラでジッターや同期オフセットは凄いけど、フレーム欠落は
 出てなかったんでそのように思ってしまったんですけど。
 タイムコードでも60fpsを完全に制御できないだとか変なことを言って申し訳なかったです。
 まあ、みなさんもこのように再生がおかしかったら一度重いフィルタ処理を施していないか
 どうか確認してみることを勧めます。

●今、AviUtlでVFRのソースを再圧縮するのに便利なようにしてくれっていう依頼が舞い込んで
 来ていますが、再圧縮が欲しいという人ってどのくらいいるのでしょうか?
 (それ以前にあじ氏じゃなくてどうして私のところにこんな依頼が来たのかなあ?)
 でももし要望があれば、del-importファイルを取り込んでカット編集できる程度って
 ことでAddRangeに組み込むのが良さそうな気がしています。
 (本当は入力プラグインを作れば良いのかもしれないけどAVISourceあたりにやって欲しい)
 もっと他の方法が良いんじゃないかって思う人がいたらご意見を聞かせてください。

最終更新日  2006年07月08日 00時37分36秒
コメント(3) | コメントを書く

2006年07月04日

 BBS ready

TO: LeiMing-sann

I can speak Japanese only. Please use the simple English.
I do not support it by E-mail for such a question and the trouble.
Because it is only you have the advantage.
Please go to following URL.

url-bbs

url-bbs2


Please tel me of your situation in detail.
- your PC(CPU, Memory), OS, APL, avs script, using filter and codec, and etc...

Is not happend memory swapping ?
Is not happend in other APL (ex. fast recompress mode of VirtualDub) ?


最終更新日  2006年07月05日 00時29分33秒
コメント(255) | コメントを書く

2006年07月03日

 itvfrの特殊な対応
[ Avisynth ]    

■Its/Exavi_vfr

 前回のあと、猛烈に或るシリーズ本を読み返したくなり、それを読んでいました。
 また、なのは&なのはA's、ストラトス、トップをねらえ1&2、十二国記を寝る間も
 惜しんで見ていました。それでもまだまだ固め見したい欲求が止まりません。
 その合間にエンコしていましたが、デモンベインが、デモンベインが...

 というわけで、
 itvfrのNULLフレームを詰めて出力するオプションを追加してみました。
 デモンベインはメチャ混合だが、真面目に区分けする気もなく
 取り合えず保存するのにitvfrを使うことにしたけど、やっぱり
 NULLフレームの出力部分が気になり(3DNRの効きが悪い)
 これを詰めてしまおうと思ったんです。(でも2passは嫌い)
 ただし総フレーム数は変化しないので最後にNULLフレームが纏まって出力されます。
 opt=1 を指定するとこのモードとなります。
 なおこのモードではチャプター、タイムコードとも最後の有効フレームを出力した
 後に作成されます。
 ただし、このモードはエンコで使うことを前提としており、VirtualDub等で
 フレームをランダムスキップアクセスすると表示が変になります。
 シーケンシャルにコマ送りするなら問題ありません。(バックすることは問題ありません)
 (3DNR等のフレーム先読みに対しては大丈夫なように作ったつもりです。)

 ItsCut()
 おもちゃとして、詰めた後に最後の有効フレームで中断(Ctrl+C)する関数を含んでいます。
 これは必ずスクリプトの最後に指定します。
 (でも実用的じゃないかもしれません。
  exavi_vfrは対応するように修正しましたが、音声ありの場合音声は途中で切れます。
  x264.exeではB-Frameを使うと最後の1フレームの画はNULLが出力されるようです。
  BATエンコしてる場合、
   start /wait "" "c:\auoenc.exe" ...
  としないとBATも止まってしまうようです。)

 【例】
  --- foo.avs ---
  its(opt=1, def="z:\foo.def", chapter="z:\foo.txt", output=".tmc")
   :
  #itscut
  return last

  --- foo.def ---
  0-[30] 'itvfr(diMode=3, ref="TOP")'

なお、今回からアーカイブはzip圧縮から7z圧縮に変更しました。
Its v0.8.6
exavi_vfr.auo v0.3.8-9b3


最終更新日  2006年07月04日 00時28分26秒
コメント(2) | コメントを書く

2006年06月09日

 Its のチャプターのxml出力について
[ Avisynth ]    

xml文書で、先頭に指定するXML宣言で
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
どうやら、mkvmergeが受け付ける符号化宣言は
"ISO-8859-1"と"UTF-8"しか無いようです。
(Unicode "UTF-16"も受け付けない)

仕方ないので
●Shift_JISを使う場合は、Simple/OGG形式(言語指定なし)にする。
●ANSIとUTF-8の場合は、xml形式を選んでも良いが、指定は"UTF-8"とする。
のどちらかにしてください。

SHIFT_JISをUTF-8にコード変換するのはできるんですが、
全ての文字が完全にコンバートされるとは限らないし、
SHIFT_JISを判断するのも面倒なので気が向かないかぎりやりません。

最終更新日  2006年06月09日 23時28分44秒
コメント(0) | コメントを書く


<< 前のページへ一覧一番上に戻る


Powered By 楽天ブログは国内最大級の無料ブログサービスです。楽天・Infoseekと連動した豊富なコンテンツや簡単アフィリエイト機能、フォトアルバムも使えます。デザインも豊富・簡単カスタマイズが可能!

Copyright (c) 1997-2012 Rakuten, Inc. All Rights Reserved.