FFmpeg 使用视频作为输入进行缩放和平移

FFmpeg 使用视频作为输入进行缩放和平移

我已经搜索了各种方法让 zoompan 滤镜在视频上工作,但在图像上没有遇到问题:

ffmpeg -loop 1 -i thumbnail_56138ba980d73.png -vf "zoompan=z='min(zoom+0.0015,10)':d=125" -c:v mpeg2video -t 5 -s "796x450" test2.mpeg

效果很好,图片放大效果很好。但是当我尝试在输入为视频的情况下执行相同操作时:

ffmpeg -i tmpFile_149712.mp4 -vf "zoompan=z='min(zoom+0.0015,10)':d=150" -c:v mpeg2video -t 5 -s "796x450" test2.mpeg

然后它给了我以下输出,最后由于核心中止而没有视频。所以这让我想到这个过滤器是否适用于视频?

特别是当我阅读 zoompan 参数 -D 的文档时“这设置了效果持续的帧数单个输入图像“”。

$ ffmpeg -i tmpFile_149712.mp4 -vf "zoompan=z='min(zoom+0.0015,10)':d=150" -c:v mpeg2video -t 5 -s "796x450" test2.mpeg
ffmpeg version N-73887-g99ad832 Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
  configuration: --prefix=/home/vagrant/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/home/vagrant/ffmpeg_build    /include --extra-ldflags=-L/home/vagrant/ffmpeg_build/lib --bindir=/home/vagrant/bin --enable-gpl --enable-libass --enable    -libfreetype --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264
  libavutil      54. 28.100 / 54. 28.100
  libavcodec     56. 50.101 / 56. 50.101
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 25.100 /  5. 25.100
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'tmpFile_149712.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.40.101
  Duration: 00:00:12.10, start: 0.000000, bitrate: 359 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 356 kb/s, 30 fps, 30 tbr, 15360 tbn, 60     tbc (default)
    Metadata:
      handler_name    : VideoHandler
[mpeg @ 0x2c17020] VBV buffer size not set, using default size of 130KB
If you want the mpeg file to be compliant to some specification
Like DVD, VCD or others, make sure you set the correct buffer size
Output #0, mpeg, to 'test2.mpeg':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.40.101
    Stream #0:0(und): Video: mpeg2video, yuv420p, 796x450, q=2-31, 200 kb/s, 30 fps, 90k tbn, 30 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      encoder         : Lavc56.50.101 mpeg2video
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> mpeg2video (native))
Press [q] to stop, [?] for help
[output stream 0:0 @ 0x2c12000] 100 buffers queued in output stream 0:0, something may be wrong.
Past duration 0.998039 too large
*** Error in `ffmpeg': corrupted double-linked list: 0x00000000030af400 ***bits/s dup=0 drop=17100
Aborted (core dumped)    

答案1

通过更新到最新版本即可工作。已尝试使用 3.0.2

答案2

这似乎是您使用的 FFMpeg 版本中的一个错误。较新的版本似乎可以工作,但还有另一个问题。当您将视频作为 zoompan 的输入传递时,它首先将其拆分为单独的帧,然后分别对每个帧应用缩放/平移效果。因此,您每输入一个视频帧就会获得 125 个(默认情况下 d=125)输出帧。我找不到解决这个问题的方法

相关内容