使用 FFmpeg 加速视频以获得正确的持续时间

Vin*_*eng 7 video ffmpeg

我一直ffmpeg按照这些说明来加快视频使用速度。例如,要将视频速度加快 4 倍,我运行以下命令:

ffmpeg -i vid.MP4 -filter:v "setpts=0.25*PTS" vid_fast.MP4
Run Code Online (Sandbox Code Playgroud)

虽然视频按指示的速度加速,但视频的持续时间(如其属性下所示,以及当我在 VLC 中播放视频时)仍与原始时间相同。例如,如果vid.MP4最初为 4 分钟,则vid_fast.MP4也是 4 分钟,而不是预期的 1 分钟长。(额外的 3 分钟仅包括视频冻结在最后一帧的时间。)

这有点麻烦,因为我需要删除我不感兴趣的额外 3 分钟。有什么办法可以避免这种情况吗?

以下是有关我正在使用的版本的更多信息ffmpeg:

ffmpeg version N-69060-gcd960c8 Copyright (c) 2000-2015 the FFmpeg developers
  built on Jan 14 2015 22:13:45 with gcc 4.9.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --
enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-lib
modplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrw
b --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinge
r --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --en
able-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis
 --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-
libx265 --enable-libxavs --enable-libxvid --enable-lzma --enable-decklink --enab
le-zlib
  libavutil      54. 16.100 / 54. 16.100
  libavcodec     56. 20.100 / 56. 20.100
  libavformat    56. 18.101 / 56. 18.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5.  7.101 /  5.  7.101
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Hyper fast Audio and Video encoder
Run Code Online (Sandbox Code Playgroud)

Ahm*_*raz 5

加速视频后,只需将输出视频(在您的情况下为 vid_fast.mp4)修剪到持续时间。使用以下命令

ffmpeg -i vid_fast.MP4 -vcodec copy -t 60 out_fast.mp4
Run Code Online (Sandbox Code Playgroud)

它将创建 1 分钟的输出视频。


vir*_*ldj 3

今天遇到了同样的问题...让输出视频正确持续的技巧是使用以下命令删除音频-an:

ffmpeg -i vid.MP4 -filter:v "setpts=0.25*PTS" -an vid_fast.MP4
Run Code Online (Sandbox Code Playgroud)

对于某些视频来说这还不够,因此还可以-r <framerate>通过指定与原始视频相同的 FPS来添加参数。因此,如果vid.mp4 的帧率为 30 fps,则编码为:

ffmpeg -i vid.MP4 -filter:v "setpts=0.25*PTS" -r 30 -an vid_fast.MP4
Run Code Online (Sandbox Code Playgroud)

请注意,您还可以使用替代符号来加快视频速度,无需使用小数点,如下所示 ( PTS/4= 4x):

ffmpeg -i vid.MP4 -filter:v "setpts=PTS/4" -r 30 -an vid_fast.MP4
Run Code Online (Sandbox Code Playgroud)