FFmpegSource

From Avisynth wiki
(Difference between revisions)
Jump to: navigation, search
m (Exported AviSynth variables: cosmetics)
(Alternate Downloads: add ffms2_1c6169a and remove owncube links that no longer work)
(35 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{FilterCat|External_filters|Source_filters|Plugins}}
+
{{FilterCat5|External_filters|Plugins|Plugins_x64|Source_filters|Deep_color_tools}}
{{Filter3
+
{{Filter5
| {{Author/Myrsloik}}
+
|1={{Author/Myrsloik}}, et al.
| v2.20
+
|2=v2.23.1
| [http://github.com/FFMS/ffms2/releases FFMS2 v2.20]
+
|3=[https://github.com/FFMS/ffms2/releases FFMS2 v2.23.1]
| Source filters  
+
|4=[[FFmpegSource#Alternate_Downloads|Alternate Downloads]]
| [http://opensource.org/licenses/MIT MIT] / binary is [http://www.gnu.org/licenses/gpl.txt GPLv3]
+
|5=[https://github.com/FFMS/ffms2/blob/master/doc/ffms2-avisynth.md User Manual]
|6=[http://forum.doom9.org/showthread.php?t=127037 Doom9 Thread]}}
+
|6=Source filters  
<br>
+
|7=[https://opensource.org/licenses/MIT MIT] / binary is [https://www.gnu.org/licenses/gpl.txt GPLv3]
 +
|8=[https://forum.doom9.org/showthread.php?t=127037 Doom9 Thread]}}
 +
 
 
== Description ==
 
== Description ==
:Opens files using FFmpeg and (almost) nothing else. May be frame accurate on good days. The source is MIT licensed and can be obtained from http://github.com/FFMS/ffms2/. The precompiled binary is GPL3 licensed.
+
<div style="max-width:62em" >
 +
Opens files using [https://www.ffmpeg.org/ FFmpeg] and nothing else. May be frame accurate on good days. The source is MIT licensed and can be obtained from the [https://github.com/FFMS/ffms2/ GitHub repository]. The precompiled binary is GPL3 licensed.
 
<br>
 
<br>
 
+
</div>
 
== Requirements ==
 
== Requirements ==
:- AviSynth 2.5.8 Alpha5] or later
+
<div style="max-width:62em" >
:- Supported color formats: [[RGB24]], [[RGB32]], [[YUY2]], [[YV12]]
+
* [x86]: [[AviSynth+]] or [https://sourceforge.net/projects/avisynth2/ AviSynth 2.6]
<br>
+
* [x64]: [[AviSynth+]]
 +
* Supported color formats: [[RGB24]], [[RGB32]], [[YUY2]], [[Y8]], [[YV12]], [[YV16]], [[YV24]], [[YV411]]<br>
 +
**AviSynth+: supports native high bit depth formats
 +
</div>
 
== Limitations ==
 
== Limitations ==
*Requires [http://haali.su/mkv/ Haali's Media Splitter] if you want to seek in OGM or MPEG PS/TS. Trying to do non-linear access in those containers without it will end in tears.
+
<div style="max-width:62em" >
 
+
*Haali's splitter requires transport streams to but cut at packed boundaries. Use [http://forum.doom9.org/showthread.php?t=125447 TsRemux] to fix the stream if you get an error message complaining about this.
+
 
+
 
*Because of LAVF's demuxer, most raw streams (such as elementary h264 and other mpeg video streams) will fail to work properly.
 
*Because of LAVF's demuxer, most raw streams (such as elementary h264 and other mpeg video streams) will fail to work properly.
  
*FFAudioSource() will have to remake any index implicitly created by FFVideoSource() and therefore code like  
+
*'''FFAudioSource''' will have to remake any index implicitly created by '''FFVideoSource''' and therefore code like
:<pre style="width: 50%">AudioDub(FFVideoSource(X), FFAudioSource(X))</pre>
+
<div {{ListItemContinue}} >
will require two indexing passes. Apart from the time consumed this is harmless. To work around it open the audio first:  
+
&nbsp;&nbsp;<code>AudioDub( FFVideoSource(X), FFAudioSource(X) )</code> <br>
:<pre style="width: 50%">A = FFAudioSource(X) V = FFVideoSource(X) AudioDub(V, A)</pre>
+
will require two indexing passes. Apart from the time consumed this is harmless. To work around it open the audio first: <br>
or use FFIndex(), like so:  
+
&nbsp;&nbsp;<code>A = FFAudioSource(X)</code><br>
:<pre style="width: 50%">FFIndex(X) AudioDub(FFVideoSource(X), FFAudioSource(X))</pre>
+
&nbsp;&nbsp;<code>V = FFVideoSource(X)</code><br>
<br>
+
&nbsp;&nbsp;<code>AudioDub(V, A)</code> <br>
 +
('''FFmpegSource2''' does this for you with a single function call) or use '''FFIndex''', like so: <br>
 +
&nbsp;&nbsp;<code>FFIndex(X)</code><br>
 +
&nbsp;&nbsp;<code>AudioDub( FFVideoSource(X), FFAudioSource(X) )</code>.
 +
</div>
 +
*Interlaced H.264 mostly works these days, but seeking may occasionally result in corruption.
 +
*Transport Streams will not decode reliably without {{FuncArg|seekmode}} -1.
 +
*Open-GOP H.264 will sometimes produces corruption when seeking.
 +
</div>
 
== Known Issues ==
 
== Known Issues ==
 
+
<div style="max-width:62em" >
* Interlaced H.264 is decoded in an odd way; each field gets its own full-height frame and the fieldrate is reported as the framerate, and furthermore one of the fields (odd or even) may "jump around". To get the correct behavior, you can try setting <tt>fpsnum</tt> and <tt>fpsden</tt> so that the framerate is halved (may or may not work). This issue is caused by libavcodec.
+
(''NOTE this section does not appear in the [http://github.com/FFMS/ffms2/blob/master/doc/ffms2-avisynth.md latest documentation] and may be obsolete'')
 
+
* Interlaced H.264 is decoded in an odd way; each field gets its own full-height frame and the fieldrate is reported as the framerate, and furthermore one of the fields (odd or even) may "jump around". To get the correct behavior, you can try setting {{FuncArg|fpsnum}} and {{FuncArg|fpsden}} so that the framerate is halved (may or may not work). This issue is caused by libavcodec.  
* Decoding some M2TS files using Haali's splitter will cause massive blocking and other corruption issues. You can work around the issue either by remuxing the file to MKV (using GDSMux (make sure you untick "minimize output file size" in the Global settings tab) or eac3to), or (if you will be doing linear decoding only) by setting <tt>demuxer="lavf"</tt> in <tt>FFIndex</tt> and using <tt>seekmode=0</tt> with <tt>FFVideoSource</tt>. The cause of this issue is unknown but being investigated.
+
</div>
<br>
+
 
== Compatibility ==
 
== Compatibility ==
 
+
<div style="max-width:62em" >
 
===Video===
 
===Video===
  
Line 45: Line 55:
 
*VOB, MPG: Seeking seems to be off by one or two frames now and then
 
*VOB, MPG: Seeking seems to be off by one or two frames now and then
 
*M2TS, TS: Seeking seems to be off a few frames here and there
 
*M2TS, TS: Seeking seems to be off a few frames here and there
 +
**As MP4 container supports MPEG2/4 video stream, when seeking is off, you can try copying the stream to MP4 container (maybe without audio.) With FFmpeg: <code>ffmpeg -i file.m2ts -c:v copy -an file.mp4</code>. You might have to specify <code>-fflags +genpts</code> before <code>-i</code>.
 
*Image files: Most formats can be opened if seekmode=-1 is set, no animation support
 
*Image files: Most formats can be opened if seekmode=-1 is set, no animation support
  
 
===Audio===
 
===Audio===
  
Seeking should be sample-accurate with most codecs in AVI, MKV, MP4 and FLV with two notable exceptions, namely MP3 and AC3 where FFmpeg's decoders seem to be completely broken (with MP3 in particular you can feed the decoder the same encoded data three times in a row and get a different decoded result every time). Still, results should usually be "good enough" for most purposes.
+
Seeking should be sample-accurate with most codecs in AVI, MKV, MP4 and FLV.  
  
Decoding linearly will almost always work correctly.
+
Decoding linearly will almost always give correct results, and forward-seeks from trimming should result in at most a few hundred samples of corruption.
<br>
+
 
<br>
 
<br>
 +
</div>
 
== Indexing and You ==
 
== Indexing and You ==
Before FFMS2 can open a file, it must be indexed first so that keyframe/sample positions are known and seeking is easily accomplished. This is done automatically when using <tt>FFVideoSource()</tt> or <tt>FFAudioSource()</tt>, but if you want to you can invoke the indexing yourself by calling <tt>FFIndex()</tt>, or by running <tt>ffmsindex.exe</tt>. By default the index is written to a file so it can be reused the next time you open the same file, but this behavior can be turned off if desired.
+
<div style="max-width:62em" >
 +
Before '''FFMS2''' can open a file, it must be indexed first so that keyframe/sample positions are known and seeking is easily accomplished. This is done automatically when using '''FFVideoSource''' or '''FFAudioSource''', but if you want to you can invoke the indexing yourself by calling '''FFIndex''', or by running <tt>ffmsindex.exe</tt>. By default the index is written to a file so it can be reused the next time you open the same file, but this behavior can be turned off if desired.
  
If you wonder why FFMS2 takes so long opening files, the indexing is the answer. If you want a progress report on the indexing, you can use the supplied ffmsindex.exe commandline program.
+
If you wonder why '''FFMS2''' takes so long opening files, the indexing is the answer. If you want a progress report on the indexing, you can use the supplied <tt>ffmsindex.exe</tt> command line program.
<br>
+
 
<br>
 
<br>
 +
</div>
 
== Function Reference ==
 
== Function Reference ==
 +
<div style="max-width:62em" >
 +
=== FFmpegSource2 ===
 +
{{FuncDef|FFmpegSource2(string ''source'' [, int ''vtrack'', int ''atrack'' , <br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool ''cache'', string ''cachefile'', int ''fpsnum'', int ''fpsden'', <br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int ''threads'', string ''timecodes'', int ''seekmode'', bool ''overwrite'', <br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int ''width'', int ''height'', string ''resizer'', string ''colorspace'', <br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int ''rffmode'', int ''adjustdelay'', bool ''utf8'', string ''varprefix'' ] )
 +
}}
 +
 +
:{{Par2|source|string|(required)}}
 +
::Path of the file to be opened.
 +
 +
:{{Par2|vtrack|int|-1}}
 +
::The video track number to open, as seen by the relevant demuxer. Track numbers start from zero, and are guaranteed to be continous (i.e. there must be a track 1 if there is a track 0 and a track 2). {{FuncArg|vtrack}}=-1 (the default) means open the first video track. Note that this filter's idea about what ''track'' has what ''number'' may be completely different from what some other application might think.
 +
 +
:{{Par2|atrack|int|-2}}
 +
::The audio track to open. {{FuncArg|atrack}}=-1 means select the first available track. {{FuncArg|atrack}}=-2 (the default) means audio is disabled.
 +
 +
:{{Par2|cache|bool|true}}
 +
::If set to true (the default), this filter will first check if the {{FuncArg|cachefile}} contains a valid index, and if it does, that index will be used. If no index is found, all video tracks will be indexed, and the indexing data will be written to {{FuncArg|cachefile}} afterwards. If set to false, this filter will not look for an existing index file; instead all video tracks will be indexed when the script is opened, and the indexing data will be discarded after the script is closed; you will have to index again next time you open the script.
 +
 +
:{{Par2|cachefile|string|source + ".ffindex"}}
 +
::The filename of the index file (where the indexing data is saved). Defaults to <tt>sourcefilename.ffindex</tt>.
 +
 +
:{{Par2|fpsnum|int|-1}}
 +
:{{Par2|fpsden|int|1}}
 +
::Controls the framerate of the output; used for VFR to CFR conversions. If {{FuncArg|fpsnum}} is less than or equal to zero (the default), the output will contain the same frames that the input did, and the frame rate reported to Avisynth will be set based on the input clip's average frame duration. If {{FuncArg|fpsnum}} is greater than zero, this filter will force a constant frame rate, expressed as a rational number where {{FuncArg|fpsnum}} is the numerator and {{FuncArg|fpsden}} is the denominator. This may naturally cause dropped or duplicated frames to achieve the desired frame rate, and the output is not guaranteed to have the same number of frames that the input did.
 +
 +
:{{Par2|threads|int|-1}}
 +
::The number of decoding threads to request from [http://ffmpeg.org/libavcodec.html '''libavcodec''']. Setting it to less than or equal to zero means it defaults to the number of logical CPUs as reported by Windows. Note that this setting might be completely ignored under a number of conditions; most commonly because a lot of decoders actually do not support multithreading. Default -1.
 +
 +
:{{Par2|timecodes|string|""}}
 +
::Filename to write [http://matroska.org/technical/specs/notes.html Matroska v2 timecodes] for the opened video track. If the file exists, it will be truncated and overwritten. Set to the empty string to disable timecodes writing (this is the default).
 +
 +
:{{Par2|seekmode|int|1}}
 +
::Controls how seeking is done. Mostly useful for getting uncooperative files to work. Valid modes are:
 +
::*-1: Linear access without rewind; i.e. will throw an error if each successive requested frame number isn't bigger than the last one. Only intended for opening images but might work on well with some obscure video format.
 +
::*0: Linear access (i.e. if you request frame n without having requested all frames from 0 to n-1 in order first, all frames from 0 to n will have to be decoded before n can be delivered). The definition of slow, but should make some formats "usable".
 +
::*1: Safe normal (the default). Bases seeking decisions on the keyframe positions reported by libavformat.
 +
::*2: Unsafe normal. Same as mode 1, but no error will be thrown if the exact seek destination has to be guessed.
 +
::*3: Aggressive. Seeks in the forward direction even if no closer keyframe is known to exist. Only useful for testing and containers where libavformat doesn't report keyframes properly.
 +
 +
:{{Par2|overwrite|bool|false}}
 +
::If set to true, this filter will reindex the source file and overwrite the index file even if the index file already exists and is valid. Mostly useful for trackmask changes and testing.
 +
 +
:{{Par2|width|int|-1}}
 +
:{{Par2|height|int|-1}}
 +
::Sets the resolution of the output video, in pixels. Setting either dimension to less than or equal to zero (which is the default) means the resolution of the first decoded video frame is used for that dimension. These parameters are mostly useful because FFMS2 supports video streams that change resolution mid-stream; since Avisynth does not, these parameters are used to set single resolution for the output.
 +
 +
:{{Par2|resizer|string|"BICUBIC"}}
 +
::The resizing algorithm to use if rescaling the image is necessary. If the video uses subsampled chroma but your chosen output colorspace does not, the chosen resizer will be used to upscale the chroma planes, even if you did not request an image rescaling. The available choices are <code>FAST_BILINEAR</code>, <code>BILINEAR</code>, <code>BICUBIC</code> (default), <code>X</code>, <code>POINT</code>, <code>AREA</code>, <code>BICUBLIN</code>, <code>GAUSS</code>, <code>SINC</code>, <code>LANCZOS</code> and <code>SPLINE</code>. Note that <code>SPLINE</code> is completely different from Avisynth's builtin Spline [[Resize|resizers]].
 +
 +
:{{Par2|colorspace|string|""}}
 +
::Convert the output from whatever it was to the given colorspace, which can be one of <code>YV12</code>, <code>YUY2</code>, <code>RGB24</code> or <code>RGB32</code>. Setting this to an empty string (the default) means keeping the same colorspace as the input.
 +
 +
:{{Par2|rffmode|int|0}}
 +
::Controls how RFF flags in the video stream are treated (RFF = ''Repeat First Field''; used in 3:2 pulldown<sup>[http://wayback.archive.org/web/20150120040340/http://msdn.microsoft.com/en-us/library/windows/desktop/aa367729%28v=vs.85%29.aspx]</sup>). In other words, it's equivalent to the "field operation" mode switch in [[DVD2AVI]]/[[DGIndex]]. Valid modes are:
 +
::*0: Ignore all flags (the default mode).
 +
::*1: Honor all pulldown flags.
 +
::*2: Equivalent to DVD2AVI's "force film" mode.
 +
::Note that using modes 1 or 2 will make FFMS2 throw an error if the video stream has no RFF flags at all. When using either of those modes, it will also make the output be assumed as CFR, disallow vertical scaling and disallow setting the output colorspace. <code>FFPICT_TYPE</code> will also not be set as the output is a combination of several frames. Other subtle behavior changes may also exist.
 +
 +
:{{Par2|adjustdelay|int|-1}}
 +
::Controls how audio delay is handled, i.e. what happens if the first audio sample in the file doesn't have a timestamp of zero. The following arguments are valid:
 +
::*-3: No adjustment is made; the first decodable audio sample becomes the first sample in the output.
 +
::*-2: Samples are created (with silence) or discarded so that sample 0 in the decoded audio starts at time zero.
 +
::*-1: Samples are created (with silence) or discarded so that sample 0 in the decoded audio starts at the same time as frame 0 of the first video track. This is the default, and probably what most people want.
 +
::*Any integer >= 0: Same as -1, but adjust relative to the video track with the given track number instead. If the provided track number isn't a video track, an error is raised.
 +
::-2 obviously does the same thing as -1 if the first video frame of the first video track starts at time zero. In some containers this will always be the case, in others (most notably 188-byte MPEG TS) it will almost never happen.
 +
 +
:{{Par2|utf8|bool|false}}
 +
::If set to true, this filter will assume that the .avs script is encoded as UTF-8 and therefore interpret all filenames as UTF-8 encoded strings. This makes it possible to open files with odd filenames that otherwise would not be openable.
 +
 +
::'''NOTE:''' You must make sure you save the .avs file without a BOM (byte-order marker) or Avisynth will refuse to open it. Notepad will write a BOM, so use something else.
 +
 +
::You should also note that setting this parameter incorrectly will cause all file openings to fail unless your filenames are exclusively 7-bit ASCII compatible.
 +
 +
:{{Par2|varprefix|string|""}}
 +
::A string that is added as a prefix to all [[#Exported_AviSynth_variables|exported]] Avisynth variables. This makes it possible to differentiate between variables from different clips.
 +
 +
* Note, ''FFMS2'' is a shorter name (added in v2.22) for ''FFmpegSource2''. The syntax is the same for both.
 +
 +
=== Other Functions ===
 +
For complete documentation see the [http://github.com/FFMS/ffms2/blob/master/doc/ffms2-avisynth.md#function-reference FFMS2 GitHub page].
 
{{PluginFilterTable2}}
 
{{PluginFilterTable2}}
 
{{PluginFilterRow|FFmpegSource|FFIndex|
 
{{PluginFilterRow|FFmpegSource|FFIndex|
Line 72: Line 168:
 
{{PluginFilterRow|FFmpegSource|FFVideoSource|
 
{{PluginFilterRow|FFmpegSource|FFVideoSource|
 
Opens video. Will invoke indexing of all video tracks (but no audio tracks) if no valid index file is found.
 
Opens video. Will invoke indexing of all video tracks (but no audio tracks) if no valid index file is found.
| [[RGB24]], [[RGB32]], [[YUY2]], [[YV12]]
+
| [[RGB24]], [[RGB32]], [[YUY2]], [[Y8]], [[YV12]], [[YV16]], [[YV24]], [[YV411]]
 
}}
 
}}
{{PluginFilterRow|FFmpegSource|SWScale|
+
{{PluginFilterRow|FFmpegSource|FFmpegSource2|
An image resizing and colorspace conversion filter. Does nothing special; it's almost always a better idea to just use Avisynth's builtins instead.
+
A convenience function that combines the functionality of '''FFVideoSource''' and '''FFAudioSource''' (see above).
| [[RGB24]], [[RGB32]], [[YUY2]], [[YV12]]
+
| [[RGB24]], [[RGB32]], [[YUY2]], [[Y8]], [[YV12]], [[YV16]], [[YV24]], [[YV411]]
 +
}}
 +
{{PluginFilterRow|FFmpegSource|FFMS2|
 +
A shorter '''FFmpegSource2''' alias, this feature was added in v2.22.
 +
| [[RGB24]], [[RGB32]], [[YUY2]], [[Y8]], [[YV12]], [[YV16]], [[YV24]], [[YV411]]
 +
}}
 +
{{PluginFilterRow|FFmpegSource|FFImageSource|
 +
A convenience alias for '''FFVideoSource''', with the options set optimally for using it as an image reader. Disables caching and seeking for maximum compatiblity.
 +
| [[RGB24]], [[RGB32]], [[YUY2]], [[Y8]], [[YV12]], [[YV16]], [[YV24]], [[YV411]]
 
}}
 
}}
 
{{PluginFilterRow|FFmpegSource|FFSetLogLevel|
 
{{PluginFilterRow|FFmpegSource|FFSetLogLevel|
Line 87: Line 191:
 
}}
 
}}
 
{{PluginFilterRow|FFmpegSource|FFGetVersion|
 
{{PluginFilterRow|FFmpegSource|FFGetVersion|
Returns the FFMS2 version, as a string.
+
Returns the '''FFMS2''' version, as a string.
 
|
 
|
 
}}
 
}}
 
{{PluginFilterRowNote|
 
{{PluginFilterRowNote|
'''Note''': the following functions are provided by <tt>FFMS2.avsi</tt> and are not available unless that script has been imported or autoloaded.
+
'''Note''': the following functions are provided by <tt>[http://raw.githubusercontent.com/FFMS/ffms2/master/etc/FFMS2.avsi FFMS2.avsi]</tt> and are not available unless that script has been imported or [[Plugins#Plugin_Autoload_and_Name_Precedence|autoloaded]].
}}
+
{{PluginFilterRow|FFmpegSource|FFmpegSource2|
+
A convenience function that combines the functionality of <tt>FFVideoSource</tt> and <tt>FFAudioSource</tt>.
+
| [[RGB24]], [[RGB32]], [[YUY2]], [[YV12]]
+
}}
+
{{PluginFilterRow|FFmpegSource|FFImageSource|
+
A convenience alias for <tt>FFVideoSource</tt>, with the options set optimally for using it as an image reader. Disables caching and seeking for maximum compatiblity.
+
| [[RGB24]], [[RGB32]], [[YUY2]], [[YV12]]
+
 
}}
 
}}
 
{{PluginFilterRow|FFmpegSource|FFFormatTime|
 
{{PluginFilterRow|FFmpegSource|FFFormatTime|
A helper function used to format a time given in milliseconds into a h:mm:ss.ttt string. Used internally by <tt>FFInfo</tt>.
+
A helper function used to format a time given in milliseconds into a h:mm:ss.ttt string. Used internally by '''FFInfo'''.
 
|
 
|
 
}}
 
}}
Line 110: Line 206:
 
}}
 
}}
 
|}
 
|}
<br>
+
</div>
 +
 
 
== Exported AviSynth variables ==
 
== Exported AviSynth variables ==
All variable names are prefixed by the <tt>varprefix</tt> argument to the respective <tt>FFVideoSource</tt> or <tt>FFAudioSource</tt> call that generated them.
+
<div style="max-width:62em" >
 +
All variable names are prefixed by the {{FuncArg|varprefix}} argument to the respective '''FFVideoSource''' or '''FFAudioSource''' call that generated them.
 +
 
 +
'''NOTE''': these exported variables are mostly [[Runtime_environment|Runtime variables]], requiring [[ScriptClip]] etc to read them.
 
<br>
 
<br>
 
<br>
 
<br>
Line 132: Line 232:
  
 
The value is exported as a cryptic numerical constant that matches the values in the MPEG-2 specification. You can find the gory details in the FFMS2 API documentation, but the important ones are:
 
The value is exported as a cryptic numerical constant that matches the values in the MPEG-2 specification. You can find the gory details in the FFMS2 API documentation, but the important ones are:
 
+
<div {{BoxWidthIndent|56|1}} >
 
  0: RGB (usually indicates the stream isn't actually YUV, but RGB flagged as YUV)
 
  0: RGB (usually indicates the stream isn't actually YUV, but RGB flagged as YUV)
 
  1: ITU-R Rec.709
 
  1: ITU-R Rec.709
 
  2: Unknown or unspecified
 
  2: Unknown or unspecified
 
  5 and 6: ITU-R Rec.601
 
  5 and 6: ITU-R Rec.601
<br>
+
</div>
 
<code>'''FFCOLOR_RANGE'''</code>
 
<code>'''FFCOLOR_RANGE'''</code>
  
 
The color range the input video claims to be using. Much like <tt>FFCOLOR_SPACE</tt>, the source for this variable is a metadata flag that can freely be set to arbitrary values, so trusting it blindly might not be a good idea.
 
The color range the input video claims to be using. Much like <tt>FFCOLOR_SPACE</tt>, the source for this variable is a metadata flag that can freely be set to arbitrary values, so trusting it blindly might not be a good idea.
  
Note that using <tt>SWScale</tt>() or the width/height/colorspace parameters to <tt>FFVideoSource</tt> may under some circumstances change the output color range.
+
Note that using <tt>SWScale</tt>() or the width/height/colorspace parameters to '''FFVideoSource''' may under some circumstances change the output color range.
 
+
<div {{BoxWidthIndent|56|1}} >
 
  0: Unknown/unspecified
 
  0: Unknown/unspecified
 
  1: Limited range (usually 16-235)
 
  1: Limited range (usually 16-235)
 
  2: Full range (0-255)
 
  2: Full range (0-255)
<br>
+
</div>
 
<code>'''FFPICT_TYPE'''</code>
 
<code>'''FFPICT_TYPE'''</code>
  
The picture type of the most recently requested frame as the ASCII number of the character listed below. Use <tt>Chr</tt>() to convert it to an actual letter in AviSynth. Use <tt>after_frame=true</tt> in AviSynth's conditional scripting for proper results. Only set when <tt>rffmode=0</tt>. The FFmpeg source definition of the characters:
+
The picture type of the most recently requested frame as the ASCII number of the character listed below. Use <tt>Chr</tt>() to convert it to an actual letter in AviSynth. Use {{FuncArg|after_frame}}<tt>=true</tt> in AviSynth's conditional scripting for proper results. Only set when {{FuncArg|rffmode}}<tt>=0</tt>. The FFmpeg source definition of the characters:
 
+
<div {{BoxWidthIndent|56|1}} >
 
  I: Intra
 
  I: Intra
 
  P: Predicted
 
  P: Predicted
Line 160: Line 260:
 
  b: FF_BI_TYPE (no good explanation available)
 
  b: FF_BI_TYPE (no good explanation available)
 
  ?: Unknown
 
  ?: Unknown
<br>
+
</div>
 
<code>'''FFVFR_TIME'''</code>
 
<code>'''FFVFR_TIME'''</code>
  
The actual time of the source frame in milliseconds. Only set when no type of CFR conversion is being done (<tt>rffmode</tt> and <tt>fpsnum</tt> left at their defaults).
+
The actual time of the source frame in milliseconds. Only set when no type of CFR conversion is being done ({{FuncArg|rffmode}} and {{FuncArg|fpsnum}} left at their defaults).
FFCHANNEL_LAYOUT
+
<br>
 +
<br>
 +
<code>'''FFCHANNEL_LAYOUT'''</code>
  
 
The audio channel layout of the audio stream. This is exported as a very cryptic integer that is constructed in the same way as the <tt>dwChannelMask</tt> property of the Windows <tt>WAVEFORMATEXTENSIBLE</tt> struct. If you don't know what a <tt>WAVEFORMATEXTENSIBLE</tt> is or what the <tt>dwChannelMask</tt> does, don't worry about it.
 
The audio channel layout of the audio stream. This is exported as a very cryptic integer that is constructed in the same way as the <tt>dwChannelMask</tt> property of the Windows <tt>WAVEFORMATEXTENSIBLE</tt> struct. If you don't know what a <tt>WAVEFORMATEXTENSIBLE</tt> is or what the <tt>dwChannelMask</tt> does, don't worry about it.
Line 173: Line 275:
 
The variable prefix of the last called FFMS source function. Note that this is a global variable.
 
The variable prefix of the last called FFMS source function. Note that this is a global variable.
 
<br>
 
<br>
 +
<br>
 +
== Alternate Downloads ==
 +
Unofficial builds.
 +
<div style="max-width:82em; min-width:42em;" >
 +
{|class="wikitable sortable" style="height:100px; width:100%" border="1" cellpadding="4"
 +
|-
 +
!class="unsortable" width=20%| Version
 +
!class="unsortable" width=30%| Download
 +
!class="unsortable"| Comments
 +
|-
 +
|ffms2_1c6169a
 +
|[https://forum.doom9.org/showthread.php?p=1949799#post1949799 ffms2_1c6169a.7z] /// [https://web.archive.org/web/20210814204401if_/https://files.videohelp.com/u/223002/ffms2_1c6169a.7z Mirror]
 +
|
 +
* ffms2@4567314;
 +
* ffmpeg 4.4@1bc1757;
 +
* zlib 1.2.11;
 +
* dav1d 0.9.1;
 +
* added FFAudioSource/FFMS2/FFmpegSource2 parameter "drc_scale" (float type, AC3 decoding).
 +
* Changes by [https://forum.doom9.org/showthread.php?p=1949799#post1949799 StvG]
 +
|-
 +
|-
 +
|ffms2_87bae19
 +
|[https://web.archive.org/web/20201125184516if_/https://files.videohelp.com/u/223002/ffms2_87bae19.7z ffms2_87bae19.7z]
 +
|
 +
* ffmpeg n4.4@9208b72a38;
 +
* Date: 2020/11/23
 +
* zlib 1.2.11;
 +
* dav1d 0.7.1;
 +
* changed the default threads number:
 +
* * VP9 - min(CPU logical processors, 8);
 +
* * AV1 - 1 when CPU logical processors = 1, otherwise 2;
 +
* * rest - CPU logical processors;
 +
* MPEG2 streams in mkv container should be ok now.
 +
* Compiled by [https://forum.doom9.org/showthread.php?p=1928993#post1928993 StvG]
 +
|-
 +
|ffms2_756e596
 +
|
 +
|
 +
* Date: 2020/10/13
 +
* ffmpeg n4.4@9b72cea446;
 +
* zlib 1.2.11;
 +
* dav1d 0.7.1;
 +
* set frame properties - _DurationNum (int), _DurationDen (int), _AbsoluteTime (float), _SARNum (int), _SARDen (int), _Matrix (int), _Primaries (int), _Transfer (int), _ChromaLocation (int), _ColorRange (int), _PictType (string), _FieldBased (int), MasteringDisplayPrimariesX (float array), MasteringDisplayPrimariesY (float array), MasteringDisplayWhitePointX (float), MasteringDisplayWhitePointY (float), MasteringDisplayMinLuminance (float), MasteringDisplayMaxLuminance (float), ContentLightLevelMax (float), ContentLightLevelAverage (float).
 +
* Compiled by [https://forum.doom9.org/showthread.php?p=1925683#post1925683 StvG]
 +
|-
 +
|ffms2_0055b2d
 +
|
 +
|
 +
* Date: 2020/08/21
 +
* ffmpeg n4.4@1c7e55dd50;
 +
* zlib 1.2.11;
 +
* dav1d 0.7.1.
 +
* Compiled by [https://forum.doom9.org/showthread.php?p=1921514#post1921514 StvG]
 +
|-
 +
|ffms2_89bd1e1
 +
|[https://web.archive.org/web/20200531063902if_/https://files.videohelp.com/u/223002/ffms2_89bd1e1.7z ffms2_89bd1e1.7z]
 +
|
 +
* Date: 2020/04/05
 +
* ffms2@bda9eeb;
 +
* ffmpeg n4.3@72be5d4661;
 +
* zlib 1.2.11;
 +
* dav1d 0.6.0.
 +
* Compiled by [https://forum.doom9.org/showthread.php?p=1906345#post1906345 StvG]
 +
|-
 +
|ffms2-v2.23.1_ffmpeg-v4.2.2
 +
|[https://web.archive.org/web/20200531065547if_/https://files.videohelp.com/u/223002/FFMS2_2.23.1_MSVC_FFMPEG_4.2.2.7z FFMS2_2.23.1_MSVC_FFMPEG_4.2.2.7z]<br>[http://www.mediafire.com/file/yyabrt1jkmmlvsn/FFMS2_2.23.1_MSVC_FFMPEG_4.2.2.7z/file Mirror]
 +
|
 +
* Date: 2020/01/01
 +
* Compiled the last official stable release with FFMPEG 4.2.2
 +
* Compiled by [https://forum.doom9.org/showthread.php?p=1894414#post1894414 l33tmeatwad]
 +
|}
 
<br>
 
<br>
  
== External Links ==
+
==C Plugin==
*[http://forum.doom9.org/showthread.php?t=127037 Doom9 Forum] - FFmpegSource discussion.
+
FFMS2 C plugin variant:
*[http://github.com/FFMS/ffms2 GitHub] - Source code repository.
+
<br>
 +
*'''Discussion''' - [https://forum.doom9.org/showthread.php?t=175173 Doom9 Thread]
 +
*'''Download''' - [https://rwijnsma.home.xs4all.nl/files/ffms2/ ffms2 C Plugin]
  
 +
<span style="color:red">'''Note:'''</span> C-plugins must be loaded using [[Plugins#LoadCPlugin|LoadCPlugin]].
 
<br>
 
<br>
 +
<span style="color:red">'''Note:'''</span> The C-Plugin is still XP x86 Compatible.
 
<br>
 
<br>
 +
</div>
 
<br>
 
<br>
 +
== External Links ==
 +
<div style="max-width:62em" >
 +
*[https://forum.doom9.org/showthread.php?t=127037 Doom9 Forum] - FFmpegSource discussion.
 +
*[https://github.com/FFMS/ffms2 GitHub] - Source code repository.
 +
<br>
 +
</div>
 
-----------------------------------------------
 
-----------------------------------------------
 
'''Back to [[External_filters#Source_Filters|External Filters]] &larr;'''
 
'''Back to [[External_filters#Source_Filters|External Filters]] &larr;'''
 +
-----------------------------------------------

Revision as of 22:32, 14 August 2021

Abstract
Author Myrsloik, et al.
Version v2.23.1
Download FFMS2 v2.23.1
Alt. Download Alternate Downloads
Documentation User Manual
Category Source filters
License MIT / binary is GPLv3
Discussion Doom9 Thread

Contents

Description

Opens files using FFmpeg and nothing else. May be frame accurate on good days. The source is MIT licensed and can be obtained from the GitHub repository. The precompiled binary is GPL3 licensed.

Requirements

Limitations

  • Because of LAVF's demuxer, most raw streams (such as elementary h264 and other mpeg video streams) will fail to work properly.
  • FFAudioSource will have to remake any index implicitly created by FFVideoSource and therefore code like

  AudioDub( FFVideoSource(X), FFAudioSource(X) )
will require two indexing passes. Apart from the time consumed this is harmless. To work around it open the audio first:
  A = FFAudioSource(X)
  V = FFVideoSource(X)
  AudioDub(V, A)
(FFmpegSource2 does this for you with a single function call) or use FFIndex, like so:
  FFIndex(X)
  AudioDub( FFVideoSource(X), FFAudioSource(X) ).

  • Interlaced H.264 mostly works these days, but seeking may occasionally result in corruption.
  • Transport Streams will not decode reliably without seekmode -1.
  • Open-GOP H.264 will sometimes produces corruption when seeking.

Known Issues

(NOTE this section does not appear in the latest documentation and may be obsolete)

  • Interlaced H.264 is decoded in an odd way; each field gets its own full-height frame and the fieldrate is reported as the framerate, and furthermore one of the fields (odd or even) may "jump around". To get the correct behavior, you can try setting fpsnum and fpsden so that the framerate is halved (may or may not work). This issue is caused by libavcodec.

Compatibility

Video

  • AVI, MKV, MP4, FLV: Frame accurate
  • WMV: Frame accurate(?) but avformat seems to pick keyframes relatively far away
  • OGM: Frame accurate(?)
  • VOB, MPG: Seeking seems to be off by one or two frames now and then
  • M2TS, TS: Seeking seems to be off a few frames here and there
    • As MP4 container supports MPEG2/4 video stream, when seeking is off, you can try copying the stream to MP4 container (maybe without audio.) With FFmpeg: ffmpeg -i file.m2ts -c:v copy -an file.mp4. You might have to specify -fflags +genpts before -i.
  • Image files: Most formats can be opened if seekmode=-1 is set, no animation support

Audio

Seeking should be sample-accurate with most codecs in AVI, MKV, MP4 and FLV.

Decoding linearly will almost always give correct results, and forward-seeks from trimming should result in at most a few hundred samples of corruption.

Indexing and You

Before FFMS2 can open a file, it must be indexed first so that keyframe/sample positions are known and seeking is easily accomplished. This is done automatically when using FFVideoSource or FFAudioSource, but if you want to you can invoke the indexing yourself by calling FFIndex, or by running ffmsindex.exe. By default the index is written to a file so it can be reused the next time you open the same file, but this behavior can be turned off if desired.

If you wonder why FFMS2 takes so long opening files, the indexing is the answer. If you want a progress report on the indexing, you can use the supplied ffmsindex.exe command line program.

Function Reference

FFmpegSource2

FFmpegSource2(string source [, int vtrack, int atrack ,
     bool cache, string cachefile, int fpsnum, int fpsden,
     int threads, string timecodes, int seekmode, bool overwrite,
     int width, int height, string resizer, string colorspace,
     int rffmode, int adjustdelay, bool utf8, string varprefix ] )

string  source = (required)
Path of the file to be opened.
int  vtrack = -1
The video track number to open, as seen by the relevant demuxer. Track numbers start from zero, and are guaranteed to be continous (i.e. there must be a track 1 if there is a track 0 and a track 2). vtrack=-1 (the default) means open the first video track. Note that this filter's idea about what track has what number may be completely different from what some other application might think.
int  atrack = -2
The audio track to open. atrack=-1 means select the first available track. atrack=-2 (the default) means audio is disabled.
bool  cache = true
If set to true (the default), this filter will first check if the cachefile contains a valid index, and if it does, that index will be used. If no index is found, all video tracks will be indexed, and the indexing data will be written to cachefile afterwards. If set to false, this filter will not look for an existing index file; instead all video tracks will be indexed when the script is opened, and the indexing data will be discarded after the script is closed; you will have to index again next time you open the script.
string  cachefile = source + ".ffindex"
The filename of the index file (where the indexing data is saved). Defaults to sourcefilename.ffindex.
int  fpsnum = -1
int  fpsden = 1
Controls the framerate of the output; used for VFR to CFR conversions. If fpsnum is less than or equal to zero (the default), the output will contain the same frames that the input did, and the frame rate reported to Avisynth will be set based on the input clip's average frame duration. If fpsnum is greater than zero, this filter will force a constant frame rate, expressed as a rational number where fpsnum is the numerator and fpsden is the denominator. This may naturally cause dropped or duplicated frames to achieve the desired frame rate, and the output is not guaranteed to have the same number of frames that the input did.
int  threads = -1
The number of decoding threads to request from libavcodec. Setting it to less than or equal to zero means it defaults to the number of logical CPUs as reported by Windows. Note that this setting might be completely ignored under a number of conditions; most commonly because a lot of decoders actually do not support multithreading. Default -1.
string  timecodes = ""
Filename to write Matroska v2 timecodes for the opened video track. If the file exists, it will be truncated and overwritten. Set to the empty string to disable timecodes writing (this is the default).
int  seekmode = 1
Controls how seeking is done. Mostly useful for getting uncooperative files to work. Valid modes are:
  • -1: Linear access without rewind; i.e. will throw an error if each successive requested frame number isn't bigger than the last one. Only intended for opening images but might work on well with some obscure video format.
  • 0: Linear access (i.e. if you request frame n without having requested all frames from 0 to n-1 in order first, all frames from 0 to n will have to be decoded before n can be delivered). The definition of slow, but should make some formats "usable".
  • 1: Safe normal (the default). Bases seeking decisions on the keyframe positions reported by libavformat.
  • 2: Unsafe normal. Same as mode 1, but no error will be thrown if the exact seek destination has to be guessed.
  • 3: Aggressive. Seeks in the forward direction even if no closer keyframe is known to exist. Only useful for testing and containers where libavformat doesn't report keyframes properly.
bool  overwrite = false
If set to true, this filter will reindex the source file and overwrite the index file even if the index file already exists and is valid. Mostly useful for trackmask changes and testing.
int  width = -1
int  height = -1
Sets the resolution of the output video, in pixels. Setting either dimension to less than or equal to zero (which is the default) means the resolution of the first decoded video frame is used for that dimension. These parameters are mostly useful because FFMS2 supports video streams that change resolution mid-stream; since Avisynth does not, these parameters are used to set single resolution for the output.
string  resizer = "BICUBIC"
The resizing algorithm to use if rescaling the image is necessary. If the video uses subsampled chroma but your chosen output colorspace does not, the chosen resizer will be used to upscale the chroma planes, even if you did not request an image rescaling. The available choices are FAST_BILINEAR, BILINEAR, BICUBIC (default), X, POINT, AREA, BICUBLIN, GAUSS, SINC, LANCZOS and SPLINE. Note that SPLINE is completely different from Avisynth's builtin Spline resizers.
string  colorspace = ""
Convert the output from whatever it was to the given colorspace, which can be one of YV12, YUY2, RGB24 or RGB32. Setting this to an empty string (the default) means keeping the same colorspace as the input.
int  rffmode = 0
Controls how RFF flags in the video stream are treated (RFF = Repeat First Field; used in 3:2 pulldown[1]). In other words, it's equivalent to the "field operation" mode switch in DVD2AVI/DGIndex. Valid modes are:
  • 0: Ignore all flags (the default mode).
  • 1: Honor all pulldown flags.
  • 2: Equivalent to DVD2AVI's "force film" mode.
Note that using modes 1 or 2 will make FFMS2 throw an error if the video stream has no RFF flags at all. When using either of those modes, it will also make the output be assumed as CFR, disallow vertical scaling and disallow setting the output colorspace. FFPICT_TYPE will also not be set as the output is a combination of several frames. Other subtle behavior changes may also exist.
int  adjustdelay = -1
Controls how audio delay is handled, i.e. what happens if the first audio sample in the file doesn't have a timestamp of zero. The following arguments are valid:
  • -3: No adjustment is made; the first decodable audio sample becomes the first sample in the output.
  • -2: Samples are created (with silence) or discarded so that sample 0 in the decoded audio starts at time zero.
  • -1: Samples are created (with silence) or discarded so that sample 0 in the decoded audio starts at the same time as frame 0 of the first video track. This is the default, and probably what most people want.
  • Any integer >= 0: Same as -1, but adjust relative to the video track with the given track number instead. If the provided track number isn't a video track, an error is raised.
-2 obviously does the same thing as -1 if the first video frame of the first video track starts at time zero. In some containers this will always be the case, in others (most notably 188-byte MPEG TS) it will almost never happen.
bool  utf8 = false
If set to true, this filter will assume that the .avs script is encoded as UTF-8 and therefore interpret all filenames as UTF-8 encoded strings. This makes it possible to open files with odd filenames that otherwise would not be openable.
NOTE: You must make sure you save the .avs file without a BOM (byte-order marker) or Avisynth will refuse to open it. Notepad will write a BOM, so use something else.
You should also note that setting this parameter incorrectly will cause all file openings to fail unless your filenames are exclusively 7-bit ASCII compatible.
string  varprefix = ""
A string that is added as a prefix to all exported Avisynth variables. This makes it possible to differentiate between variables from different clips.
  • Note, FFMS2 is a shorter name (added in v2.22) for FFmpegSource2. The syntax is the same for both.

Other Functions

For complete documentation see the FFMS2 GitHub page.

Filter Description Color format
FFIndex

Indexes a number of tracks in a given source file and writes the index file to disk, where it can be picked up and used by FFVideoSource or FFAudioSource.

FFAudioSource

Opens audio. Invokes indexing of all tracks if no valid index file is found, or if the requested track isn't present in the index.

FFVideoSource

Opens video. Will invoke indexing of all video tracks (but no audio tracks) if no valid index file is found.

RGB24, RGB32, YUY2, Y8, YV12, YV16, YV24, YV411
FFmpegSource2

A convenience function that combines the functionality of FFVideoSource and FFAudioSource (see above).

RGB24, RGB32, YUY2, Y8, YV12, YV16, YV24, YV411
FFMS2

A shorter FFmpegSource2 alias, this feature was added in v2.22.

RGB24, RGB32, YUY2, Y8, YV12, YV16, YV24, YV411
FFImageSource

A convenience alias for FFVideoSource, with the options set optimally for using it as an image reader. Disables caching and seeking for maximum compatiblity.

RGB24, RGB32, YUY2, Y8, YV12, YV16, YV24, YV411
FFSetLogLevel

Sets the FFmpeg logging level, i.e. how much diagnostic spam it prints to STDERR.

FFGetLogLevel

Returns the current log level, as an integer.

FFGetVersion

Returns the FFMS2 version, as a string.

Note: the following functions are provided by FFMS2.avsi and are not available unless that script has been imported or autoloaded.

FFFormatTime

A helper function used to format a time given in milliseconds into a h:mm:ss.ttt string. Used internally by FFInfo.

FFInfo

A helper function similar to Avisynth's internal Info() function; shows general information about the current frame.

Exported AviSynth variables

All variable names are prefixed by the varprefix argument to the respective FFVideoSource or FFAudioSource call that generated them.

NOTE: these exported variables are mostly Runtime variables, requiring ScriptClip etc to read them.

FFSAR_NUM, FFSAR_DEN, FFSAR

The playback aspect ratio specified by the container. FFSAR_NUM and FFSAR_DEN make up the rational number of the ratio; FFSAR is only provided for convenience and may not be set in case it cannot be calculated (i.e. if FFSAR_DEN is zero).

FFCROP_LEFT, FFCROP_RIGHT, FFCROP_TOP, FFCROP_BOTTOM

The on-playback cropping specified by the container.

FFCOLOR_SPACE

The colorimetry the input claims to be using. Only meaningful for YUV inputs. The source for this variable is a metadata flag that can arbitrarily be set or manipulated at will by incompetent users or buggy programs without changing the actual video content, so blindly trusting its correctness is not recommended.

The value is exported as a cryptic numerical constant that matches the values in the MPEG-2 specification. You can find the gory details in the FFMS2 API documentation, but the important ones are:

0: RGB (usually indicates the stream isn't actually YUV, but RGB flagged as YUV)
1: ITU-R Rec.709
2: Unknown or unspecified
5 and 6: ITU-R Rec.601

FFCOLOR_RANGE

The color range the input video claims to be using. Much like FFCOLOR_SPACE, the source for this variable is a metadata flag that can freely be set to arbitrary values, so trusting it blindly might not be a good idea.

Note that using SWScale() or the width/height/colorspace parameters to FFVideoSource may under some circumstances change the output color range.

0: Unknown/unspecified
1: Limited range (usually 16-235)
2: Full range (0-255)

FFPICT_TYPE

The picture type of the most recently requested frame as the ASCII number of the character listed below. Use Chr() to convert it to an actual letter in AviSynth. Use after_frame=true in AviSynth's conditional scripting for proper results. Only set when rffmode=0. The FFmpeg source definition of the characters:

I: Intra
P: Predicted
B: Bi-dir predicted
S: S(GMC)-VOP MPEG4
i: Switching Intra
p: Switching Predicted
b: FF_BI_TYPE (no good explanation available)
?: Unknown

FFVFR_TIME

The actual time of the source frame in milliseconds. Only set when no type of CFR conversion is being done (rffmode and fpsnum left at their defaults).

FFCHANNEL_LAYOUT

The audio channel layout of the audio stream. This is exported as a very cryptic integer that is constructed in the same way as the dwChannelMask property of the Windows WAVEFORMATEXTENSIBLE struct. If you don't know what a WAVEFORMATEXTENSIBLE is or what the dwChannelMask does, don't worry about it.

FFVAR_PREFIX

The variable prefix of the last called FFMS source function. Note that this is a global variable.

Alternate Downloads

Unofficial builds.

Version Download Comments
ffms2_1c6169a ffms2_1c6169a.7z /// Mirror
  • ffms2@4567314;
  • ffmpeg 4.4@1bc1757;
  • zlib 1.2.11;
  • dav1d 0.9.1;
  • added FFAudioSource/FFMS2/FFmpegSource2 parameter "drc_scale" (float type, AC3 decoding).
  • Changes by StvG
ffms2_87bae19 ffms2_87bae19.7z
  • ffmpeg n4.4@9208b72a38;
  • Date: 2020/11/23
  • zlib 1.2.11;
  • dav1d 0.7.1;
  • changed the default threads number:
  • * VP9 - min(CPU logical processors, 8);
  • * AV1 - 1 when CPU logical processors = 1, otherwise 2;
  • * rest - CPU logical processors;
  • MPEG2 streams in mkv container should be ok now.
  • Compiled by StvG
ffms2_756e596
  • Date: 2020/10/13
  • ffmpeg n4.4@9b72cea446;
  • zlib 1.2.11;
  • dav1d 0.7.1;
  • set frame properties - _DurationNum (int), _DurationDen (int), _AbsoluteTime (float), _SARNum (int), _SARDen (int), _Matrix (int), _Primaries (int), _Transfer (int), _ChromaLocation (int), _ColorRange (int), _PictType (string), _FieldBased (int), MasteringDisplayPrimariesX (float array), MasteringDisplayPrimariesY (float array), MasteringDisplayWhitePointX (float), MasteringDisplayWhitePointY (float), MasteringDisplayMinLuminance (float), MasteringDisplayMaxLuminance (float), ContentLightLevelMax (float), ContentLightLevelAverage (float).
  • Compiled by StvG
ffms2_0055b2d
  • Date: 2020/08/21
  • ffmpeg n4.4@1c7e55dd50;
  • zlib 1.2.11;
  • dav1d 0.7.1.
  • Compiled by StvG
ffms2_89bd1e1 ffms2_89bd1e1.7z
  • Date: 2020/04/05
  • ffms2@bda9eeb;
  • ffmpeg n4.3@72be5d4661;
  • zlib 1.2.11;
  • dav1d 0.6.0.
  • Compiled by StvG
ffms2-v2.23.1_ffmpeg-v4.2.2 FFMS2_2.23.1_MSVC_FFMPEG_4.2.2.7z
Mirror
  • Date: 2020/01/01
  • Compiled the last official stable release with FFMPEG 4.2.2
  • Compiled by l33tmeatwad


C Plugin

FFMS2 C plugin variant:

Note: C-plugins must be loaded using LoadCPlugin.
Note: The C-Plugin is still XP x86 Compatible.


External Links



Back to External Filters


Personal tools