You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用FFmpeg添加2秒间隔关键帧并保持原视频码率?

问题描述

需求:为视频添加间隔2秒的关键帧,同时保持原视频码率。

先通过ffprobe查看原视频信息:

ffprobe input-video.mp4 
ffprobe version 5.1.2 Copyright (c) 2007-2022 the FFmpeg developers
  built with Apple clang version 14.0.0 (clang-1400.0.29.102)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/5.1.2 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox
  libavutil      57. 28.100 / 57. 28.100
  libavcodec     59. 37.100 / 59. 37.100
  libavformat    59. 27.100 / 59. 27.100
  libavdevice    59.  7.100 / 59.  7.100
  libavfilter     8. 44.100 /  8. 44.100
  libswscale      6.  7.100 /  6.  7.100
  libswresample   4.  7.100 /  4.  7.100
  libpostproc    56.  6.100 / 56.  6.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input-video.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42mp41
    creation_time   : 2022-11-23T10:04:47.000000Z
  Duration: 00:02:00.15, start: 0.000000, bitrate: 16302 kb/s
  Stream #0:0[0x1](eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 16174 kb/s, 23.98 fps, 23.98 tbr, 24k tbn (default)
    Metadata:
      creation_time   : 2022-11-23T10:04:47.000000Z
      handler_name    : ?Mainconcept Video Media Handler
      vendor_id       : [0][0][0][0]
      encoder         : AVC Coding
  Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 125 kb/s (default)
    Metadata:
      creation_time   : 2022-11-23T10:04:47.000000Z
      handler_name    : #Mainconcept MP4 Sound Media Handler
      vendor_id       : [0][0][0][0]

尝试使用以下FFmpeg命令,但输出视频码率仅为3692 kb/s,与原视频16302 kb/s不符:

ffmpeg -i input-video.mp4 -codec:v libx264 -r 23.976 -force_key_frames "expr:gte(t,n_forced*2)" -c:a copy -y output.mp4

需要修改命令,实现添加2秒间隔关键帧的同时保持原视频码率。


解决方案

原命令未指定视频码率参数,ffmpeg默认使用较低的码率编码,导致输出码率下降。修改时需指定原视频的视频码率,并匹配原视频的编码参数以保证输出更接近原视频:

修改后的命令

ffmpeg -i input-video.mp4 -codec:v libx264 -b:v 16174k -profile:v main -level:v 4.0 -r 23.976 -force_key_frames "expr:gte(t,n_forced*2)" -c:a copy -y output.mp4

参数说明

  • -b:v 16174k:指定视频码率为原视频的16174 kb/s(从ffprobe输出的Stream #0:0中获取的视频码率),确保输出码率与原视频一致。
  • -profile:v main:匹配原视频的H.264 Main编码profile,避免编码参数差异导致的质量或码率变化。
  • -level:v 4.0:针对1080p@23.98fps的规格指定合适的编码level,这是该分辨率帧率的常用配置。
  • 保留-force_key_frames "expr:gte(t,n_forced*2)":确保每2秒插入一个关键帧。
  • -c:a copy:直接复制原音频流,不重新编码,保证音频质量和码率不变。

额外优化

如果希望更精准匹配原视频的编码参数,可以用ffprobe提取更多原视频的x264参数:

ffprobe -v error -select_streams v:0 -show_entries stream=profile,level,bit_rate -of default=noprint_wrappers=1 input-video.mp4

将提取到的参数加入命令中,能让输出视频的编码特性更接近原视频。


内容的提问来源于stack exchange,提问作者muraliv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 18:20:47