Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 使用ffmpeg在视频上叠加alpha图像_Image Processing_Ffmpeg_Overlay_Libav - Fatal编程技术网

Image processing 使用ffmpeg在视频上叠加alpha图像

Image processing 使用ffmpeg在视频上叠加alpha图像,image-processing,ffmpeg,overlay,libav,Image Processing,Ffmpeg,Overlay,Libav,我有以下ffmpeg cli命令,它不会产生文档中描述的效果。这可能是一个bug,或者我的命令有问题 ffmpeg \ -y \ -i small.mp4 \ -i monkey/monkey_%04d.png \ -filter_complex "[0:v][1:v]overlay=enable='between(t,1,5)'[out1]" \ -map '[out1]' \ output.mp4 我希望它在1秒到5秒之间将#1流覆盖在#0之

我有以下ffmpeg cli命令,它不会产生文档中描述的效果。这可能是一个bug,或者我的命令有问题

ffmpeg \
    -y \
    -i small.mp4 \
    -i monkey/monkey_%04d.png \
    -filter_complex "[0:v][1:v]overlay=enable='between(t,1,5)'[out1]" \
    -map '[out1]' \
    output.mp4
我希望它在1秒到5秒之间将#1流覆盖在#0之上

您可以从以下链接下载测试tarball:

它包括测试用例的资产

我尝试的构建:

  • ffmpeg-3.0.2-64位静态(在线提供)

    • FFmpeg是一种基于时间的处理器,即它通过时间戳对齐数据包,因此您必须将图像序列的开始与覆盖的开始对齐

      ffmpeg \
          -y \
          -i small.mp4 \
          -i monkey/monkey_%04d.png \
          -filter_complex "[1:v]setpts=PTS-STARTPTS+(1/TB)[1v]; \
          [0:v][1v]overlay=enable='between(t,1,5)'[out1]" \
          -map '[out1]' \
          output.mp4
      

      FFmpeg是一种基于时间的处理器,即它通过时间戳对齐数据包,因此您必须将图像序列的开始与覆盖的开始对齐

      ffmpeg \
          -y \
          -i small.mp4 \
          -i monkey/monkey_%04d.png \
          -filter_complex "[1:v]setpts=PTS-STARTPTS+(1/TB)[1v]; \
          [0:v][1v]overlay=enable='between(t,1,5)'[out1]" \
          -map '[out1]' \
          output.mp4
      

      图像序列为21帧,ffmpeg输入的帧速率为25,图像流在覆盖开始之前结束。图像应该以多快的速度运行,它们应该循环?这是一个测试用例,因此它们不必循环,如果在启用选项中指定的时间之前完成,则可以。无论如何,输出视频没有任何叠加序列,这是我目前关心的。您的图像序列为21帧,ffmpeg输入的帧率为25,图像流在叠加开始之前结束。图像应该以多快的速度运行,它们应该循环?这是一个测试用例,因此它们不必循环,如果在启用选项中指定的时间之前完成,则可以。无论如何,输出的视频没有任何叠加序列,这是我目前关心的。哇,谢谢。你能详细说明一下你用于进一步澄清的过滤器吗?当然可以。setpts生成新的时间戳。表达式表示获取当前相对时间戳
      PTS-STARTPTS
      ,并向其添加1秒
      TB
      是时基单位,即滴答间隔,它是视频流的最小时间测量单位,因此
      3/TB
      将表示3秒的间隔。哦,是否可以指定精确的帧数而不是秒作为时间戳(或至少毫秒精度)?因为我有帧编号来覆盖图像序列,而不是秒(尽管我可以很容易地将它们转换为毫秒,如果必要的话)。实际上,帧是可能的
      PTS-STARTPTS+(3/TB)+(11/FRAME_RATE*TB)
      对于3s的延迟,11fNo,n与帧索引一起工作,因此(n,30,40)介于过滤器处理的第30帧和第40帧之间。哇,谢谢。你能详细说明一下你用于进一步澄清的过滤器吗?当然可以。setpts生成新的时间戳。表达式表示获取当前相对时间戳
      PTS-STARTPTS
      ,并向其添加1秒
      TB
      是时基单位,即滴答间隔,它是视频流的最小时间测量单位,因此
      3/TB
      将表示3秒的间隔。哦,是否可以指定精确的帧数而不是秒作为时间戳(或至少毫秒精度)?因为我有帧编号来覆盖图像序列,而不是秒(尽管我可以很容易地将它们转换为毫秒,如果必要的话)。实际上,帧是可能的
      PTS-STARTPTS+(3/TB)+(11/FRAME_RATE*TB)
      对于3s的延迟,11fNo,n与帧索引一起工作,因此(n,30,40)介于过滤器处理的第30帧和第40帧之间。