LSMASHSource/LSMASHVideoSource

From Avisynth wiki
(Difference between revisions)
Jump to: navigation, search
(Syntax and Parameters: update to coincide with r748)
(Add colorspaces with alpha channel supported in version 20200726)
 
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 +
<div style="max-width:62em" >
 
{{FilterCat|External_filters|Plugin_functions|Source_filters}}
 
{{FilterCat|External_filters|Plugin_functions|Source_filters}}
'''Back to [[LSMASHSource]] &larr;'''
+
'''LSMASHVideoSource''' uses [http://en.wikipedia.org/wiki/Libav#Video_codecs libavcodec] as a video decoder and [http://github.com/l-smash/l-smash L-SMASH] as a demuxer. Recommended for MP4, MOV, [http://en.wikipedia.org/wiki/ISO_base_media_file_format ISO Base Media] and its derived file formats. One advantage of LSMASHVideoSource is that it doesn't need to create an index file for its supported formats.
-----------------------------------------------
+
<br>
+
== Description ==
+
This function uses [http://en.wikipedia.org/wiki/Libav#Video_codecs libavcodec] as a video decoder and [http://github.com/l-smash/l-smash L-SMASH] as a demuxer. Recommended for MP4, MOV, [http://en.wikipedia.org/wiki/ISO_base_media_file_format ISO Base Media] and its derived file formats.<br>
+
One advantage of LSMASHVideoSource is that it doesn't need to create an index file for its supported formats.
+
 
<br>
 
<br>
 
<br>
 
<br>
 
== [[Script variables|Syntax and Parameters]] ==
 
== [[Script variables|Syntax and Parameters]] ==
:{{Template:FuncDef|LSMASHVideoSource (string source, int "track", int "threads", int "seek_mode", int "seek_threshold", bool "dr", int "fpsnum", int "fpsden", bool "stacked", string "format")}}
+
:{{Template:FuncDef|LSMASHVideoSource (string source, int "track", int "threads", int "seek_mode", int "seek_threshold", bool "dr", int "fpsnum", int "fpsden", string "format", string "decoder", int "prefer_hw", int "ff_loglevel)"}}
 
<br>
 
<br>
 
::{{Par2|source|string| }}
 
::{{Par2|source|string| }}
Line 19: Line 15:
 
<br>
 
<br>
 
::{{Par2|threads|int|0}}
 
::{{Par2|threads|int|0}}
:::The number of threads to decode a stream by libavcodec.
+
:::The number of threads to decode a stream by [[wikipedia:Libavcodec|libavcodec]].
 
:::The value 0 means the number of threads is determined automatically and then the maximum value will be up to 16.
 
:::The value 0 means the number of threads is determined automatically and then the maximum value will be up to 16.
 
<br>
 
<br>
Line 25: Line 21:
 
:::How to process when any error occurs during decoding a video frame.
 
:::How to process when any error occurs during decoding a video frame.
 
::::*0 : Normal
 
::::*0 : Normal
:::::This mode retries sequential decoding from the next closest RAP up to 3 cycles when any decoding error occurs.
+
:::::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.
 
:::::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.
 
:::::Still error occurs, then return the last returned frame.
Line 33: Line 29:
 
::::*2 : Aggressive
 
::::*2 : Aggressive
 
:::::This mode returns the last returned frame when any fatal decoding error occurs.
 
:::::This mode returns the last returned frame when any fatal decoding error occurs.
<br>
 
 
::: * RAP is an abbreviation of random accessible point.
 
::: * RAP is an abbreviation of random accessible point.
 
<br>
 
<br>
 
::{{Par2|seek_threshold|int|10}}
 
::{{Par2|seek_threshold|int|10}}
:::The threshold to decide whether a decoding starts from the closest RAP to get the requested video frame or doesn't.
+
:::The threshold to decide whether a decoding starts from the closest RAP* to get the requested video frame or doesn't.
 
::::Let's say
 
::::Let's say
 
:::::the threshold is T,
 
:::::the threshold is T,
Line 48: Line 43:
 
:::::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.
 
:::::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.
 
:::::Otherwise, the decoder tries to get f(M) by decoding frames from the frame which is the closest RAP sequentially.
<br>
 
 
::: * RAP is an abbreviation of random accessible point.
 
::: * RAP is an abbreviation of random accessible point.
 
<br>
 
<br>
Line 63: Line 57:
 
::{{Par2|fpsden|int|1}}
 
::{{Par2|fpsden|int|1}}
 
:::Forced frame rate denominator.
 
:::Forced frame rate denominator.
:::See 'fpsnum' in details.
+
:::See 'fpsnum' above.
<br>
+
::{{Par2|stacked|bool|false}}
+
:::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.
+
 
<br>
 
<br>
 
::{{Par2|format|string|""}}
 
::{{Par2|format|string|""}}
Line 112: Line 101:
 
|-
 
|-
 
|"YUV420P12"
 
|"YUV420P12"
|12-bit 4:2:0 planar - (ffmpeg only)
+
|12-bit 4:2:0 planar
 
|-
 
|-
 
|"YUV422P12"
 
|"YUV422P12"
|12-bit 4:2:2 planar - (ffmpeg only)
+
|12-bit 4:2:2 planar
 
|-
 
|-
 
|"YUV444P12"
 
|"YUV444P12"
|12-bit 4:4:4 planar - (ffmpeg only)
+
|12-bit 4:4:4 planar
 
|-
 
|-
 
|"YUV420P14"
 
|"YUV420P14"
|14-bit 4:2:0 planar - (ffmpeg only)
+
|14-bit 4:2:0 planar
 
|-
 
|-
 
|"YUV422P14"
 
|"YUV422P14"
|14-bit 4:2:2 planar - (ffmpeg only)
+
|14-bit 4:2:2 planar
 
|-
 
|-
 
|"YUV444P14"
 
|"YUV444P14"
|14-bit 4:4:4 planar - (ffmpeg only)
+
|14-bit 4:4:4 planar
 
|-
 
|-
 
|"YUV420P16"
 
|"YUV420P16"
Line 137: Line 126:
 
|"YUV444P16"
 
|"YUV444P16"
 
|16-bit 4:4:4 planar
 
|16-bit 4:4:4 planar
 +
|-
 +
|"YUVA420P8"
 +
|8-bit 4:2:0:4 planar with alpha channel
 +
|-
 +
|"YUVA422P8"
 +
|8-bit 4:2:2:4 planar with alpha channel
 +
|-
 +
|"YUVA444P8"
 +
|8-bit 4:4:4:4 planar with alpha channel
 +
|-
 +
|"YUVA420P10"
 +
|10-bit 4:2:0:4 planar with alpha channel
 +
|-
 +
|"YUVA422P10"
 +
|10-bit 4:2:2:4 planar with alpha channel
 +
|-
 +
|"YUVA444P10"
 +
|10-bit 4:4:4:4 planar with alpha channel
 +
|-
 +
|"YUVA420P12"
 +
|12-bit 4:2:0:4 planar with alpha channel
 +
|-
 +
|"YUVA422P12"
 +
|12-bit 4:2:0:4 planar with alpha channel
 +
|-
 +
|"YUVA444P12"
 +
|12-bit 4:4:4:4 planar with alpha channel
 +
|-
 +
|"YUVA420P16"
 +
|16-bit 4:2:0:4 planar with alpha channel
 +
|-
 +
|"YUVA422P16"
 +
|16-bit 4:2:2:4 planar with alpha channel
 +
|-
 +
|"YUVA420P16"
 +
|16-bit 4:4:4:4 planar with alpha channel
 
|-
 
|-
 
|"Y8"
 
|"Y8"
 
|[[Y8]] / Grayscale
 
|[[Y8]] / Grayscale
 +
|-
 +
|"Y10"
 +
|10-bit grayscale (ffmpeg only)
 +
|-
 +
|"Y12"
 +
|12-bit grayscale
 +
|-
 +
|"Y16"
 +
|16-bit grayscale
 
|-
 
|-
 
|"YUY2"
 
|"YUY2"
Line 150: Line 184:
 
|[[RGB32]] / 4:4:4:4 interleaved
 
|[[RGB32]] / 4:4:4:4 interleaved
 
|-
 
|-
! colspan="2"| *YV12, YV16 and YV24 allow bit depths greater than 8.
+
|"RGB48"
 +
|16-bit RGB / 4:4:4 interleaved
 +
|-
 +
|"RGB64"
 +
|16-bit RGBA / 4:4:4:4 interleaved
 +
|-
 +
|"GBRP8"
 +
|8-bit RGB / 4:4:4 planar
 +
|-
 +
|"GBRP10"
 +
|10-bit RGB / 4:4:4 planar
 +
|-
 +
|"GBRP12"
 +
|12-bit RGB / 4:4:4 planar
 +
|-
 +
|"GBRP14"
 +
|14-bit RGB / 4:4:4 planar
 +
|-
 +
|"GBRP16"
 +
|16-bit RGB / 4:4:4 planar
 +
|-
 +
|"GBRAP8"
 +
|8-bit RGBA / 4:4:4:4 planar
 +
|-
 +
|"GBRAP10"
 +
|10-bit RGBA / 4:4:4:4 planar
 +
|-
 +
|"GBRAP12"
 +
|12-bit RGBA / 4:4:4:4 planar
 +
|-
 +
|"GBRAP14"
 +
|14-bit RGBA / 4:4:4:4 planar
 +
|-
 +
|"GBRAP16"
 +
|16-bit RGBA / 4:4:4:4 planar
 +
|-
 +
! colspan="2"| High bit depth is only supported in AviSynth+ and VapourSynth
 
|}
 
|}
 
:::Note: direct rendering is not available at all if pixel format is forced.
 
:::Note: direct rendering is not available at all if pixel format is forced.
 
<br>
 
<br>
 
+
::{{Par2|decoder|string|""}}
== Examples ==
+
:::Names of preferred decoder candidates, separated by comma. For instance, if you prefer to use the 'h264_qsv' and 'mpeg2_qsv' decoders instead of the generally used 'h264' and 'mpeg2video' decoder, then specify as "h264_qsv,mpeg2_qsv". The evaluations are done in the written order and the first matched decoder, if any, is used.
LSMASHVideoSource with default settings:
+
LSMASHVideoSource(source="source.mp4", track=0, threads=0, seek_mode=0,
+
\                seek_threshold=10, dr=false, stacked=false, format="")
+
 
<br>
 
<br>
 +
::{{Par2|prefer_hw|int|0}}
 +
:::Whether to prefer hardware accelerated decoder to software decoder.
 +
:::Has no effect if 'decoder' is specified.
 +
:::* 0 : Use default software decoder.
 +
:::* 2 : Use Intel Quick Sync Video acceleration for supported codec, otherwise use default software decoder.
 +
:::* 3 : Try hardware decoder in the order of CUVID->QSV. If none is available then use default software decoder.
 
<br>
 
<br>
 +
::{{Par2|ff_loglevel|int|0}}
 +
:::Set the log level in FFmpeg.
 +
:::* 0 : AV_LOG_QUIET - Print no output.
 +
:::* 1 : AV_LOG_PANIC - Something went really wrong and we will crash now.
 +
:::* 2 : AV_LOG_FATAL - Something went wrong and recovery is not possible.
 +
:::* 3 : AV_LOG_ERROR - Something went wrong and cannot losslessly be recovered. However, not all future data is affected.
 +
:::* 4 : AV_LOG_WARNING - Something somehow does not look correct. This may or may not lead to problems.
 +
:::* 5 : AV_LOG_INFO - Standard information.
 +
:::* 6 : AV_LOG_VERBOSE - Detailed information.
 +
:::* 7 : AV_LOG_DEBUG - Stuff which is only useful for libav* developers.
 +
:::* 8 : AV_LOG_TRACE - Extremely verbose debugging, useful for libav* development.
 +
<br>
 +
</div>
 +
 +
== Examples ==
 +
<div style="max-width:62em" >
 +
<div {{BoxWidthIndent|56|1}} >
 +
## LSMASHVideoSource with default settings:
 +
'''LSMASHVideoSource'''("source.mp4", track=0, threads=0, seek_mode=0,
 +
\                seek_threshold=10, dr=false, fpsnum=0, fpsden=1,
 +
\                format="", decoder="", prefer_hw=0, ff_loglevel=0)
 +
</div>
 +
<div {{BoxWidthIndent|56|1}} >
 +
## Decoding 10bit, YUV 4:2:0 source and converting to 8-bit.
 +
'''LSMASHVideoSource'''(<''path''>, format="YUV420P10")
 +
[[ConvertBits]](8, dither=0) ## '0' means on, '-1' means off
 +
</div>
 +
</div>
 
-----------------------------------------------
 
-----------------------------------------------
 
'''Back to [[LSMASHSource]] &larr;'''
 
'''Back to [[LSMASHSource]] &larr;'''

Latest revision as of 22:40, 29 July 2020

LSMASHVideoSource uses libavcodec as a video decoder and L-SMASH as a demuxer. Recommended for MP4, MOV, ISO Base Media and its derived file formats. One advantage of LSMASHVideoSource is that it doesn't need to create an index file for its supported formats.

[edit] Syntax and Parameters

LSMASHVideoSource (string source, int "track", int "threads", int "seek_mode", int "seek_threshold", bool "dr", int "fpsnum", int "fpsden", string "format", string "decoder", int "prefer_hw", int "ff_loglevel)"


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  track = 0
The track number to open in the source file.
The value 0 means trying to get the first detected video stream.


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.


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' above.


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
"YUV422P12" 12-bit 4:2:2 planar
"YUV444P12" 12-bit 4:4:4 planar
"YUV420P14" 14-bit 4:2:0 planar
"YUV422P14" 14-bit 4:2:2 planar
"YUV444P14" 14-bit 4:4:4 planar
"YUV420P16" 16-bit 4:2:0 planar
"YUV422P16" 16-bit 4:2:2 planar
"YUV444P16" 16-bit 4:4:4 planar
"YUVA420P8" 8-bit 4:2:0:4 planar with alpha channel
"YUVA422P8" 8-bit 4:2:2:4 planar with alpha channel
"YUVA444P8" 8-bit 4:4:4:4 planar with alpha channel
"YUVA420P10" 10-bit 4:2:0:4 planar with alpha channel
"YUVA422P10" 10-bit 4:2:2:4 planar with alpha channel
"YUVA444P10" 10-bit 4:4:4:4 planar with alpha channel
"YUVA420P12" 12-bit 4:2:0:4 planar with alpha channel
"YUVA422P12" 12-bit 4:2:0:4 planar with alpha channel
"YUVA444P12" 12-bit 4:4:4:4 planar with alpha channel
"YUVA420P16" 16-bit 4:2:0:4 planar with alpha channel
"YUVA422P16" 16-bit 4:2:2:4 planar with alpha channel
"YUVA420P16" 16-bit 4:4:4:4 planar with alpha channel
"Y8" Y8 / Grayscale
"Y10" 10-bit grayscale (ffmpeg only)
"Y12" 12-bit grayscale
"Y16" 16-bit grayscale
"YUY2" YUY2 / 4:2:2 interleaved
"RGB24" RGB24 / 4:4:4 interleaved
"RGB32" RGB32 / 4:4:4:4 interleaved
"RGB48" 16-bit RGB / 4:4:4 interleaved
"RGB64" 16-bit RGBA / 4:4:4:4 interleaved
"GBRP8" 8-bit RGB / 4:4:4 planar
"GBRP10" 10-bit RGB / 4:4:4 planar
"GBRP12" 12-bit RGB / 4:4:4 planar
"GBRP14" 14-bit RGB / 4:4:4 planar
"GBRP16" 16-bit RGB / 4:4:4 planar
"GBRAP8" 8-bit RGBA / 4:4:4:4 planar
"GBRAP10" 10-bit RGBA / 4:4:4:4 planar
"GBRAP12" 12-bit RGBA / 4:4:4:4 planar
"GBRAP14" 14-bit RGBA / 4:4:4:4 planar
"GBRAP16" 16-bit RGBA / 4:4:4:4 planar
High bit depth is only supported in AviSynth+ and VapourSynth
Note: direct rendering is not available at all if pixel format is forced.


string  decoder = ""
Names of preferred decoder candidates, separated by comma. For instance, if you prefer to use the 'h264_qsv' and 'mpeg2_qsv' decoders instead of the generally used 'h264' and 'mpeg2video' decoder, then specify as "h264_qsv,mpeg2_qsv". The evaluations are done in the written order and the first matched decoder, if any, is used.


int  prefer_hw = 0
Whether to prefer hardware accelerated decoder to software decoder.
Has no effect if 'decoder' is specified.
  • 0 : Use default software decoder.
  • 2 : Use Intel Quick Sync Video acceleration for supported codec, otherwise use default software decoder.
  • 3 : Try hardware decoder in the order of CUVID->QSV. If none is available then use default software decoder.


int  ff_loglevel = 0
Set the log level in FFmpeg.
  • 0 : AV_LOG_QUIET - Print no output.
  • 1 : AV_LOG_PANIC - Something went really wrong and we will crash now.
  • 2 : AV_LOG_FATAL - Something went wrong and recovery is not possible.
  • 3 : AV_LOG_ERROR - Something went wrong and cannot losslessly be recovered. However, not all future data is affected.
  • 4 : AV_LOG_WARNING - Something somehow does not look correct. This may or may not lead to problems.
  • 5 : AV_LOG_INFO - Standard information.
  • 6 : AV_LOG_VERBOSE - Detailed information.
  • 7 : AV_LOG_DEBUG - Stuff which is only useful for libav* developers.
  • 8 : AV_LOG_TRACE - Extremely verbose debugging, useful for libav* development.


[edit] Examples

## LSMASHVideoSource with default settings:
LSMASHVideoSource("source.mp4", track=0, threads=0, seek_mode=0, 
\                 seek_threshold=10, dr=false, fpsnum=0, fpsden=1, 
\                 format="", decoder="", prefer_hw=0, ff_loglevel=0)
## Decoding 10bit, YUV 4:2:0 source and converting to 8-bit.
LSMASHVideoSource(<path>, format="YUV420P10")
ConvertBits(8, dither=0) ## '0' means on, '-1' means off

Back to LSMASHSource

Personal tools