「FFmpegSource2」修訂間的差異

出自NMM Doc
跳至導覽 跳至搜尋
(创建新页面为 '只用FFmpeg打开文件,其他什么都不用。运气好的话可以准确跳转到指定帧。源代码依照MIT许可证发布,点击 http://code.google.com/p/ffmpegsour...')
 
行 1: 行 1:
FFmpegSource2 用户手册
 只用FFmpeg打开文件,其他什么都不用。运气好的话可以准确跳转到指定帧。源代码依照MIT许可证发布,点击 http://code.google.com/p/ffmpegsource/source/checkout 获得源代码。已编译好的二进制文件按照GPLv3许可证发布。都是社会主义的建设者,让我们一起感谢国家。
 只用FFmpeg打开文件,其他什么都不用。运气好的话可以准确跳转到指定帧。源代码依照MIT许可证发布,点击 http://code.google.com/p/ffmpegsource/source/checkout 获得源代码。已编译好的二进制文件按照GPLv3许可证发布。都是社会主义的建设者,让我们一起感谢国家。


 捐助:
[https://www.paypal.com/uk/cgi-bin/webscr?cmd=_flow&SESSION=M13AmLw6lKGDykWcLnZ4086IWKKwHt2x1Yo-HgPwxjHg5bZXBbV2HcMTC88&dispatch=5885d80a13c0db1f059ee17e99acf19529de9a5cb8b345b6900ea9ca1a1bd814 捐助:]


 如果你喜欢,欢迎给我们捐款。从网上乱下片子翻来覆去地看其实会占用你意想不到的多的时间。
 如果你喜欢,欢迎给我们捐款。从网上乱下片子翻来覆去地看其实会占用你意想不到的多的时间。
行 36: 行 38:


== FFMS2.dll里的函数 ==
== FFMS2.dll里的函数 ==
{{Template:FuncDef|FFIndex(字符串 ''source'', 字符串 ''cachefile'' = source + ".ffindex", 整数 ''indexmask'' = -1, 整数 ''dumpmask'' = 0, 字符串 ''audiofile'' = "%sourcefile%.%trackzn%.w64", 整数 ''errorhandling'' = 3, 布尔 ''overwrite'' = false)}}
 
{{Template:FuncDef|FFIndex (字符串 ''source'', 字符串 ''cachefile'' <nowiki>=</nowiki> source + ".ffindex", 整数 ''indexmask'' <nowiki>=</nowiki> -1, 整数 ''dumpmask'' <nowiki>=</nowiki> 0, 字符串 ''audiofile'' <nowiki>=</nowiki> "%sourcefile%.%trackzn%.w64", 整数 ''errorhandling'' <nowiki>=</nowiki> 3, 布尔 ''overwrite'' <nowiki>=</nowiki> false)}}


 用来索引的专门独立函数,有一些额外的选项,还能把音频轨以wave64格式存到硬盘里。能避免索引一个文件两次,而且当音频轨坏掉/不支持导致不能正常索引时也会有用。
 用来索引的专门独立函数,有一些额外的选项,还能把音频轨以wave64格式存到硬盘里。能避免索引一个文件两次,而且当音频轨坏掉/不支持导致不能正常索引时也会有用。


{{Template:FuncDef|FFVideoSource(string source, int track, bool cache = true, string cachefile = source + ".ffindex", int fpsnum = -1, int fpsden = 1, string pp, int threads = -1, string timecodes, int seekmode = 1, int rffmode = 0, int width = -1, int height = -1, string resizer = "BICUBIC", string colorspace = "")}}
{{Template:FuncDef|FFVideoSource( 字符串 ''source'', 整数 ''track'', 布尔 ''cache'' <nowiki>=</nowiki> true, 字符串 ''cachefile'' <nowiki>=</nowiki> source + ".ffindex", 整数 ''fpsnum'' <nowiki>=</nowiki> -1, 整数 ''fpsden'' <nowiki>=</nowiki> 1, 字符串 ''pp'', 整数 ''threads'' <nowiki>=</nowiki> -1, 字符串 ''timecodes'', 整数 ''seekmode'' <nowiki>=</nowiki> 1, 整数 ''rffmode'' <nowiki>=</nowiki> 0, 整数 ''width'' <nowiki>=</nowiki> -1, 整数 ''height'' <nowiki>=</nowiki> -1, 字符串 ''resizer'' <nowiki>=</nowiki> "BICUBIC", 字符串 ''colorspace'' <nowiki>=</nowiki> "")}}


 打开视频,如果没有现成的索引,则索引所有的视频轨。
 打开视频,如果没有现成的索引,则索引所有的视频轨。


FFAudioSource
{{Template:FuncDef|FFAudioSource(字符串 ''source'', 整数 ''track'', 布尔 ''cache'' <nowiki>=</nowiki> true, 字符串 ''cachefile'' <nowiki>=</nowiki> source + ".ffindex", 整数 ''adjustdelay'' <nowiki>=</nowiki> -1)}}


 打开音频,如果没有现成的索引或需要的音频轨原先没有被索引过时,则会去索引所有的音频轨。
 打开音频,如果没有现成的索引或需要的音频轨原先没有被索引过时,则会去索引所有的音频轨。


FFPP
{{Template:FuncDef|FFPP(clip, 字符串 pp)}}


 独立的后处理函数,其中包含了一些简易的反交错滤镜。因为FFVideoSource可以直接读出视频的量化值,所以尽量在FFVideoSource中使用pp参数,这个后处理能更好地适应打开的视频。
 独立的后处理函数,其中包含了一些简易的反交错滤镜。因为FFVideoSource可以直接读出视频的量化值,所以尽量在FFVideoSource中使用pp参数,这个后处理能更好地适应打开的视频。


Swscale
{{Template:FuncDef|SWScale(clip, 整数 ''width'' <nowiki>=</nowiki> -1, 整数 ''height'' <nowiki>=</nowiki> -1, 字符串 ''resizer'' <nowiki>=</nowiki> "BICUBIC", 字符串 ''colorspace'' <nowiki>=</nowiki> "")}}


 一个缩放/色彩空间转换滤镜,没有什么特别之处。这个滤镜和AviSynth的做法不完全一样,有时会有点用。
 一个缩放/色彩空间转换滤镜,没有什么特别之处。这个滤镜和AviSynth的做法不完全一样,有时会有点用。


FFSetLoglevel
{{Template:FuncDef|FFSetLogLevel(整数 Level = -8)}}


 设置FFmpeg的日志输出等级,默认设置成静默(-8),FFmpeg的默认等级是16。avutil/log.h文件里可以找到所有可设置的等级。
 设置FFmpeg的日志输出等级,默认设置成静默(-8),FFmpeg的默认等级是16。avutil/log.h文件里可以找到所有可设置的等级。


FFgetloglevel()
{{Template:FuncDef|FFgetloglevel()}}


 返回当前日志记录等级(整数)。
 返回当前日志记录等级(整数)。
行 102: 行 105:


'''pp''':完整信息请查看下面表格中的描述。留空则是不做后处理。建议尽量不要用根据q值自动处理的选项,因为现在处理的效果不明。
'''pp''':完整信息请查看下面表格中的描述。留空则是不做后处理。建议尽量不要用根据q值自动处理的选项,因为现在处理的效果不明。
'''threads''':设置解码线程数,默认值是Windows提供的逻辑核心数。如果用到的解码器没有此功能,lavc也会无视掉这个参数。


'''seekmode''':控制如何处理跳转。对MKV文件和Haali分离器打开的文件无效,这些文件相当于自动设置seekmode = 1。
'''seekmode''':控制如何处理跳转。对MKV文件和Haali分离器打开的文件无效,这些文件相当于自动设置seekmode = 1。
行 188: 行 193:


== PP字符串格式 ==
== PP字符串格式 ==
待续

於 2010年4月27日 (二) 00:42 的修訂

FFmpegSource2 用戶手冊

只用FFmpeg打開文件,其他什麼都不用。運氣好的話可以準確跳轉到指定幀。原始碼依照MIT許可證發布,點擊 http://code.google.com/p/ffmpegsource/source/checkout 獲得原始碼。已編譯好的二進位文件按照GPLv3許可證發布。都是社會主義的建設者,讓我們一起感謝國家。

捐助:

如果你喜歡,歡迎給我們捐款。從網上亂下片子翻來覆去地看其實會占用你意想不到的多的時間。

概 述
作者 FFmpegSource2項目
版本 310
下載地址 FFmpegSource2項目
分類 源濾鏡
需求 AviSynth 2.5
授權 MIT協議

局限

  • 打開ogm或mpeg文件需要用到Haali媒體分離器(HMS)。(我怎麼不覺得 -- 譯者)
  • Haali分離器要求ts文件的分割點在一個數據包的邊界上。打卡ts文件前可以用TsRemux修復一下。
  • 因為用到了LAVF的分離功能,絕大多數的原始數據流沒有辦發正常打開,比如h264原始數據流和其他一些mpeg視頻流。
  • FFAudioSource()需要重新索引由FFVideoSource()索引過的文件,因此像
AudioDub(FFVideoSource(X), FFAudioSource(X))

的腳本,需要索引兩次。這樣做倒沒什麼問題,只是多花了一些時間。用下面的方法可以避免索引兩次,一是先索引音頻

A = FFAudioSource(X)
V = FFVideoSource(X)
AudioDub(V, A)

或直接用FFIndex()

FFIndex(X)
AudioDub(FFVideoSource(X), FFAudioSource(X))

已知問題

  • 解碼ts封裝的h264文件是畫面可能會破損。
  • FFIndex()在索引時會靜默的忽略解碼錯誤。也就是說即使FFIndex()索引完畢了,對於某條視頻軌或音頻軌的索引有可能已經失敗了。

兼容性

  • AVI、MKV、MP4、FLV:準確跳轉
  • WMV:準確跳轉(?),但是avformat似乎把關鍵幀定在了比較遠的地方
  • OGM:準確跳轉(?)

VOB、MPG:似乎有時會跳到指定幀前後的一到兩幀 M2TS、TS:似乎有時會跳到指定幀前後的幾幀 圖片:絕大多數文件,可以設置seekmode=-1打開,但不支持動畫

FFMS2.dll里的函數

FFIndex (字符串 source, 字符串 cachefile = source + ".ffindex", 整數 indexmask = -1, 整數 dumpmask = 0, 字符串 audiofile = "%sourcefile%.%trackzn%.w64", 整數 errorhandling = 3, 布爾 overwrite = false)

用來索引的專門獨立函數,有一些額外的選項,還能把音頻軌以wave64格式存到硬碟里。能避免索引一個文件兩次,而且當音頻軌壞掉/不支持導致不能正常索引時也會有用。

FFVideoSource(字符串 source, 整數 track, 布爾 cache = true, 字符串 cachefile = source + ".ffindex", 整數 fpsnum = -1, 整數 fpsden = 1, 字符串 pp, 整數 threads = -1, 字符串 timecodes, 整數 seekmode = 1, 整數 rffmode = 0, 整數 width = -1, 整數 height = -1, 字符串 resizer = "BICUBIC", 字符串 colorspace = "")

打開視頻,如果沒有現成的索引,則索引所有的視頻軌。

FFAudioSource(字符串 source, 整數 track, 布爾 cache = true, 字符串 cachefile = source + ".ffindex", 整數 adjustdelay = -1)

打開音頻,如果沒有現成的索引或需要的音頻軌原先沒有被索引過時,則會去索引所有的音頻軌。

FFPP(clip, 字符串 pp)

獨立的後處理函數,其中包含了一些簡易的反交錯濾鏡。因為FFVideoSource可以直接讀出視頻的量化值,所以儘量在FFVideoSource中使用pp參數,這個後處理能更好地適應打開的視頻。

SWScale(clip, 整數 width = -1, 整數 height = -1, 字符串 resizer = "BICUBIC", 字符串 colorspace = "")

一個縮放/色彩空間轉換濾鏡,沒有什麼特別之處。這個濾鏡和AviSynth的做法不完全一樣,有時會有點用。

{{{1}}}

設置FFmpeg的日誌輸出等級,默認設置成靜默(-8),FFmpeg的默認等級是16。avutil/log.h文件里可以找到所有可設置的等級。

FFgetloglevel()

返回當前日誌記錄等級(整數)。

FFMS2.avsi


函數參數

source:源文件

indexmaskdumpmask:索引哪條音頻軌/把哪條音頻軌寫入硬碟。解碼轉存一條音頻軌同時也做了索引,因為要乾的活一樣多。這個參數以二進位掩碼記,比如設為7對應操作1~3號軌道(1+2+4 = 7),並且會忽略非音頻軌。設為-1則把所有的音頻軌寫入硬碟。

audiofile:轉存音軌的文件名。請確保有變量軌道號,以防止多文件同時寫入產生的訪問錯誤。變量對大小寫敏感。變量如下:

%sourcefile% - 和參數source相同,音頻軌從這個文件里解碼。
%trackn% - 軌道號
%trackzn% - 軌道號前面加個0,變成兩位數
%samplerate% - 採樣率
%channels% - 聲道數
%bps% - 採樣深度
%delay% - 延遲,準確地講是音軌所在的第一個時間戳

overwrite:即使索引已經存在,也重新索引一遍並覆蓋原索引。在改變過trackmask或測試時可能有用。

track:分離器中對應的軌道號,從0開始。-1則是第一個匹配的軌道,但有可能不是識別出的第一條未索引過得視頻/音頻軌道,而是之後的一條軌道。

fpsunmfpsden:做VFR -> CFR用的,幀率的分子和分母。設fpsnum <= 0則是和源文件編碼的幀數相同。

timecodes:輸出的timecodes文件(tcv2)的文件名,如果存在就覆蓋掉。

cache:寫一個以後可能用得上的索引信息文件。設置這個參數會同時控制載入已存在的索引文件和寫入新的索引文件。

cachefile:寫入的cache信息的地址。

pp:完整信息請查看下面表格中的描述。留空則是不做後處理。建議儘量不要用根據q值自動處理的選項,因為現在處理的效果不明。

threads:設置解碼線程數,默認值是Windows提供的邏輯核心數。如果用到的解碼器沒有此功能,lavc也會無視掉這個參數。

seekmode:控制如何處理跳轉。對MKV文件和Haali分離器打開的文件無效,這些文件相當於自動設置seekmode = 1。

-1:線性轉到而且不倒帶。如果每個
0:線性到達,會比較慢,但讓更多格式「能用」了
1:安全模式,基於已知的關鍵幀位置判斷跳轉
2:非安全模式,和模式1一樣,但是如果精確的目標位置要靠猜的,不會跳出錯誤
3:激進模式,如果沒有比較接近的關鍵幀,則向前跳轉。僅在測試和打開avformat無法正確返回關鍵幀位置的容器才有用。

rffmode:控制如何處理視頻流中的RFF旗標。

0:忽略
1:按照旗標處理
2:等價於Force Film

注意當視頻流里根本沒有RFF旗標時還設rffmode的話,會跳出錯誤。當設置這個參數後,也會輸出CFR的視頻,並禁用垂直方向上的縮放和色彩空間的轉換。FFPICT_TYPE也無效,因為輸出的一些幀是組合起來的。除此之外還有一些其他細微的設置調整。

widthheight:縮放到的寬度和高度。設成小於或等於0相當於指定輸入視頻的尺寸。

resizer:選擇對色度平面和普通縮放使用的縮放算法。可選擇的方法有:FAST_BILINEAR、BILINEAR、BICUBIC、X、POINT、AREA、BICUBLIN、GAUSS、SINC、LANCZOS和SPLINE。

colorspace:轉換到的色彩空間。名稱有YV12、YUY2、RGB24、RGB32。留空相當和輸入視頻的色彩空間一致。

errorhandling:控制當遇到音頻解碼錯誤是如何處理。

0:退出索引
1:清理掉遇到問題的音頻軌,然後繼續
2:停止索引此音頻軌,但索引過的內容保留
3:什麼都不管直接繼續解碼

adjustdelay:設置合適的音頻軌延遲。默認-1,絕大多數情況都會得到正確結果。

-3:不調延遲
-2:相對0時刻調整延遲
-1:相對於第一條視頻軌調整延遲,如果沒有視頻軌,則相對於0時刻調整

輸出的AviSynth變量

FFSAR_NUMFFSAR_DENFFSAR:由容器指定的播放高寬比。FFSAR_NUM和FFSAR_DEN是組成比例的分子和分母,FFSAR則只是方便無法計算的情況而已。

FFCROP_LEFTFFCROP_RIGHTFFCROP_TOPFFCROP_BOTTOM:容器指定的播放時切邊參數

FFCOLOR_SPACE:輸出的色彩範圍

0:未知/未指定
1:有限範圍
2:全範圍

FFPICT_COLOR:被請求的最接近幀的幀類型,輸出一個ascii數字,下面列出了所有對應情況。在AviSynth里用[Chr()|字符串函數]轉換成字符。AviSynth的條件運行腳本需要設after_frame = true才能得到正確結果。rffmode=0時才能用。 FFmpeg各字符原始定義:

I:I幀
P:P幀
B:B幀
S:MPEG4的VOP
i:SI幀
p:SP幀
b:FF_BI_TYPE (現在沒有合適的解釋)
?:未知

用法舉例:

ScriptClip("""subtitle(chr(FFPICT_TYPE))""",after_frame=true)

FFVFR_TIME:當前幀實際時間,以毫秒計。沒有做任何CFR轉換時才有用(即rffmode和fpsnum都保持默認)


PP字符串格式

待續