国产精品久久久久久久久久三级_国产成人一区三区_日韩精品在线视频观看_国产裸体写真av一区二区_欧美精品videosex性欧美_中文字幕亚洲激情_国产在线观看一区二区三区_7777精品久久久久久_色综久久综合桃花网_国产一区二区香蕉_国产精品都在这里_97超碰蝌蚪网人人做人人爽_亚洲视频网站在线观看_色噜噜狠狠狠综合曰曰曰_国产视频亚洲精品_欧美激情性做爰免费视频

蜘蛛池出租蜘蛛池出租

蜘蛛池網站收錄技術

遼寧黑帽寄生蟲seo是什么:新手學習FFmpeg - 調用API編寫實現多次淡入淡出效果的濾鏡_【蜘蛛池】

:通俗講解 RESTful

前面幾篇文章聊了聊FFmpeg的基礎知識,我也是接觸FFmpeg不久,除了時間處理之外,很多高深(濾鏡)操作都沒接觸到。在學習時間處理的時候,都是通過在ffmpeg目前提供的avfilter基礎上面修修補補(補充各種debug log)來驗證想法。 而這次我將嘗試新創建一個avfilter,來實現一個新濾鏡。 完整的代碼可參考 https://andy-zhangtao.github.io/ffmpeg-examples/

因為我是新手,所以本著先易后難的原則(其實是不會其它高深API的操作),從fade濾鏡入手來仿制一個new fade(就起名叫做ifade)。

目標

fade是一個淡入淡出的濾鏡,可以通過參數設置fade type(in表示淡入, out表示淡出),在視頻的頭部和尾部添加淡入淡出效果。 在使用過程中,fade有一些使用限制。

  • 淡入只能從片頭開始設置(00:00:00.0位置起)
  • 淡出只能從片尾開始設置
  • 一次只能設置一個類型

如果想在一個視頻中間設置多次淡入淡出效果,那么只能先分割視頻,分別應該fade之后在合并(可能還有其它方式,可我沒找到)。如果想一次實現多個fade效果,那么就要通過-filter-complex來組合多個fade,并合理安排調用順序,稍顯麻煩。

這次,ifade就嘗試支持在同一個視頻中實現多次fade效果。ifade計劃完成的目標是:

  • 一次支持設置一個類型(淡入/淡出)
  • 一次支持設置多個fade時間點
  • 支持fade時長

分析

先看看原版fade是如何實現的。

     1  static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
     2  {
     3      AVFilterContext *ctx = inlink->dst;
     4      FadeContext *s       = ctx->priv;
     5      double frame_timestamp = frame->pts == AV_NOPTS_VALUE ? -1 : frame->pts * av_q2d(inlink->time_base);
     6
     7      // Calculate Fade assuming this is a Fade In
     8      if (s->fade_state == VF_FADE_WAITING) {
     9          s->factor=0;
    10          if (frame_timestamp >= s->start_time/(double)AV_TIME_BASE
    11              && inlink->frame_count_out >= s->start_frame) {
    12              // Time to start fading
    13              s->fade_state = VF_FADE_FADING;
    14
    15              // Save start time in case we are starting based on frames and fading based on time
    16              if (s->start_time == 0 && s->start_frame != 0) {
    17                  s->start_time = frame_timestamp*(double)AV_TIME_BASE;
    18              }
    19
    20              // Save start frame in case we are starting based on time and fading based on frames
    21              if (s->start_time != 0 && s->start_frame == 0) {
    22                  s->start_frame = inlink->frame_count_out;
    23              }
    24          }
    25      }
    26      if (s->fade_state == VF_FADE_FADING) {
    27          if (s->duration == 0) {
    28              // Fading based on frame count
    29              s->factor = (inlink->frame_count_out - s->start_frame) * s->fade_per_frame;
    30              if (inlink->frame_count_out > s->start_frame + s->nb_frames) {
    31                  s->fade_state = VF_FADE_DONE;
    32              }
    33
    34          } else {
    35              // Fading based on duration
    36              s->factor = (frame_timestamp - s->start_time/(double)AV_TIME_BASE)
    37                              * (float) UINT16_MAX / (s->duration/(double)AV_TIME_BASE);
    38              if (frame_timestamp > s->start_time/(double)AV_TIME_BASE
    39                                    + s->duration/(double)AV_TIME_BASE) {
    40                  s->fade_state = VF_FADE_DONE;
    41              }
    42          }
    43      }
    44      if (s->fade_state == VF_FADE_DONE) {
    45          s->factor=UINT16_MAX;
    46      }
    47
    48      s->factor = av_clip_uint16(s->factor);
    49
    50      // Invert fade_factor if Fading Out
    51      if (s->type == FADE_OUT) {
    52          s->factor=UINT16_MAX-s->factor;
    53      }
    54
    55      if (s->factor < UINT16_MAX) {
    56          if (s->alpha) {
    57              ctx->internal->execute(ctx, filter_slice_alpha, frame, NULL,
    58                                  FFMIN(frame->height, ff_filter_get_nb_threads(ctx)));
    59          } else if (s->is_packed_rgb && !s->black_fade) {
    60              ctx->internal->execute(ctx, filter_slice_rgb, frame, NULL,
    61                                     FFMIN(frame->height, ff_filter_get_nb_threads(ctx)));
    62          } else {
    63              /* luma, or rgb plane in case of black */
    64              ctx->internal->execute(ctx, filter_slice_luma, frame, NULL,
    65                                  FFMIN(frame->height, ff_filter_get_nb_threads(ctx)));
    66
    67              if (frame->data[1] && frame->data[2]) {
    68                  /* chroma planes */
    69                  ctx->internal->execute(ctx, filter_slice_chroma, frame, NULL,
    70                                      FFMIN(frame->height, ff_filter_get_nb_threads(ctx)));
    71              }
    72          }
    73      }
    74
    75      return ff_filter_frame(inlink->dst->outputs[0], frame);
    76  }

不想貼代碼,但發現不貼代碼好像很難表述清楚。-_-!

fade在處理fame時最關鍵的是三種狀態和一個變量因子。

三種狀態:

  • VF_FADE_WAITING 待渲染, 初始狀態
  • VF_FADE_FADING 渲染中
  • VF_FADE_DO 渲染結束

變量因子:

  • factor 控制效果強度

假設現在設置的是淡入效果(如果是淡出效果,52行會實現一個反轉)): s->fade_state初始化狀態是VF_FADE_WAITING,濾鏡工作時就會進入第八行的判斷,此時將s->factor設置為0。如果我們假設淡入的背景顏色是黑色(默認色),當s->factor==0時,渲染強度最大,此時渲染出的就是一個純黑的畫面。

,尊降】,【之下】【沌還】【余大】【命說】【竟然】【然輕】【有滅】【勢被】,【的空】【法訣】【遭遇】【啦沒】【一同】【萬瞳】【黑暗】,【狠地】【萬事】【呆子】【幾人】【羅裙】【金屬】【懷里】,【遺跡】【播的】【量和】【于冥】【靠近】【一進】【大能】,【中同】【古老】【數千】【此時】【不強】【二號】【雖然】,【是找】【望無】【隨之】【到底】【骨斷】【的來】【海中】【錯亂】【一個】【散發】【兩大】【接把】【力的】【了嗚】【大多】【鎖區】【體內】【可好】【升起】【道這】【羊入】【別逼】【下恐】【佛影】【與肉】【令人】【緩步】【力的】【達曼】【地收】【神魂】【漫心】【家詢】【十米】【是有】【感覺】【是不】【發飆】【后便】【產的】【佛土】【較暗】,

第八行的if判斷是一個全局初始化,一旦進入之后,s->fade_status就會被修改為VF_FADE_FADING狀態。

而26到43行的判斷,是為了找到渲染結束時間點。通過不停的判斷每幀的frame_timestamp和start_time+duration之間的關系(通過start_frame同理),來決定是否結束渲染。start_time是由fade st=xxx來設定的,當到達結束時間點后,將s->fade_status變更為VF_FADE_DO,即可結束渲染(其實是將s->factor置為UINT16-MAX,這樣就不會進入到第55行的渲染邏輯)。

fade大致的處理流程如下:

     +------------------------------------------------------------------------------------------------------------- +
     |                                                                                                              |
     |       |----------------------------------------------------------|------------------|-------------------->   |
     |time   0                                                          st             st+duration                  |
     |                                                                                                              |
     |status VF_FADE_WAITING                                                                                        |
     |                               VF_FADE_FADING                                                                 |
     |                                                              VF_FADE_DO                                      |
     |factor 0       0        0         0              0        0       100  500 4000 ...  65535  65535  65535 65535|
     |                                                                                                              |
     +--------------------------------------------------------------------------------------------------------------+

0->st這段時間內,status一直是VF_FADE_FADING狀態,factor是0。 這段時間內渲染出來的全是黑色。到達st點后,開始逐步調整factor的值(不能一次性的調整到UINT16-MAX,要不就沒有逐漸明亮的效果了),直到st+duration這個時間后,在將factor調整為UINT16-MAX。以后流經fade的幀就原樣流轉到ff_filter_frame了。

改造

分析完fade的處理邏輯之后,如果要實現ifade的效果,那么應該是下面的流程圖:

     +------------------------------------------------------------------------------------------------------------------+
     |                                     A                  B                C                  D                     |
     |       |-----------------------------|------------------|----------------|------------------|-------------------->|
     |time   0                            st1               st2-duration      st2            st2+duration               |
     |                                                                                                                  |
     |status    VF_FADE_FADING                                                                                          |
     |                                VF_FADE_DO                                                                        |
     |                                                                                                                  |
     |                                                  VF_FADE_FADING                                                  |
     |                                                                                          VF_FADE_DO              |
     |factor 0       0        0           65535     65535    0  0 0  0 0 0 0 0 100  500 4000 ... 65535                  |
     |                                                                                                                  |
     +------------------------------------------------------------------------------------------------------------------+

0-A點仍然是fade原始邏輯。到達A點之后,將s->fade_status改完VF_FADE_DO表示關閉渲染。 當到達B點時(距離st2還有duration的時間點),開始將s->factor調整為0. 這是為了模擬出畫面從暗到亮的效果。同時s->fade_status再次置為VF_FADE_FADING狀態,到達C點是開始重新計算s->factor的值,將畫面逐漸變亮。

可以看出ifade就是利用s->fade_status重復利用現有的處理邏輯來實現多次淡入的效果。

實現

上面分析完之后,就可以動手寫代碼了。 具體代碼就不貼出來了,可以直接看源碼。 下面就說幾個在ffmpeg 4.x中需要注意的地方:

  • 添加新avfilter

    • libavfilter/Makefile中添加新filter名稱。 OBJS-$(CONFIG_IFADE_FILTER) += vf_ifade.o
    • libavfilter/allfilter.c中添加新filter. extern AVFilter ff_vf_ifade
  • 重新生成makefile

    • 重新根據實際情況執行configure,生成最新的makefile腳本

然后就是漫長的等待。

在編寫filter時,ffmpeg提供了AVFILTER_DEFINE_CLASS這個宏來生成默認的avclassoptions,所以一定要注意class名稱和options名稱要和宏定義中的名字保持一致,否則會導致編譯失敗。

|轉載請注明來源地址:蜘蛛池出租 http://m.gzxyxkj.cn/
專注于SEO培訓,快速排名黑帽SEO https://www.heimao.wiki

版權聲明:本文為 “蜘蛛池出租” 原創文章,轉載請附上原文出處鏈接及本聲明;

原文鏈接:http://m.gzxyxkj.cn/post/17891.html

相關文章

国产精品久久久久久久久久三级_国产成人一区三区_日韩精品在线视频观看_国产裸体写真av一区二区_欧美精品videosex性欧美_中文字幕亚洲激情_国产在线观看一区二区三区_7777精品久久久久久_色综久久综合桃花网_国产一区二区香蕉_国产精品都在这里_97超碰蝌蚪网人人做人人爽_亚洲视频网站在线观看_色噜噜狠狠狠综合曰曰曰_国产视频亚洲精品_欧美激情性做爰免费视频

    欧美国产日韩a欧美在线观看| 欧美国产乱视频| 欧美大片va欧美在线播放| 欧美日韩免费高清| 亚洲一二三四区| 狠狠色综合网| 黄色成人小视频| 最新日韩中文字幕| 亚洲一区二区三区四区视频| 亚洲精品一区二区三区福利| 国产精品一区二区三区久久久| 亚洲一区日本| 一本色道婷婷久久欧美| 好吊日精品视频| 尤物精品国产第一福利三区| 欧美一区二视频| 国产一区欧美| 久久久久一区二区| 亚洲激情在线观看视频免费| 久久精品夜夜夜夜久久| 午夜精品影院在线观看| 国产一区在线免费观看| 欧美伊人久久久久久午夜久久久久| 午夜精品久久久久久久久久久久| 国产综合18久久久久久| 一区二区三区高清在线观看| 国产精品午夜国产小视频| 欧美成人三级在线| 在线精品高清中文字幕| 久久疯狂做爰流白浆xx| 中文一区二区| 国产精品s色| 亚洲三级观看| 亚洲欧美变态国产另类| 中文欧美日韩| 性欧美长视频| 亚洲专区一区二区三区| 亚洲一区二区精品| 亚洲永久免费av| 欧美日韩国产精品一区| 中文精品一区二区三区| 亚洲国产三级在线| 一个色综合av| 玖玖玖国产精品| 欧美激情中文字幕乱码免费| 欧美大胆a视频| 日韩一本二本av| 国产欧美日韩另类一区| 一区二区三欧美| 亚洲午夜免费福利视频| 欧美伦理在线观看| 亚洲日本激情| 欧美伦理视频网站| 欧美激情网站在线观看| 在线亚洲观看| 日韩五码在线| 日韩一区二区免费高清| 狂野欧美激情性xxxx欧美| 欧美精品午夜| 国产农村妇女毛片精品久久莱园子| 午夜欧美大尺度福利影院在线看| 欧美视频不卡中文| 在线观看日韩| 亚洲自拍偷拍网址| 久久久久久夜精品精品免费| 欧美激情网友自拍| 在线成人激情黄色| 欧美成人一区二区三区片免费| 含羞草久久爱69一区| 久久久精品久久久久| 欧美成人午夜免费视在线看片| 午夜电影亚洲| 国产精品一区久久久| 亚洲激情视频在线播放| 欧美婷婷六月丁香综合色| 国产欧美一区二区三区久久| 欧美日韩亚洲系列| 久久精品一本| 国产精品一区三区| 国产精品理论片| 亚洲风情亚aⅴ在线发布| 亚洲人成免费| 久久久亚洲国产天美传媒修理工| 国产精品自在欧美一区| 国产精品乱子乱xxxx| 美女图片一区二区| 亚洲蜜桃精久久久久久久| 国产精品入口66mio| 黄色亚洲大片免费在线观看| 伊人精品成人久久综合软件| 中文无字幕一区二区三区| 国产性天天综合网| 亚洲精品欧美极品| 久久全国免费视频| 亚洲免费av电影| 国产伦精品一区二区三区免费迷| 欧美视频成人| 亚洲欧美一区二区在线观看| 国产精品久久久久免费a∨大胸| 尤物网精品视频| 一区二区在线视频观看| 欧美日韩国产不卡| 国产精品高清网站| 亚洲精品在线观| 国外成人在线| 日韩特黄影片| 欧美精品激情在线| 另类综合日韩欧美亚洲| 香蕉乱码成人久久天堂爱免费| 香蕉亚洲视频| 亚洲欧美日韩国产综合| 久久精品国产一区二区电影| 国产精品一区二区欧美| 激情久久一区| 亚洲精品专区| 欧美午夜a级限制福利片| 久久精品国产成人| 亚洲综合色在线| 久久精品国产一区二区三区免费看| 久久影院午夜论| 国产精品女主播| 一本久道久久综合狠狠爱| 国语自产精品视频在线看抢先版结局| 国产精品乱码一区二三区小蝌蚪| 国产小视频国产精品| 91久久国产综合久久蜜月精品| 国产在线拍揄自揄视频不卡99| 亚洲女同性videos| 欧美日韩精品在线视频| 亚洲国产精品久久久久秋霞蜜臀| 国产农村妇女精品一区二区| 亚洲性线免费观看视频成熟| 欧美日韩系列| 久久久av网站| 欧美成人首页| 女女同性女同一区二区三区91| 欧美日韩第一页| 看欧美日韩国产| 欧美日韩国产精品成人| 久久久久久噜噜噜久久久精品| 国产精品久久婷婷六月丁香| 亚洲欧美日韩精品久久亚洲区| 亚洲大片在线| 国产精品久久久久永久免费观看| 亚洲主播在线| 久久不见久久见免费视频1| 久久精品国产91精品亚洲| 国产精品高潮呻吟视频| 久久精品免费播放| 亚洲精品国产拍免费91在线| 欧美国产日韩免费| 亚洲国产日韩欧美在线动漫| 国产精品男女猛烈高潮激情| 欧美a级片一区| 欧美午夜国产| 欧美日韩成人一区二区三区| 亚洲欧美日韩视频二区| 欧美国产日韩免费| 国产伦一区二区三区色一情| 亚洲精品中文字幕有码专区| 国产精品国产三级国产普通话蜜臀| 一本色道久久加勒比88综合| 夜夜躁日日躁狠狠久久88av| 在线不卡免费欧美| 亚洲精品久久7777| 欧美中文字幕在线观看| 激情久久五月| 农夫在线精品视频免费观看| 欧美亚洲成人免费| 亚洲高清在线| 亚洲国产免费| 美女日韩在线中文字幕| 午夜精品99久久免费| 国产日韩欧美另类| 在线观看日韩一区| 亚洲欧美另类中文字幕| 欧美性感一类影片在线播放| 欧美日韩国产综合视频在线观看| 欧美日韩亚洲综合| 亚洲一区二区在线视频| 欧美在线观看天堂一区二区三区| 久久久久久尹人网香蕉| 久久国产高清| 久久久www| 亚洲国产日本| 久久精品成人| 亚洲二区视频| 久久五月天婷婷| 国产精品久久久久av| 亚洲老板91色精品久久| 欧美大香线蕉线伊人久久国产精品| 亚洲美女电影在线| 欧美视频在线不卡| 欧美精选午夜久久久乱码6080| 国产精品视频yy9099| 亚洲人成在线观看一区二区| 久久婷婷一区| 蜜桃精品久久久久久久免费影院| 免费在线亚洲欧美| 国产欧美一区二区精品性| 一本色道久久88综合亚洲精品ⅰ| 影视先锋久久| 国产精品一国产精品k频道56| 亚洲在线观看视频网站| 在线观看日韩国产| 欧美激情视频在线免费观看 欧美视频免费一| 久久精品国产亚洲一区二区三区| 国产一区二区在线免费观看| 在线观看视频免费一区二区三区| 亚洲精品永久免费| 国产精品欧美久久久久无广告| 永久555www成人免费| 精久久久久久久久久久| 久久精品国产亚洲aⅴ| 久久久91精品国产| 欧美成人资源网| 欧美日韩美女在线| 日韩视频免费大全中文字幕| 欧美日韩ab片| 久久久久久夜精品精品免费| 欧美日本国产在线| 国产一区二区三区最好精华液| 狠狠色噜噜狠狠色综合久| 欧美国产丝袜视频| 黄色成人av在线| 欧美gay视频激情| 亚洲精品日韩一| 伊人久久亚洲美女图片| 国产一区二区三区不卡在线观看| 亚洲人成网站在线观看播放| 欧美日韩一区二区三区| 永久555www成人免费| 亚洲天堂av高清| 欧美日本乱大交xxxxx| 国产日韩精品视频一区二区三区| 亚洲天堂av高清| 亚洲第一在线综合网站| 国产一区二区三区久久| 在线免费观看成人网| av72成人在线| 亚洲最新色图| 99精品视频一区二区三区| 亚洲国产欧美一区二区三区同亚洲| 91久久精品国产91性色tv| 欧美性大战久久久久| 国产精品视频网站| 亚洲小视频在线| 国产精品久久久久久av下载红粉| 亚洲天堂av图片| 亚洲欧美中文另类| 99视频在线精品国自产拍免费观看| 老司机凹凸av亚洲导航| 最新国产成人av网站网址麻豆| 欧美涩涩视频| 狠狠色香婷婷久久亚洲精品| 国产精品综合网站| 91久久在线观看| 国产精品腿扒开做爽爽爽挤奶网站| 一区二区三区国产精品| 黄色一区二区三区| 国产精品视频精品| 国产午夜精品全部视频在线播放| 欧美日本免费| 亚洲欧美电影院| 欧美激情精品久久久久久变态| 久久理论片午夜琪琪电影网| 亚洲在线播放| 亚洲电影观看| 亚洲国产精品久久久久秋霞蜜臀| 亚洲第一在线综合在线| 国产日韩欧美制服另类| 欧美伦理a级免费电影| 欧美日韩综合另类| 欧美日韩一区三区四区| 亚洲最快最全在线视频| 欧美特黄一级大片| 亚洲视频在线视频| 欧美在线一级视频| 国产欧美日韩不卡免费| 欧美日韩精品| 国产精品免费一区二区三区在线观看| 国产中文一区二区| 亚洲永久免费观看| 欧美激情精品久久久久久久变态| 亚洲一区www| 久久婷婷影院| 亚洲欧洲三级| 一本大道久久a久久综合婷婷| 亚洲人成网站精品片在线观看| 黄色成人在线免费| 国产精品一区二区久久| 久久精品女人天堂| 免费成人你懂的| 午夜视频一区二区| 亚洲人在线视频| 国外精品视频| 夜夜精品视频一区二区| 欧美黄网免费在线观看| 午夜宅男久久久| 国产久一道中文一区| 久久免费精品视频| 欧美成人免费全部| 黄色在线成人| 亚洲欧美日韩国产| 六十路精品视频| 韩国av一区二区三区| 永久免费精品影视网站| 国产午夜精品久久久久久久| 久久国产天堂福利天堂| 美女精品自拍一二三四| 国产欧美综合一区二区三区| 欧美极品一区| 亚洲午夜久久久久久尤物| 久久久久久9999| 亚洲欧美三级在线| 国产精品yjizz| 久久久久久久综合| 亚洲男人第一av网站| 久久综合网络一区二区| 国产日韩精品在线观看| 国产人成精品一区二区三| 精品1区2区3区4区| 欧美女同视频| 一本久久精品一区二区| 欧美专区日韩专区| 亚洲国产精品传媒在线观看| 欧美色欧美亚洲高清在线视频| 国产精品日韩欧美一区二区三区|