綾小路龍之介の素人思考

[Winamp] StreamRipper で全自動リッピング

ここでは StreamrRipper を利用してほっといても継続的にサーバにアクセスして配信内容をハードディスクに保存する方法を述べます。

目次

[Linux] サーバでストリーミング放送を録音

Linuxサーバでストリーミング放送を録音してみる。

Vine Linux 4.1ではaptでstreamripperがインストールできます。ソースからのコンパイルもやってみたけど、INSTALLに書かれた方法ではうまくいかなかった。まぁaptでインストールできればOKってことで。

$ su -
# apt-get install streamripper

音聴くだけだとrootになんなきゃいけないけど、ストリームのキャプチャだけなのでrootですることはこれでおしまい。聞く放送局はSHOUTcastとかで探してプレイリストをダウンロードしておく。

$ w3m http://www.shoutcast.com/
$ ls
shoutcast-playlist.pls
$ cat shoutcast-playlist.pls
...
File1=http://hoge.com:8080/
...

ダウンロードしたプレイリストのFileから始まる行の=の右側を引数にして起動。カレントディレクトリの中にサブディレクトリができてその中に録音されたファイルが書き込まれる。

$ streamripper http://hoge.com:8080/

ここまでだと永久に録音し続けることになる。とまらないと困るので録音時間か録音容量で終了するようにする。-M 100で100Mbytesダウンロードしたら終了。-l 100で100秒ダウンロードしたら終了。とりあえずテストということで10Mbytesで終了ということで下。

$ streamripper http://hoge.com:8080/ -M 10

10Mbytesかは確認してないけどとりあえず自動的に落ちることを確認。ここらへんでシェルスクリプトにしてみよう。いつも使ってるログオフしても仕事を続けるスクリプトを多少書き換えて、下のような感じにしてみる。

$ vi streamripper.sh
$ cat streamripper.sh
S="streamripper"
U="http://hoge.com:8080/"
O="-M 10"
nohup nice $S $U $O 1>>$0.stdout 2>>$0.stderr &

うまくできることを確認。ログアウトしても録音は続くし、プライオリティも下がっているし、自動的に落ちる。でも問題発見。*.stderrがでかい。catしたりするとあんまりないよう内容に見えるけど制御コードっぽいのがいっぱい入ってて結構でかい。まぁ気にしなければいいんだけど。出力を抑制するオプションをヘルプを読んで探す。--quiteをつけるとコンソールにいろいろでなくなることがわかった。つーことで試しに--quietを追加してみる。

$ vi streamripper.sh
$ cat streamripper.sh
S="streamripper"
U="http://hoge.com:8080/"
O="-M 10 --quiet"
nohup nice $S $U $O 1>>$0.stdout 2>>$0.stderr &

--quietしてもエラーは吐いてくれるっぽいので、このスクリプトで運用。cronに載せる。cronは基本的にホームディレクトリで実行なので、出力フォルダを指定するオプションもつけとく。ホームディレクトリに移って実行確認。変数を""で囲んでるので変数展開されない。したがって~/とか使えない。なのでディレクトリは絶対指定でごまかす。あとディレクトリはなくても作ってくれる。

$ vi streamripper.sh
$ cat streamripper.sh
S="streamripper"
U="http://hoge.com:8080/"
O="-M 10 --quiet -d /home/user/path/to/music/"
nohup nice $S $U $O 1>>$0.stdout 2>>$0.stderr &

このままだと100回cronで呼び出されると1GBytesディスクを消費してしまう。削除も面倒なので古いファイルは自動で削除してもらう。とりあえずテストで30分に1回cronが走るとして、最後の修正から3時間以上たったファイルは削除という方向で。

$ vi streamripper.sh
$ cat streamripper.sh
S="streamripper"
U="http://hoge.com:8080/"
O="-M 10 --quiet"
D=~/path/to/music/
cd $D
nohup nice $S $U $O 1>>$0.stdout 2>>$0.stderr &
find . -type f -name '*.mp3' -mmin +180 -print0 | xargs -0 -r rm

おそらくこれでうまくできると思う。実際に運用するときは録音の時間を長くとった方がよさそうなので。

$ vi streamripper.sh
$ cat streamripper.sh
S="streamripper"
U="http://hoge.com:8080/"
O="-M 100 --quiet"
D=~/path/to/music/
cd $D
nohup nice $S $U $O 1>>$0.stdout 2>>$0.stderr &
find . -type f -name '*.mp3' -mtime +7 -print0 | xargs -0 -r rm
crontab -e
10 11 * * * /bin/sh streamripper.sh

こんなんでどーでしょ。

[Streamripper] Streamripperで全自動リッピング

Streamripperでリッピングできると、音楽生活が潤うだろうと思ったけれど、全自動でできないとダメじゃないかという話です。

Winampプラグインでは全自動リッピングを行う上でいくつかの問題点があります。第1に『接続までの作業が多い』ことです。接続できなかった場合、Startボタンを押すと、メッセージボックスが表示され、OKボタンを押して、プログラムはコマンド待ちの状態になります。この操作を接続されるまで繰り返すわけです。第2に『思ったようにリコネクトしてくれない』ことです。オフィシャルページには自動的にリコネクトするとあります。確かにリコネクトしてくれるのですが、とてもアグレッシブにしているとは思えません。それにプラグインではリコネクトしているのかどうか判りません。

Normally Streamripper will be very aggressive and try to re-connect to a dropped stream,http://streamripper.sourceforge.net/tutorialconsole.php

問題を解決するために、コンソールバージョンと、Windowsのバッチファイルを使います。プラグインバージョンを使うことはきっぱり諦めましょう。どちらを使ってもできるファイルは同じです。両方の問題に共通して、しなくてはならないことはStreamripperに接続コマンドを送リ続けることです。ルーチンワーキングなので、これを解決するためにはコマンドを永久に繰り返しさせます。ということで以下のバッチファイルを作ってみました。

CLS
@ECHO OFF
:LOOP
ECHO Wolf's Rain - http://server-nexus.com/forum
C:\temp_prog\sripper-1.60.10.exe http://62.112.213.213:8010/ -t -d  C:\temp_movie\ -q -u WinampMPEG/5.0 >> sr_stcrepo.txt
GOTO LOOP 
EXIT

環境に合わせてファイルを書き換えなければ動作しません。なので、書き換える必要のあるところだけ解説します。バッチファイルの書き方について詳しく説明しません。<4行目>機能的な意味はありません。"ECHO "以降は好きに書き換えてください。削除してもかまいません。私はリッピングするサーバーの名前を書き込んでいます。<5行目>Streamripperを絶対パスで呼び出しています。第1引数、サーバーアドレスとポート。これはWinampのプレイリストでファイル情報を見れば判ります。第2引数、incompleteディレクトリ内のファイルを上書きしない。第3引数、保存ディレクトリを変える。第4引数、保存ディレクトリの指定。第5引数、ファイル名に連番追加。第6引数、ユーザーエージェントを偽装。第7引数、ユーザーエージェントの指定。私はWinamp5.04が吐く物を指定しています。">>"以降、エラーメッセージをsr_stcrepo.txtに出力。

絶対パスで書かなくとも、パスの通ったディレクトリに入れるか、パスを通せばいいじゃないか。とか思った人はそうして下さい。

実行するには書き換えたバッチファイルをダブルクリックするかプロンプトから呼び出します。バッチファイルは永久ループしている、つまり自動的に終了してくれないので終了させるには、強制終了させます。左上の×印をクリックして、表示されるメッセージボックスのOKボタンを押します。強制終了していますが、それまでにリッピングしたファイルは失われません。

オフィシャルページにオプションスイッチの解説がありますが、どうやら古い情報のようです。コマンドプロンプトでプログラムを引数指定なしに呼び出すと、利用可能なオプションスイッチの一覧が表示されます。解説に載っていないオプションスイッチもありますので、こちらを信じたほうがよさそうです。Ver1.60.10の一覧を載せておきます。

Usage: streamripper URL [OPTIONS]
Options:
-h             - Print this listing
-a <file>      - Rip to single file, default name is timestamped
-d <dir>       - The destination directory
-s             - Don't create a directory for each stream
-r <base port> - Create relay server on base port, default port 8000
-z             - Don't scan for free ports if base port is not avail
-p <url>       - Use HTTP proxy server at <url>
-o             - Overwrite tracks in complete
-t             - Don't overwrite tracks in incomplete
-c             - Don't auto-reconnect
-v             - Print version info and quit
-l <seconds>   - number of seconds to run, otherwise runs forever
-q             - Add sequence number to output file
-i             - Don't add ID3V1 Tags to output file
-u <useragent> - Use a different UserAgent than "Streamripper"
-f <dstring>   - Don't create new track if metainfo contains <dstring>
-m <timeout>   - Number of seconds before force-closing stalled conn
-k <count>     - Skip over first <count> tracks before starting to rip
--x            - Invoke splitpoint detection rules (see online guide)

複数サーバーからリッピングをしたい場合(同時ではありません)は上記の4,5行目を繰り返します。このときそれぞれのサーバーアドレスを目的の物に書き換える必要はありますが。すると以下のようになります。

CLS
@ECHO OFF
REM ECHO ------------------------------------------Run Program
:LOOP
echo aznV.net TV! --Channel 1
C:\temp_prog\streamripper-win32-1.61.3\streamripper.exe http://213.246.39.25:8090/ -t -d D:\tpAV\SHOUTcast_Stream\ -q -u WinampMPEG/5.0 -m 30>> sr_stcrepo.txt
echo aznV.net TV! --Channel 2
C:\temp_prog\streamripper-win32-1.61.3\streamripper.exe http://213.246.39.72:8090/ -t -d D:\tpAV\SHOUTcast_Stream\ -q -u WinampMPEG/5.0 -m 30>> sr_stcrepo.txt
echo EATV: EATV EditingArchive.com [VP6]
C:\temp_prog\streamripper-win32-1.61.3\streamripper.exe http://66.90.81.48:9000/ -t -d D:\tpAV\SHOUTcast_Stream\ -q -u WinampMPEG/5.0 -m 30>> sr_stcrepo.txt
C:\temp_prog\streamripper-win32-1.61.3\streamripper.exe http://66.90.81.48:8000/ -t -d D:\tpAV\SHOUTcast_Stream\ -q -u WinampMPEG/5.0 -m 30>> sr_stcrepo.txt
C:\temp_prog\streamripper-win32-1.61.3\streamripper.exe http://207.44.208.109:9020/ -t -d D:\tpAV\SHOUTcast_Stream\ -q -u WinampMPEG/5.0 -m 30>> sr_stcrepo.txt
C:\temp_prog\streamripper-win32-1.61.3\streamripper.exe http://209.6.82.6:8000/ -t -d D:\tpAV\SHOUTcast_Stream\ -q -u WinampMPEG/5.0 -m 30>> sr_stcrepo.txt
GOTO LOOP
EXIT

これでも動きますが、書き換える時横に長くてみにくいです。それに何をやっているのか自分でもわからなくなります。そこで、以下のようにスクリプトを書き換えてみます。

CLS
REM @ECHO OFF
REM ECHO ----------------------------------------Set Parameters
SET SR=C:\temp_prog\streamripper-win32-1.61.3\streamripper.exe
SET DR=D:\tpAV\SHOUTcast_Stream\
SET UA=WinampMPEG/5.0
SET ST=-t -d %DR% -q -u %UA% -m 30>> sr_stcrepo.txt
PAUSE
REM ECHO ------------------------------------------Run Program
:LOOP
echo aznV.net TV! --Channel 1
%SR% http://213.246.39.25:8090/ %ST%
echo aznV.net TV! --Channel 2
%SR% http://213.246.39.72:8090/ %ST%
echo EATV: EATV EditingArchive.com [VP6]
%SR% http://66.90.81.48:9000/ %ST%
%SR% http://66.90.81.48:8000/ %ST%
%SR% http://207.44.208.109:9020/ %ST%
%SR% http://209.6.82.6:8000/ %ST%
GOTO LOOP
EXIT

上記との差は、スクリプト内で重複する場所を変数にセットして、変数を参照している点です。<2行目>頭に"REM "をつけてコメントアウトしました。解説はあとで。<4行目>変数"SR"にStreamripperのパスを代入。<5行目>変数"DR"にファイル保存ディレクトリのパスを代入。<6行目>変数"UA"にユーザーエージェントの名前を代入。<7行目>変数"ST"に今までの変数("SR","DR","UA")を展開してStreamripperを呼び出すときの引数として代入。<8行目>この解説はあとで<12行目>Streamripper"SR"を第1引数、サーバーアドレス、その他の引数、"ST"で呼び出し。

2行目をコメントアウトしたのは勘案が必要なメッセージがでるかも知れないからです。以降メッセージが出たとして話をします。8行目をコメントアウトし(頭に"REM "をつける)なければStreamripperを呼び出す前にここでプログラムが止まります。止まるまでに、"環境変数に必要なメモリが足りません"等のメッセージが出た場合には、メモリを増やしてください。このバッチプログラムをダブルクリックした時にできたショートカットを右クリック->プロパティ->メモリ->コンベンショナルメモリ->環境変数の初期サイズ->これが"自動"となっていると思いますので、これをメッセージが出なくなるまで増やします。増やす量はそれまでに使った変数("SR","DR","UA","ST")の文字数によります。どうやってもエラーメッセージが現れる場合は無視するか、Streamripperをルート直下(C:\streamripper.exe)に持って来たりプログラム自身もそこに持っていく必要があります。、保存ディレクトリをルート(D:\)にしたり、ユーザーエージェントを文字数の少ないもの(Wap)に変えてみたりしてください。

例として設定した3つはどれも適当に設定しています。意味は特にありません

これでずいぶんとスクリプトが見やすくなりました。エラーが出なくなったことが判ったら2行目の"REM "を削除して、8行目の頭に"REM "を追記すればスクリプトが止まらずに進みます。

[Streamripper] リッピングした Nullsoft Video (NSV) ファイルの編集

Streamripper は様々な方法を用いてデータを分割します。例えば、「メタデータを受信したらカット」や、「ミリ秒以上の空データでカット」等のことです。しかし、どの設定も、リッピングする内容や、サーバの環境によって、ターゲット固有の設定でなければなりません。全ての対象に対して同じ設定を使う事は設定しないこととほぼ同義です。しかし、対象に最も適した設定を見つけるまでは、サーバに対して接続と切断を繰り返し、満足の行く結果が得られるまで試行錯誤が必要です。

その結果、「対象に最適な固有の設定を見つける」というハードルが、「対象をリッピングをする」というゴールと摩り替わることがあります。最近は配信内容がころころ変わるサーバも見受けられますので、設定し終わったころには配信内容が変わっていたという事態も予想できます。ソフト使用者がほしいのはデータであって、設定では有りません。

データを手に入れた上で、その後見やすい形 (一話ごとにカット、CM 削除) に編集することこそが必要とされているのではないでしょうか。この章では既存のツールを使っていかに NSV ファイルを編集するかについて話を進めていきます。

NSV ファイルのデータ構造

NSV ファイルはヘッダに "NSVf" から始まるメタデータ、その後に "NSVs" から始まる AV (音声画像) データがいくつか続く。これらの区切り文字によって区切られたセクションをチャンクと呼ぶ。メタデータはファイル自体の情報 (再生時間、ファイルサイズ等) を記しているものなので、音声画像の再生だけでは、メタデータのある物と無いものの区別はつきません。つまり、無くても良いデータです。

従って AV データ部だけのファイルを作っても、データの再生は行われます。これに対し、メタデータのみのファイルは再生時間は表示されるものの、実際に再生が行われることはありません。また、メタデータのチャンクに書き込まれるデータは自己申告なので、たとえ此処に書かれている再生時間と、実際の再生時間の食い違いがあったとしても、AV データの再生時間が優先されます。

これまでのことによって、リッピングされたデータはどこで切断してもその前部分と後部分ともに、データ再生が可能であるということがいえる。ただし、再生できる (視聴できる) データは、ファイル内に書かれた最初の"NSVs"以降のデータで、これより前のデータは視聴できない。つまり、100MBytes のファイルでも内に "NSVs" が 1 つも見つからなければ、視聴できないファイルとなってしまうわけである。

NSV ファイルを切る (カット編集)

NSV ファイルはバイナリ形式である。従って、これを通常のエディタで開いてもまともに編集できない。その上、編集対象のファイルサイズが大きい場合、マシンによっては編集作業自体が重くなる。前者は、バイナリエディタを使うことで、後者は編集の前処理として対象の NSV ファイルを小さなピースに分割しておくことで解決される。

順番が逆転するが、後者から説明していく。ファイルを分割するソフトは Vector の "ファイル分割" を参照すれば多くある。著者が使ったものは「ファイル破断」というソフトである。これ以降はこのソフトを使った方法を紹介していく。その他にも多々あるので自分の使いやすいソフトを選べばいい。

まずはこのソフトを使ってファイルを 1MByte 程度のファイルに分割する。多くのソフトの場合、分割後のファイルは "元ファイル名. 3 桁の数字" の形である。また、同時に元ファイル復元を行うバッチファイルが同時に作成される。分割されたファイルのサイズがあまり大きい (100MByte-) とこの後に行う作業でマシンの動作が重くなる。また此処であまりに小さくすると (-100KByte)、"NSVs" が内部に含まれないため、内容の確認ができなくなる。

分割後の NSV ファイル確認 (カット編集)

次に分割後のファイルの確認を行う。分割後のファイルの拡張子は前述したように "3 桁の数字" である。このままでは Winamp で再生できないので、".nsv"を拡張子の後に追記する。("test.000"=>"test.000.nsv" 等) これで再生できるので、内容の確認が行える。Streamripper でリッピングした結果、"test.nsv"ができ、内容を確認すると以下のようになったとする。

分割ルール
元ファイル分割後内容
test.nsvtest.000.nsvCM
test.001.nsvCM&第一話
test.002.nsv第一話
test.004.nsv第一話
test.005.nsv第一話&CM
test.006.nsvCM&第二話
test.007.nsv第二話
test.008.nsv第二話
test.009.nsv第二話&CM
test.010.nsvCM
test.011.nsvCM&第三話
test.012.nsv第三話
test.013.nsv第三話
test.014.nsv第三話
test.bat復元用バッチファイル

確認後不要なファイルは削除してよい。上の例では test.000.nsv と test.010.nsv が不要。この様に分割された場合、test.001.nsv、test.005.nsv、 test.006.nsv、test.009.nsv、test.011.nsv はバイナリエディタで中身を確認しつつ分割する。これら不要な部分と必要な部分が両方含まれているファイルについては、後からバイナリエディタを使って不要な部分を削除するが、この作業が面倒な場合は、不要なファイルのみを削除して、バッチファイルを起動すれば、不要な部分の削除されたファイルが出来上がる。

NSV ファイルを一話ごとに分割 (カット編集)

内容ごとにフォルダを作成し、それらの内容が含まれているファイルのみを移動させる。その後、復元用バッチファイルをコピーして、作成した全てのフォルダに入れる。その後バッチファイルを起動させる。これで一和事のファイルが作成できた。

最後に原文を載せておきます。

始めに

ヌルソフト (多くのユーザーから支持されている、MP3 等の汎用マルチメディアプレイヤー Winamp の開発母体) はネットワーク配信を念頭に設計されたマルチメディアコンテナフォーマットを提供します。 このフォーマットは、ヌルソフトビデオと呼ばれ、拡張子は'.nsv'です

Description of the Nullsoft Video (NSV) Format
by Mike Melanson (melanson@pcisys.net)
v1.0: May 19, 2003
ヌルソフトビデオ(NSV)フォーマットについての記述
著者 マイク・ミーラソン(melanson@pcisys.net)
1.0版: 2003年3月19日
// some additions by Vitalijus Slavinskas, 2003.01.20
// 2003.01.23 finally understood toc structure //01.24 maybe not :D
  Copyright (c) 2003 Mike Melanson
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2
  or any later version published by the Free Software Foundation;
  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
  A copy of the license is included in the section entitled "GNU
  Free Documentation License".
この文書を複製、出版、改変はGNUの公開文書規約1.2版、またそれ以降に出された版によって許可されています。
Contents
--------
 * Introduction
 * File Format
 * References
 * Acknowledgements
 * Changelog
 * GNU Free Documentation License
Introduction
------------
Nullsoft, the entity behind the ubiquitous Winamp MP3 / general-purpose
multimedia player, offers a multimedia container format designed with
network streaming in mind. The format is called Nullsoft Video and bears
the file extension '.nsv'.
File Format
-----------
All multi-byte numbers are in little endian format.
A NSV file has the following overall structure:
  'NSVf' optional metadata chunk
  'NSVs' audio/video data chunk
  [NSVs chunk]
    ..
  [NSVs chunk]
NSV files may start with an optional info and index chunk that is marked
by the characters 'NSVf'. The chunk has the following layout:
  bytes 0-3    'NSVf' signature
  bytes 4-7    size of chunk, including signature and size fields
  bytes 8-11   total size of file
  bytes 12-15  playtime in msec of file
  bytes 16-19  length of info strings
  bytes 20-23  number of table entries // number of nsvs*2+1
  bytes 24-27  number of table entries //number of nsvs
    [arbitrary length info string]
      ..
    [arbitrary length info string]
    [data table]
Following the first 28 bytes of the info block is any number of
arbitrary length info strings. The strings take the format of:
  STRING=`value`
The string is delimited by the backtick (`) character, a.k.a. ASCII
0x60. Known strings include TITLE and ASPECT for the NSV file's title
and aspect ratio, respectively. Examples:
  TITLE=`deer video`
  ASPECT=`1.125`
// IMHO only values are delimited and only with 0x01 (or how it's written in C)
// between tags is space 0x20
Following the metadata strings is a table of incrementing 32-bit
numbers. The number of entries in this table is specified in the NSVf
chunk header, apparently twice. The meaning of these numbers is unclear.
// it's offset's in data stream, they point to 'NSVs', maybe mark keyframes...
// later something called 'TOC2'
// and after this
// array of frame number in every nsvs
// this is valid for winamp genrated seek information, but encoding tools makes *something* :)
The meat of a NSV file (encoded audio and video chunks) is stored in a
series of NSVs data chunks. Each NSVs chunk can contain multiple video
and/or audio chunks.  A NSVs chunk has the following header:
  bytes 0-3    'NSVs' signature
  bytes 4-7    video codec fourcc
  bytes 8-11   audio codec fourcc
  bytes 12-13  video width, divisible by 16
  bytes 14-15  video height, divisible by 16
  byte 16      framerate
     bit 7     1 = lower 7 bits indicate a standard fractional framerate
               0 = lower 7 bits indicate an absolute framerate
     bits 6-0  framerate
  bytes 17-18  unknown
If a file does not have audio or video, the corresponding codec fourcc
will be 'NONE'. Common video fourccs are 'VP31' and 'VP3 ' which
indicate On2 VP3 video. Common audio fourccs are 'MP3 ' for MPEG layer
III audio and 'PCM ' for raw PCM audio.
The MSB of byte 16 appears to indicate that the lower 7 bits represent a
standard fractional framerate. For example, 0x81 equates to 29.97 fps,
0x85 equates to 14.98 fps, while 0x0F simply represents 15 fps.
PASCAL EXAMPLE:         // at least  i didn't know standart fractional framerate and such so it's clearer maybe
fr :byte;     // framerate
ft :whatever; // frametime msec
           if fr>$79 then
           begin
               case (fr and 3) of
                  0:dal:=3000;   // 30.00 baze
                  1:dal:=3003;   // 29.97
                  2:dal:=3600;   // 25.00
                  3:dal:=3753;   // 23.98
               end;
               if fr<$C0 then
                  ft := (dal * ((fr xor $80) shr 2 +1) ) div 90;
               else
                  ft := dal div (90 * ((fr xor $C0) shr 2 +1) );
           end
           else
               ft:=1000 div fr;
After the NSVs header are 5 bytes which provide the following length
information:
  v? vv vv aa aa
The lower nibble of byte 0 is unknown. The upper nibble of byte 0, along
with bytes 1 and 2 comprise the length of the video data in bytes. Since
there are 5 hex characters to describe the length, the maximum video
chunk size is 2^20 = 1 megabyte. Bytes 3-4 are the 16-bit length of the
audio chunk. Consider this example:
  80 B7 00 D1 00
The first 3 bytes, 80 B7 00, are rearranged in little endian form as
0x00B780. Then the number is shifted right by 4 to give a video chunk
length of 0xB78 bytes. The audio chunk length bytes are D1 00, or 0x00D1
in little endian.
After the first video/audio chunk pair in a NSV file, there will be a
BEEF marker before the next pair. That is, the hex number 0xBEEF encoded
in little endian (EF BE). After the marker is another 5 bytes encoding
the video and audio chunk lengths as described above, followed by
another frame of video and audio data. This BEEF-length-data pattern
continues until the end of the NSVs chunk.
A small note on PCM audio: If the audio data is encoded with fourcc
'PCM ', each audio data chunk will contain the following 4-byte header:
  byte 0      unknown
  byte 1      number of channels
  bytes 2-3   sample rate
// there should be added info about subtitles
// http://forums.winamp.com/showthread.php?s=a1811303139d1c1301779730986ada93&threadid=158106&highlight=subt
References
----------
NSV website, home to samples and SDK:
http://www.nullsoft.com/nsv/
Acknowledgements
----------------
Thanks to Roberto Togni (rtogni at bresciaonline dot it) and Arpad
"A'rpi" Gereoffy (arpi at mplayerhq dot hu) for further investigation
into the format.
Changelog
---------
v1.0: May 19, 2003
- sorted out NSVs chunk formatting
- document promoted to 1.0 status since enough information has been
uncovered to create functional demuxers
v0.2: March 13, 2003
- licensed under GNU Free Documentation License
- expanded information regarding NSVs data chunks
v0.1: February 11, 2003
- initial release
GNU Free Documentation License
------------------------------
see http://www.gnu.org/licenses/fdl.html

実用上は余分なデータをカット編集する事です。重要なことは

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2003-12-29T09:36:19+09:00
  2. Modified: 2003-12-29T14:20:58+09:00
  3. Generated: 2017-07-10T23:10:59+09:00