gpt4 book ai didi

ffmpeg - 使用 ffmpeg 平铺一组图像并在它们之间平移/滚动

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

我有一组非常大的图像,我想水平平铺并使用 ffmpeg 平移。
图像相对较大,可以使用 magick 创建:

magick convert -compress lzw -size 90000x800 xc:"rgb(160,160,255)" test001.tif
... and so on
我最接近的命令如下:
ffmpeg -loop 1 -i test%03d.tif -vf "tile=4x1,scroll=horizontal=0.05,crop=800:600:0:0,format=yuv420p" -t 10 output.mp4
上述命令的问题:
  • 它非常非常慢(0.3 帧/秒)
  • 动画循环,因为我选择了任意 10 秒的持续时间(不知道如何让它在图像末尾停止)
  • 内存使用率高,我不确定 ffmpeg 是先创建平铺图像,然后再处理视频,还是有办法只访问每帧所需的 tiff 区域

  • 任何关于如何滚动/平移多个输入图像的指针将不胜感激!

    最佳答案

    从 90000x800 图像(数百张)开始,使用 1 fps 的输入帧率(为了便于演示),让 M = 90000第一步:tile=2x1:overlap=1将下一个图像附加到上一个图像:[Img1|Img2],[Img2|Img3], [Img3|Img4]...
    第 2 步:fps=N将帧速率增加到 N fps 通过重复每个平铺帧 N
    第三步:crop=w=1280:h=800:x=mod(n,N)*M/N:y=0将当前视频帧定位在图像上,然后裁剪掉其余的帧。在帧 n=N 上,将设置下一对图像,因此它将帧位置重置为 0。

    ffmpeg -r 1 -i test%03d.tif \ 
    -vf 'tile=2x1:overlap=1, \
    fps=N, \
    crop=w=1280:h=800:x=mod(n,N)*M/N:y=0' \
    -pix_fmt yuv420p output.mp4
    N 选择您的号码并用实际数字替换符号,你应该准备好滚动(我希望......)
    但是现在,你怎么选 N ?这取决于您的输入帧速率(初步设置为 1)、所需的输出帧速率和图像转换时间......
    假设您希望每张图像在屏幕上停留 2 秒并且输出帧速率为 30 fps,那么每张图像应该出现在 2*30=60 帧上。因此,设置 N = 60 和输入帧速率 30/60 = 0.5。
    我没有测试过这个命令,所以试一试,如果不能正常工作,我很乐意进行故障排除。另外,我很好奇它是否相当快。
    ================================
    更新:请求将输入更改为 800x800 图像而不是 90000x800。
    更改 tilecrop如下:
    ffmpeg -r 1 -i test%03d.tif \ 
    -vf 'tile=3x1:overlap=2, \
    fps=N, \
    crop=w=1280:h=800:x=mod(n,N)*800/N:y=0' \
    -pix_fmt yuv420p output.mp4
    还有 N需要重新调整 Nnew = 800/90000 * N或附近。

    关于ffmpeg - 使用 ffmpeg 平铺一组图像并在它们之间平移/滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71113816/

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