代码之家  ›  专栏  ›  技术社区  ›  Amandasaurus

如何通过丢帧来加快视频速度?

  •  6
  • Amandasaurus  · 技术社区  · 16 年前

    我有一段30分钟长的录像。我想做一个15分钟的加速版本。我可以每两帧就投一次。在linux上如何做到这一点?

    我在玩gstreamer,看起来很酷。有没有办法对gstreamer这么做?会是什么 gst-launch 命令行来做吗?

    我的源视频是动态JPEG格式的,所以我确实有要删除的帧。即使是使用关键帧,还是应该有办法让电影“倍速”?

    5 回复  |  直到 16 年前
        1
  •  5
  •   petrkotek    9 年前

    最近我四处寻找了一段时间,想找到最好的方法。我尝试了mencoder-speed和libavfilter的setpts选项。我发现最好的方法是输出单个帧,然后将这些帧重新编码为单个视频。本例假设以30帧/秒的速度输入视频以获得最佳效果,并每隔一帧播放一次。

    # Output the video at 15fps as jpegs
    ffmpeg -i input.m4v -r 15 -f image2 /tmp/output-%06d.jpg
    # Re-encode the frames at 30fps as h264
    ffmpeg -r 30 -i "/tmp/output-%06d.jpg" -vcodec libx264 -threads 0 -an output.m4v
    
        2
  •  4
  •   Dustin Kirkland    13 年前

    mencoder -fps 60/1.001 -oac copy -ovc copy -o output.avi input.avi
    

    http://www.mplayerhq.hu/DOCS/HTML/en/index.html

    mencoder -sstep 0.1 每帧后向前跳0.1秒。

    mplayer -nosound -channels 2 -vf decimate=-2:16384:16384:1 mvi_3524.avi

    mjpegtools有一个 yuvfps 用于在y4m视频中混合/丢弃帧。见 http://linux.die.net/man/1/mjpegtools .

        3
  •  1
  •   danio Kouga    16 年前

    avidemux 可以改变胶片的帧速率并提供 command line control .

        4
  •  1
  •   jerdiggity    12 年前

    我有一个视频,最初是16006s长,帧速率为29.97,但我想加快速度(通过丢帧),使其回放速度约为正常速度的16倍。这是我使用的命令:

    ffmpeg -r:v "480/1" -i input.avi -an -r:v "12/1" output.avi
    
        5
  •  0
  •   user1978011    11 年前

    #!/bin/bash
    INMOVIE=${1}
    INRATE=${2}
    OUTMOVIE="${INMOVIE%.avi}-25fps.avi"
    
    ffmpeg -i ${INMOVIE} -c:v copy .frame_%08d.jpg
    rm $(ls .frame_*.jpg |  awk " BEGIN { c=0.0; fd=1./${INRATE}; fr=25.; last=-1 } { current=int(NR * fr * fd); if (current > last) {last = current;} else { print \$0;} }" )
    ffmpeg -pattern_type glob -i '.frame_*.jpg' -c:v copy ${OUTMOVIE}
    rm -- .frame_*.jpg
    

    说明:

    • ffmpeg 命令从视频中提取帧
    • awk 用帧速率编码视频时,行将删除不需要的帧 INRATE 每秒25帧
    • 决赛 ffmpeg line将剩余的帧放回一起

    您可以检查帧是否与framemd5筛选器相同:

    ffmpeg -i in.avi -f framemd5 in.md5
    ffmpeg -i in-25fps.avi -f framemd5 in-25fps.md5
    

    并且发现这些框架确实是相同的。

        6
  •  -1
  •   Peter    6 年前

    我在ffmpeg维基上找到了另一个解决方案。他们建议使用setpts视频过滤器:

    ffmpeg -i input.mkv -filter:v "setpts=0.5*PTS" output.mkv
    

    其中0.5指定速度。为了加快速度,放0.125。慢下来,放2个。

    更多细节如下: https://trac.ffmpeg.org/wiki/How%20to%20speed%20up%20/%20slow%20down%20a%20video