LSMASHSource/LSMASHVideoSource: Difference between revisions

From Avisynth wiki
Jump to navigationJump to search
Add colorspaces with alpha channel supported in version 20200726
 
(13 intermediate revisions by 2 users not shown)
Line 1: Line 1:
'''Back to [[LSMASHSource]] ←'''
<div style="max-width:62em" >
-----------------------------------------------
{{FilterCat|External_filters|Plugin_functions|Source_filters}}
'''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>
<br>
<br>
<br>
== Description ==
:This function uses [http://en.wikipedia.org/wiki/Libavcodec#Implemented_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>
== [[Script variables|Syntax and Parameters]] ==
== [[Script variables|Syntax and Parameters]] ==
:{{Template:FuncDef|LSMASHVideoSourc (string source, int "track", int "threads", int "seek_mode", int "seek_threshold", bool "dr", 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>
::{{Par2|seek_mode|int|0}}
::{{Par2|seek_mode|int|0}}
:::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.
::::- 1 : Unsafe
::::*1 : Unsafe
:::::This mode retries sequential decoding from the next closest RAP up to 3 cycles when any fatal decoding error occurs.
:::::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.
:::::If all 3 trial failed, then return the last returned frame.
::::- 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,
::::and
::::and
:::::- you request to seek the M-th frame called f(M) from the N-th frame called f(N).
:::::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
::::If M > N and M - N <= T, then
:::::the decoder tries to get f(M) by decoding frames from f(N) sequentially.
:::::the decoder tries to get f(M) by decoding frames from f(N) sequentially.
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 56: Line 50:
:::For H.264 streams, in addition, 2 lines could be added because of the optimized chroma MC.
:::For H.264 streams, in addition, 2 lines could be added because of the optimized chroma MC.
<br>
<br>
::{{Par2|stacked|bool|false}}
::{{Par2|fpsnum|int|0}}
:::Use the stacked format for a hack of AviSynth high bit-depth support if set to true.
:::Forced frame rate numerator.
:::The stacked format splits MSB and LSB into vertically, and MSB comes on top of output image.
:::If frame rate is set to a positive value, output frame rate is forced to the specified value by padding and/or dropping frames.
:::Note: direct rendering is not available at all if stacked format is used.
:::Otherwise, output frame rate is set to a computed average frame rate and the output process is performed by actual frame-by-frame.
<br>
::{{Par2|fpsden|int|1}}
:::Forced frame rate denominator.
:::See 'fpsnum' above.
<br>
<br>
::{{Par2|format|string|""}}
::{{Par2|format|string|""}}
Line 103: 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 128: 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]] / Grayscale
|-
|"Y10"
|10-bit grayscale (ffmpeg only)
|-
|"Y12"
|12-bit grayscale
|-
|"Y16"
|16-bit grayscale
|-
|-
|"YUY2"
|"YUY2"
Line 135: Line 181:
|[[RGB24]] / 4:4:4 interleaved
|[[RGB24]] / 4:4:4 interleaved
|-
|-
! colspan="2"| *YV12/16/24 allow bit depths >8 using the [[Stack16]] format.
|"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
|-
! 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.
LSMASHVideoSourc with default settings:
LSMASHVideoSourc(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>
<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 23: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.

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.


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