gpt4 book ai didi

windows - FFmpeg : How to apply a filter on custom frames and place output of them between mainframes

转载 作者:行者123 更新时间:2023-12-04 22:46:51 28 4
gpt4 key购买 nike

我有一个隔行扫描视频流,需要在自定义视频帧上应用一个过滤器(任何将两帧作为输入的过滤器,例如 tblend 或 lut2),并将它们的输出放置在大型机之间,如下所示:

 Input frames:  [1]             [2]             [3]  .....  FPS=25   
| \ / | \ / |
| \ / | \ / |
Output frames: [1] [f(1,2)] [2] [f(2,3)] [3] ..... FPS=50 i/p
我想我需要 select filter + Expressions选择框架,但我不知道该怎么做
请帮忙。
注:
Input has no audio stream.
Output = uncompressed yuv422 8bits in AVI container
the output scan type can be interlaced or progressive
I have to do this with just one command.
我试过 FFmpeg -i in.avi -vf tblend -vcodec rawvideo out.avi ,但是这个命令的输出不是我想要的。

最佳答案

你可以链tblend , interleavesetpts过滤器,而交错过滤器的两个输入是 tblend 的输出和原始视频:
示例(假设输入帧率为 25Hz):

ffmpeg -y -i in.avi -filter_complex "[0:v]tblend=all_mode=average[v1],[v1][0:v]interleave,setpts=N/50/TB" -r 50 -vcodec rawvideo -pix_fmt bgr24 out.avi
  • [0:v]tblend=all_mode=average[v1]使用 tblend 创建一个流过滤器,并为输出提供临时名称 [v1] .
  • [v1][0:v]interleave申请 interleave [v1] 的过滤器和原始视频。
  • setpts=N/50/TB修复时间戳以应用 50fps 输出视频。
  • -r 50将输出帧速率设置为 50Hz。

  • 注意:我选择了 -pix_fmt bgr24 , 因为 yuv422不使用 MPC-HC 播放。

    测试:
  • 构建合成模式(-r 25rate=1setpts=N/25/TB 用于创建 25Hz 的计数):
     ffmpeg -y -f lavfi -r 25 -i testsrc=size=192x108:rate=1:duration=10 -vf setpts=N/25/TB -vcodec rawvideo -pix_fmt bgr24 in.avi
  • 执行命令:
     ffmpeg -y -i in.avi -filter_complex "[0:v]tblend=all_mode=average[v1],[v1][0:v]interleave,setpts=N/50/TB" -r 50 -vcodec rawvideo -pix_fmt bgr24 out.avi
  • 逐帧检查:

  • enter image description here
    enter image description here
    enter image description here
    enter image description here
    可以看到,第 0 帧和第 2 帧是原始帧,第 1 帧和第 3 帧是两个原始帧的混合输出。

    两种交错视频帧的示例:
    tinterlace过滤器用于创建 合成 隔行扫描视频。
    模拟源自单个视频帧的两个场:

    'drop_even, 1'
    Only output odd frames, even frames are dropped, generating a frame with unchanged height at half frame rate.

      ------> time
    Input:
    Frame 1 Frame 2 Frame 3 Frame 4
    11111 22222 33333 44444
    11111 22222 33333 44444
    11111 22222 33333 44444
    11111 22222 33333 44444
    Output:
    11111 33333
    11111 33333
    11111 33333
    11111 33333

    ffmpeg -y -f lavfi -i testsrc=size=192x108:rate=2:duration=10 -vf tinterlace=drop_even,fieldorder=tff -vcodec rawvideo -pix_fmt bgr24 in_drop_even.avi
    enter image description here
    模拟在不同时间捕获的两个场(不是源自同一视频帧):

    'interleave_top, 4'
    Interleave the upper field from odd frames with the lower field from even frames, generating a frame with unchanged height at half frame rate.

      ------> time
    Input:
    Frame 1 Frame 2 Frame 3 Frame 4
    11111<- 22222 33333<- 44444
    11111 22222<- 33333 44444<-
    11111<- 22222 33333<- 44444
    11111 22222<- 33333 44444<-
    Output:
    11111 33333
    22222 44444
    11111 33333
    22222 44444

    ffmpeg -y -f lavfi -i testsrc=size=192x108:rate=2:duration=10 -vf tinterlace=interleave_top,fieldorder=tff -vcodec rawvideo -pix_fmt bgr24 in_interleave_top.avi
    enter image description here

    关于windows - FFmpeg : How to apply a filter on custom frames and place output of them between mainframes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70936689/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com