AsfBin Version 1.8.3
AsfBin is a command line utility for cutting out fragments, joining, editing 
and repairing ASF files. AsfBin can be applied to any ASF file, that is, not only 
to those with ASF extension but also those with WMV and WMA extensions. 
Precision, speed and the maximum fidelity was my top priorities in desing of the AsfBin
software. Not to mention, of course, reliabilty of this tool.
The whole operation is performed without recompression of the whole file. On a user demand,
only a couple of first samples may be recompressed to give the ultimate precision in cutting.
Because of that, the video quality is not degraded and the resulting file 
remains as unchanges as possible.
AsfbinWin is a Windows counterpart of the AsfBin command line utility,
providing the same level of functionality as Asfbin. It has an easy to use 
and clear user interface with powerful video preview capabilities.
In the previous versions of the result of an operation was always one media 
file. But since version 1.5 a -sep option was introduced to allow a user to 
save each selected range to a separate file. Other unique feature is
the ability to recreate key frames basing on progressive ones, thus 
allowing to cut the video at any desired time position. 
Because AsfBin do not rely on ASF file index, it can skip damaged area 
and repair the data stream starting from first good samples.
History
AsfBin is an old Asfcut successor. The old application was using Windows Media Format SDK, which 
contained some serious bugs and limitations which I wasn't able to work around, I decided to 
write my own, so to say, SDK from scratch basing just on the ASF file specifitaion.
It all started long time ago, when my favourite episode of Anime was broken and 
I tried to repair it. Unfortunately there no tools that were able to fix it at that time.
I found out that using Windows Media Format SDK from Microsft I will be able to write 
such an app with just no time. That is how Asfcut was born.
Features:
	- cutting fragments out of all ASF files (*.asf, *.wmv,...),
- precise file joining,
- repairing damaged and/or unseekable ASF files (*),
- loseless processing,
- creating loops,
- ability to remove streams,
- adjusting packet size,
- adjusting buffer window,
- ability to removing scripts, markers,
- saving segments to a separate ASF files,
- inverting selection, so you can easily point the fragment to be deleted,
- adding markers and commands,
- delaying selected streams (not necessarily audio streams),
- printing out information on key frames location and index entries,
- control over the type of indexing,
- cutting fragments adjusted precisely to key frames locations,
- optimizing packet size,
- debugging ASF files,...
*) For all people who could not repair or process their asf files:
If you tried all possible ways using AsfBin and the tool couldn't do what you needed,
or it just simply crashed, go to the 
AsfBin Bugs section.
There you can find latest release information and maybe the issue is already 
described there. You will find out how to contact me, so I could get the problematic
file and work on how to improve AsfBin.
This tool is FREE for non-commercial use.
If you want use it for business purposes, please proceed to a 
Licencing section.
Back to top
What's new in version 1.8.3
	
		- Improved precision of resulting file duration when joining many files together.
- Added support for UTF-8 text files when importing markers, scripts and attributes. 
			With this improvement any languages like e.g. Japanese, Arabic can be used when adding 
			markers, scripts or when setting file attributes.
- AsfBin can fix files that were having incorrect entries in the metadata
			object preventing it from playing by major video players.
What's new in version 1.8.2
	
		- Removed "Human test".
- Fixed the out-of-memory issue when processing files over 2GB in size having a script command stream in it.
What's new in version 1.8.1 (Windows version)
	
		- Fixed Attributes setting dialog.
- Markers and Scripts dialogs which were completely broken (what was set 
		wasn't written to the output file) are now fixed.
- Annoying "feature" that caused closing AsfBinWin when Enter key was hit is fixed.
- Corrected check of writing to the same file as one of input files.
- Warning that was shown when allegedly precise copying was not possible is fixed.
What's new in version 1.8.0 (Windows version)
	
		- Finally added preview window allowing you precisely select 
		   times when editing should take place. The are multiple ways of
		   selecting time:
		   
			- keys (arrows, page up/down, home/end)
- mouse
- speed modifiers (hold Shift and/or Control keys to modify the behaviour)
 Preview allows you to select which video stream to view and 
		   can snap time to an exact frame presentation time.
- All path inputs are equipped with AutoComplete feature speeding up
		   the process of typing path (input/output paths). You can still use
		   the Browse button to open the standard Open/Save dialog.
- Most of the crucial controls have Tooltips associated explaining
		   how to use them.
- Range slider, allowing you to select time ranges within selected
		   files nicely shows you by using different colors where each file,
		   constituting the virtually connected file, starts and ends.
- Ability to invert selected ranges by just one button click.
- Advanced setting dialog simplified.
- Logging capability added. You can select one of 3 available 
		   verbosity levels when writing to the log file.
- You can load and save Script Command to and from external file.
- You can load and save Markers to and from external file.
- When precise recompression is not possible due to missing codeds
		   warning signs are shown (with associated tool tips).
- Preview window position can be snapped to the main window edges.
What's new in version 1.7.14
	
	  - Corrected issue with processing over 4GB files.
- Corrected problem with scripts not beeing copied from the original
	   file if copying range was not specified.
- Corrected the issue with the script samples distance limitation that
	   was set to 65s. Now it can be unlimited.
What's new in version 1.7.1
	
	  - Totally rewritten sample packing algorithm so even multiaudio
	   files with no video are packed optimally. This will also fix 
	   problems with files containing script commands and some issues with
	   streaming ASF files via Windows Media Server.
- Finally added DMO support when recompressing video. By using one
	   of two new switches -vcm and -dmo a desired technology can be 
	   selected. By default it is VCM.
- Added -infohdr switch to show all info from ASF header.
- Added -optps switch that calculates the optimal size of the packet 
	   to minimize data padding.
- Corrected timing of script commands and markers stored in the header
	   after cutting out fragments from an original file when actual start
	   time differs from demanded time due to distand key frame location.
- Removed size limitation of record data in metadata objects in header.
What's new in version 1.6.1
	
	  - The total file size info kept in the ASF header was not properly 
	   updated. This resulted in lack of seeking possibilities when streaming
	   processed file via Windows Media Server.
- Bug connected with processing files containing script command stream
	   corrected. The total time spread of all samples gathered in a single 
	   packet could go beyond 65536 ms, what was against ASF specification.
- Asfbin was losing last script command sample. This bug is corrected
	   in this version.
What's new in version 1.6
	
		- FINALLY! After 3 years! Solved the mistery behind the old tape effect 
			in the Windows Media Player - defeated buggy jitter correction algorithm 
			in the MS WMPlayer produtcs! It was possible by adding audio 
			decompression feature to asfbin and thus real sample duration measurement 
			became possible. An advanced junction optimization algorithm was implement
			resulting in smooth connections between audio tracks of joined
			ASF files.
- Added new switches allowing to set creation time of a resulting file
			to the time of the source file properly corrected by the start time
			offset (-act). Second related switch is -nots which causes all sample
			times remain as in original files.
- Added possibility to process files still recorded by live stream
			recording software or WMS archive plugin.
			Other corrections was made in order to repair almost all cases of 
			damaged files.
- Optimized file processing. Time spared thanks to those optimizations
			is used to calculate precise audio junctions (this needs some audio
			samples to be uncompressed).
- Some minor issues with segment cutting and joining were corrected.
- Thousands of tests was performed to find and correct any existing 
			bugs.
What's new in version 1.5
	
	  - New quality in cutting ASF files! AsfBin is capable to cut files
		at any position with the accuracy to one video frame regardless
		there is a key frame or not, while maintaining maximum fidelity 
		to the original. To enable this feature use -rkf switch. This is 
		not enabled by default because so far not all video formats are 
		supported.
- To perform system configuration check in order to enable as many
		codecs as possible for AsfBin use -cfg switch. AsfBin performs
		this check anyway, but only once for given Windows configuration.
- Improved recovery of damaged ASF files.
What's new in version 1.1
	
	  - Ability to save each segment to a separate ASF file using -sep switch.
- Inverting selection, so you can easily point the fragment to be deleted.
- Adding markers and commands specified by a text file.
- Delaying selected streams (not necessarily audio streams). Information
		on stream numbers can be obtained by using -info switch. 
- New version can list all key frames with their time time location.
		This allows to select more precisely the cutting time of segments.
- Control over the type of the created index. New switch -sionly and
		improved -forceindex.
- A new switch -ebkf causes a fragment to end precisely just before the 
		next key frame.
- Major improvements in parsing engine as I received a number of ASFs 
		which couldn't be repaired by the version 1.0.3, so I was able to corrent
		problems and finally make a new asfbin be able to repair them all. 
		Of course some files were so damaged that even with an expert support
		it could be hard to do this, if possible at all.
- Speed improvements especially for improperly build ASF files.
- Code review also unveiled quite many bugs that wasn't reported yet.
What's new in version 1.0.3
	
	  - Improved packet data repair routines. Some damages (1-3 bytes long)
		withing packet or sample data can be repaired.
- Improved searching for time range withing data packets when 
		some packets are damaged or not conforming ASF specification.
- Removed bug causing script commands not to be written.
- Correcting bug causing bad padding data handling. Speeding up 
		packets reading.
- Other improvements of data packets reading.
- Improved header reading routines. Asfbin is much more error-proof
		when it comes to header parsing. 
- Asfbin can now index files larger than 4GB. 
- When connecting a file with the script commands or markers with 
		a file having no such objects, asfcut was crashing. This bug 
		is removed.
What's new in version 1.0.2
	
	  - Major Win95, 98, Me incompatibilities fixed. The function for opening
		files were Unicode version only. That caused no input file could be
		opened by asfbin in the Win9x. That proofs clearly that asfbin 1.0.1
		wasn't "strongly" tested under Win9x enviroment. ;-)
- Major improvements in a header parsing code. Now some errors in the header
		will cause only minimal loss of data. 
- Code review detected many weak points, where application might crash.
- Limit to pack only one audio sample in a packet was removed.
		The limit was introduced because some players were loosing audio
		when playing resulting files. And I supposed that the lack of this
		limitation was causing such a behavior. It was not true.
		Also processing of some files could be very slow.
- Files with empty streams (with no samples in it) were processed 
		terribly slow. This bug is already removed.
- Removed a bug connected with indexing of files having hidded streams.
- When removing a stream the information on bitrate mutual exclusion 
		wasn't updated. Now it is correct.
- In some very rare case packets were built inefficiently breaching
		ASF specification. Also for some very large packet sizes, payload
		count could overflow the limit of 64 payload per packet. 
		Already correct. 
What's new in version 1.0.1
	
	  - Corrected minor bug in the displaying duration of processed
		segments. The on-screen message said alway that duration was
		to the end. The output files weren't affected by this bug.
- Corrected bugs when reading segments from segments file.
- Corrected bug cousing file not to be written when the first sample 
		time was smaller than the preroll time.
Back to topUsage:
	asfbin [INPUT MEDIA FILES] -o <out_file> [SWITCHES]
	
[INPUT MEDIA FILES] can be set as follows:
	
		| -i <infile> | <infile> is an input windows media file. Switch -i can be repeated many times. E.g.:
 asfbin -i test01.asf -i test02.asf -i D:\video\append\test03.asf -o joined.asf
 | 
	
		| -l <in_file_list> | <in_file_list> is a file containing list of file paths to join. List file
			is a text file containing subsequent files to join/cut. E.g.: D:\Video\test01.asf
 D:\Video\test02.asf
 D:\Video\append\test.asf
 All files have to be of the same video and audio format!
 
 | 
[SWITCHES]:
	
		| -sep | Write each segment to a separate file. Output file name will be treated like a name
			template where all occurences of {000} or {  } are replaced by the segment
			number. If {0} is not present, a number will be inserted right before the file name
			extension. E.g. "MyName0001.asf". "{000}" is replaced by e.g. "001", and "{   }"
			is replaced by "  1". 
 | 
	
		| -s <segments_list> | <segments_list> file containing list of segments to extract, | 
	
		| -a <attrib_list> (or -attr) | file containing list of attributes to set. | 
	
		| -m <marker_list> (or -markers) | <marker_list> is a name of a file containing a list of markers to set. 
 Each line of this file should consists of a pair:
 <time> <marker text>
 E.g.
 0:00:45 The fourty fifth second.
 
 Allowed time formats are explainded below.
 | 
	
		| -k <script_list> (or -scripts) 
 | <script_list> is a file name containing a list of scripts to set. Each line of this file should consists of:
 <time> <type> <command>
 E.g.
 15 URL http://www.radioactivepages.com
 
 This script command will cause that at 15th second a default internet browser will
			run with a url set to http://www.radioactivepages.com. Apart from the "URL" type,
			there is also other type of command supported by WMP, namely "FILENAME". This causes
			WMP to open a specified file after reaching specified timestamp.
 
 Allowed time formats are explainded below.
 
 | 
	
		| -cfg (or -config) | Forces codecs configuration check. By default AsfBin performs it only once on a given system. 
 | 
	
		| -start <times> | Starts copying from specified time. | 
	
		| -dur <times> | Copies segment of specified time, these two switches can be repeated many times, each pair defining a new segment to extract. | 
	
		| -stop <times> (or -end) 
 | Stops copying at specified time. | 
	
		| -invert (or -invertsel, -invsel) 
 | Inverts selection. Specified segments will be removed. | 
	
		| -repeat <n> | Repeats the entire resulting file  times. | 
	
		| -istart | Doesn't wait for key frame. Files are joined without any advanced fitting. Can be
			used for files previously cut. By default copying starts after finding a key frame. | 
	
		| -cvb | Copies very beginning of an input file discarding even finding key frame when joining too or more files. | 
	
		| -brkaud (or -breakaudio, -ba) 
 | Audio streams junctions will be marked as gap. Since version 1.6 this option is
			turned off by default. If still some problems with audio are experinced when playing
			with MS WMPlayer (any version) then please turn this option on. Other players like
			Media Player Classis are free from this bug. 
 | 
	
		| -brkvid (or -breakvideo, -bv) | Video streams junctions will be marked as gap. This option may be usefull when joining
			two files encoded by slightly different versions of codec what may cause artefacts
			appear on segment junctions. | 
	
		| -ebkf | Streams will end before nearest past key frame. | 
	
		| -uniq (or -unique, -u) | Makes resulting files unique by changing original ASF file identificators into unique
			ones. May be useful when using playlist capability of Windows Media Player which
			appears to take into consideration only this ID when distinguishing media files. | 
	
		| -act (or -aft) | Adjusts creation time of the file to the time of creation of the original file plus
			start time. | 
	
		| -nots | Leaves sample times and packet times unchanged. | 
	
		| -rkf (or -recreatekf) | Enables a single frame accuracy by turning on recreation of key frames whenever
			it is necessary. This mode does not guarantee correct results. While it is highly
			likely that WMV3, MP42 and MP43 video formats will be correctly handled, all other
			formats will not be probably recognized, | 
	
		| -dmo | Forces using DMO when recompressing video samples (in a current version DMO is used by default). | 
	
		| -vcm | Forces using VCM when recompressing video samples. | 
	
		| -noindex | Doesn't index output file. | 
	
		| -forceindex | Forces writting advanced index. | 
	
		| -sionly | Simple index only. | 
	
		| -nomarkers | Doesn't copy markers. | 
	
		| -noscripts | Doesn't copy script command. | 
	
		| -nostr <numbers> (or -nostream, -excludestr, -exclstr, -removestr)
 
 | doesn't copy selected streams. <numbers> are stream numbers separated by space
			or comma. This switch can be used many times. | 
	
		| -q | Quiet mode - only few information are presented. | 
	
		| -v | Verbose mode - turned on by default. | 
	
		| -details | Stronger verbose mode - shows many details about copying process, among other things key frames. | 
	
		| -debug | Strongest verbose mode - debug mode. | 
	
		| -y | Overwrites without asking. | 
	
		| -bw <milliseconds> | Forces setting of the initial play delay. This value has direct impact on the internal
			bucket size. Selecting too small value may cause sample losing. | 
	
		| -ps <bytes> | Forces size of data packets. | 
	
		| -optps <bytes> | Calculates optimized packet size to minimize data padding. | 
	
		| -rmgaps | Big time gaps are removed(*) *)This option is not yet active! | 
	
		| -adelay [-] <time> | Delays audio streams by the a specified time. The time value can be negative. | 
	
		| -sdelay <number> [-] <time> | Delays selected stream by a specified time. The time value can be negative. | 
	
		| -info | Just shows information on input sources. | 
	
		| -infokf | Just shows information on input sources and locations of key frames in selected time range. | 
	
		| -infohdr | Shows detailed information on an input ASF file header. | 
	
		| -infoidx | Shows detailed information on indices appended to a processed file. Add -details
			switch to get additional information on any eventual errors. | 
	
		| -h | Shows asfbin usage explanation. | 
<time> in general is given in seconds, but it accepts following formats as well:
	1:59:45.35 = 1 h, 59 min, 45s, 35 hundredths, 3:30 = 3 min, 30 sec.,
	1023.101 = 1023 sec. and 101 thousandths, etc.
Back to top
Examples of usage:
	- To join two ASF files into one big please type:
 asfbin -i first.asf -i second.asf -o big.asf
 
- To cut out a fragment from a bigger ASF file please type:
 asfbin -i big.asf -o part.asf -start 10:03.045 -duration 30.01
 
 
- To cut some fragment from a file that begins in the middle and lasts to the end
		of file simply give only -start parameter without duration.
 asfbin -i big.asf -o endpart.asf -start 5:45
 
 
- To extract two segments from one bigger ASF file and put in a one file please type:
 asfbin -i big.asf -o smaller.asf -start 1:15 -dur 4:00 -start
		10:15 120
 
 
- To join many ASF files into one big You can also use input file list:
 asfbin -l files.lst -o bigone.asf
 
 
- To work on the list of ASF files like on the one big file and to cut some fragments
		from it, please specify:
 asfbin -l files.lst -o parts.asf -s segments.lst
 
 
- To delay audio stream by 350ms type:
 asfbin -i input.asf -o output.asf -adelay 0.35
 
 
- To advance stream number 4 by 250ms type:
 asfbin -i input.asf -o output.asf -sdelay 4 -0.25
 
 
- To join two ASF files into one big please type knowing that the second file may
		contain progressive frames that are a continuation of the first file, type:
 (E.g. your encoder software may save streams in segmented file, each of size 50MB.
		In that case using -cvb may be helpful.)
 asfbin -i first.asf -i second.asf -o big.asf -cvb
 
 
- To remove low bitrate audio and video streams assuming that those are respectively
		streams number 1 and 3, invoke command:
 asfbin -i input.asf -o output.asf -nostr 1,3
 
 
- To extract 10 time ranges from the long input file and save them under names: short01.asf,
		short02.asf and so on, assuming that time ranges are kept in timeranges.txt file,
		invoke the command below. We also want each file to be unique.
 asfbin -i long.asf -l timeranges.txt -sep -o short{00}.asf -unique
 
 
- To print out the information on precise location of all key frames in the input
		file please run:
 asfbin -i input.asf -infokf
 
 
- To repeat a selected time range two times please run the command:
 asfbin -i test.asf -o big.asf -start 10 -dur 15 -repeat 1
 
 
- To print out the information on index entries in the input file please run:
 asfbin -i input.asf -infoidx -details > some.log
 
 
- If you want to divide file into several segments, send it via e-mail or in any other
		way and then join it together with no losses follow the instructions:
 
 asfbin -i large.wmv -o partA.wmv -y -start 0 -dur 10 -ebkf
 asfbin -i large.wmv -o partB.wmv -y -start 10 -dur 10 -ebkf
 asfbin -i large.wmv -o partC.wmv -y -start 20 -dur 10 -ebkf
 asfbin -i large.wmv -o partD.wmv -y -start 30 -dur 10 -ebkf
 
 and join it together again:
 
 asfbin -i partA.wmv -i partB.wmv -i partC.wmv -i partD.wmv -o
		large.wmv -y -istart