LSMASHSource/LWLibavVideoSource

From Avisynth wiki
(Difference between revisions)
Jump to: navigation, search
m (v901 changes)
m ("stacked" argument: add example)
Line 78: Line 78:
 
::{{Par2|stacked|bool|false}}
 
::{{Par2|stacked|bool|false}}
 
:::Use the stacked format for a hack of AviSynth high bit-depth support if set to true.
 
:::Use the stacked format for a hack of AviSynth high bit-depth support if set to true.
:::The stacked format splits MSB and LSB into vertically, and MSB comes on top of output image.
 
 
:::Note: direct rendering is not available at all if stacked format is used.
 
:::Note: direct rendering is not available at all if stacked format is used.
 +
:::The stacked format splits MSB and LSB vertically, and MSB comes on top of output image.
 +
<div {{BoxWidthIndent|46|6}} >
 +
## Decoding 10bit, YUV 4:2:0 source
 +
'''LWLibavVideoSource'''(<''path''>, stacked=true, format="YUV420P10")
 +
[[ConvertFromStacked]](bits=10)
 +
[[ConvertBits]](8, dither=0) ## '0' means on, '-1' means off
 +
</div>
 
<br>
 
<br>
 
::{{Par2|format|string|""}}
 
::{{Par2|format|string|""}}

Revision as of 01:19, 22 January 2018

This function uses libavcodec as a video decoder and libavformat as a demuxer.

Syntax and Parameters

LWLibavVideoSource (string source, int "stream_index", int "threads", bool "cache", int "seek_mode", int "seek_threshold", bool "dr", int "fpsnum", int "fpsden", bool "repeat", int "dominance", bool "stacked", string "format", string "decoder")


string  source =
The path of the source file; path can be omitted if the source file is in the same directory as the AviSynth script (*.avs).


int  stream_index = -1
The stream index to open in the source file. The value -1 means trying to get the video stream which has the largest resolution.


int  threads = 0
The number of threads to decode a stream by libavcodec.
The value 0 means the number of threads is determined automatically and then the maximum value will be up to 16.


bool  cache = true
Create the index file (.lwi) to the same directory as the source file if set to true.
The index file avoids parsing all frames in the source file at the next or later access.
Parsing all frames is very important for frame accurate seek.


int  seek_mode = 0
How to process when any error occurs during decoding a video frame.
  • 0 : Normal
This mode retries sequential decoding from the next closest RAP up to 3 cycles when any decoding error occurs.
If all 3 trial failed, retry sequential decoding from the last RAP by ignoring trivial errors.
Still error occurs, then return the last returned frame.
  • 1 : Unsafe
This mode retries sequential decoding from the next closest RAP up to 3 cycles when any fatal decoding error occurs.
If all 3 trial failed, then return the last returned frame.
  • 2 : Aggressive
This mode returns the last returned frame when any fatal decoding error occurs.


* RAP is an abbreviation of random accessible point.


int  seek_threshold = 10
The threshold to decide whether a decoding starts from the closest RAP to get the requested video frame or doesn't.
Let's say
the threshold is T,
and
you request to seek the M-th frame called f(M) from the N-th frame called f(N).
If M > N and M - N <= T, then
the decoder tries to get f(M) by decoding frames from f(N) sequentially.
If M < N or M - N > T, then
check the closest RAP at the first.
After the check, if the closest RAP is identical with the last RAP, do the same as the case M > N and M - N <= T.
Otherwise, the decoder tries to get f(M) by decoding frames from the frame which is the closest RAP sequentially.


* RAP is an abbreviation of random accessible point.


bool  dr = false
Try direct rendering from the video decoder if set to true.
The output resolution will be aligned to be mod16-width and mod32-height by assuming two vertical 16x16 macroblock.
For H.264 streams, in addition, 2 lines could be added because of the optimized chroma MC.


int  fpsnum = 0
Forced frame rate numerator.
If frame rate is set to a positive value, output frame rate is forced to the specified value by padding and/or dropping frames.
Otherwise, output frame rate is set to a computed average frame rate and the output process is performed by actual frame-by-frame.


int  fpsden = 1
Forced frame rate denominator.
See 'fpsnum' in details.


bool  repeat = false
Reconstruct frames by the flags specified in video stream and then treat all frames as interlaced if set to true and usable.


int  dominance = 0
Which field, top or bottom, is displayed first.
  • 0 : Obey source flags
  • 1 : TFF i.e. Top -> Bottom
  • 2 : BFF i.e. Bottom -> Top
This option is enabled only if one or more of the following conditions is true.
- 'repeat' is set to true.
- There is a video frame consisting of two separated field coded pictures


bool  stacked = false
Use the stacked format for a hack of AviSynth high bit-depth support if set to true.
Note: direct rendering is not available at all if stacked format is used.
The stacked format splits MSB and LSB vertically, and MSB comes on top of output image.
## Decoding 10bit, YUV 4:2:0 source
LWLibavVideoSource(<path>, stacked=true, format="YUV420P10")
ConvertFromStacked(bits=10)
ConvertBits(8, dither=0) ## '0' means on, '-1' means off


string  format = ""
Force specified output pixel format if 'format' is specified.
The following formats are available currently.
Format Comments
"YUV420P8" YV12 / 4:2:0 planar
"YUV422P8" YV16 / 4:2:2 planar
"YUV444P8" YV24 / 4:4:4 planar
"YUV410P8" 4:1:0 planar
"YUV411P8" YV411 / 4:1:1 planar
"YUV420P9" 9-bit 4:2:0 planar
"YUV422P9" 9-bit 4:2:2 planar
"YUV444P9" 9-bit 4:4:4 planar
"YUV420P10" 10-bit 4:2:0 planar
"YUV422P10" 10-bit 4:2:2 planar
"YUV444P10" 10-bit 4:4:4 planar
"YUV420P12" 12-bit 4:2:0 planar - (ffmpeg only)
"YUV422P12" 12-bit 4:2:2 planar - (ffmpeg only)
"YUV444P12" 12-bit 4:4:4 planar - (ffmpeg only)
"YUV420P14" 14-bit 4:2:0 planar - (ffmpeg only)
"YUV422P14" 14-bit 4:2:2 planar - (ffmpeg only)
"YUV444P14" 14-bit 4:4:4 planar - (ffmpeg only)
"YUV420P16" 16-bit 4:2:0 planar
"YUV422P16" 16-bit 4:2:2 planar
"YUV444P16" 16-bit 4:4:4 planar
"Y8" Y8 / Grayscale
"YUY2" YUY2 / 4:2:2 interleaved
"RGB24" RGB24 / 4:4:4 interleaved
"RGB32" RGB32 / 4:4:4:4 interleaved
*YV12, YV16 and YV24 allow bit depths greater than 8.
Note: direct rendering is not available at all if pixel format is forced.


string  decoder = ""
Same as 'decoder' of LSMASHVideoSource.


Examples

LWLibavVideoSource with default settings:

LWLibavVideoSource(source="source.m2ts", stream_index=-1, threads=0, 
\                  cache=true, seek_mode=0, seek_threshold=10, dr=false, 
\                  fpsnum=0, fpsden=1, repeat=false, dominance=0, stacked=false, 
\                  format="", decoder="")




Back to LSMASHSource

Personal tools