FFmpeg常用命令行讲解及实战一

文章目录

  • 前言
  • 一、学习资料参考
  • 二、FFmpeg 选项
    • 1、主要选项
      • ①、主要命令选项
      • ②、举例
    • 2、视频选项
      • ①、主要命令选项
      • ②、举例
        • 1)提取固定帧
        • 2)禁止输出视频
        • 3)指定视频的纵横比
    • 3、音频选项
      • ①、主要命令选项
      • ②、举例
    • 4、字幕选项
      • ①、主要命令选项
      • ②、举例
        • 1)将字幕加入视频中
        • 2)字幕格式转换
        • 3)提取字幕
  • 三、FFmpeg 命令示例
    • 1、转换格式(封装格式的转化)
    • 2、抽取画面中的音频
    • 3、抽取画面中的视频
    • 4、音频+视频合成
    • 5、音频+音频合成
    • 6、视频分离成图片
    • 7、图片合成视频
    • 8、改变音量大小
    • 9、音效淡入淡出效果
    • 10、截取音频
    • 11、容器时长获取
    • 12、网络资源下载
    • 13、播放音频视频
    • 14、图片生成 gif 动图
    • 15、抽取 PCM 数据


前言

本文讲解 FFmpeg 常用命令,并进行实践。

有关 FFmpeg 的入门及编译等内容可以参考我之前的博客:

  • FFmpeg入门及编译
  • FFmpeg深入学习

一、学习资料参考

  • FFmpeg 官方文档地址
    • 适合入门后再看
  • FFmpeg 官方 Wiki 地址
    • 适合入门后再看
  • FFmpeg 翻译文档地址
    • 初学者可以参考着看一看,里面有些复杂的可以跳过
  • FFmpeg 中文论坛
    • 适合提升的时候用
  • FFmpeg 雷神博客地址
    • 里面既有小白入门的也有比较难的
  • 罗索实验室官方地址
    • 用于提升的时候用

二、FFmpeg 选项

1、主要选项

查看 ffmpeg 的版本

ffmpeg -version

在这里插入图片描述
上图红框内为编译选项,编译选项支持编解码的格式、封装的格式及网络协议等等第三方包。其中比较常用的:

  • 音频相关:libmp3lame
  • 视频相关:libx264libx265libvpxlibxvidavisynth

使用 MediaInfo 对原视频文件 SampleVideo_1280x720_20mb.mp4 进行分析:
在这里插入图片描述
使用 MediaInfo 对 flv 格式原视频文件 SampleVideo_1280x720_20mb.flv 进行分析:
在这里插入图片描述
flv 文件默认视频编码格式为 sorenson spark,默认音频编码格式为 mp3,即:Flv: [sorenson spark(vcodec) + mp3(acodec)]

以下表格内三种写法是等价的:

音频视频字幕
-codec:a-codec:v-codec:s
-c:a-c:v-c:s
-acodec-vcodec-scodec

①、主要命令选项

  • -f fmt (input/output) :指定输入或者输出文件格式(封装格式,视频容器)。常规可省略,而使用依据扩展名(文件的前几百 K 的内容,智能分析)的自动指定,但一些选项需要强制明确设定。
  • -i filename(input) :指定输入文件。
  • -y(global):默认自动覆盖输出文件,而不再询问确认。
  • -n( global):不覆盖输出文件,如果输出文件已经存在则立即退出。
  • -t duration( input/output):限制输入/输出的时间。如果是在 -i 前面,就是限定从输入中读取多少时间的数据;如果是用于限定输出文件,则表示写入多少时间数据后就停止。duration 可以是以秒为单位的数值或者 hh:mm:ss[.xxx] 格式的时间值。注意 -to 和 -t 是互斥的,-t 有更高优先级。
  • -to position (output) :只写入 position 时间后就停止,position 可以是以秒为单位的数值或者 hh:mm:ss[.xxx] 格式的时间值。注意 -to 和 -t 是互斥的,-t 有更高优先级。
  • -ss position (input/output):当在 -i 前,表示定位输入文件到 position 指定的位置。注意可能一些格式是不支持精确定位的,所以 ffmpeg 可能是定位到最接近 position(在之前)的可定位点。position 可以是以秒为单位的数值或者 hh:mm:ss[.xxx] 格式的时间值。
  • -codec[:stream_specifier] codec (input/output,per-stream) :为特定的文件选择编/解码模式,对于输出文件就是编码器, 对于输入或者某个流就是解码器。选项参数中 codec 是编解码器的名字,或者是 copy(仅对输出文件)则意味着流数据直接复制而不再编码。

使用下面命令可以检测 ffmepg 所支持的所有编码器的格式

ffmpeg.exe -encoders

回显如下:

PS D:\Work\test> ffmpeg.exe -encoders
ffmpeg version 6.0-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
  libavutil      58.  2.100 / 58.  2.100
  libavcodec     60.  3.100 / 60.  3.100
  libavformat    60.  3.100 / 60.  3.100
  libavdevice    60.  1.100 / 60.  1.100
  libavfilter     9.  3.100 /  9.  3.100
  libswscale      7.  1.100 /  7.  1.100
  libswresample   4. 10.100 /  4. 10.100
  libpostproc    57.  1.100 / 57.  1.100
Encoders:
 V..... = Video
 A..... = Audio
 S..... = Subtitle
 .F.... = Frame-level multithreading
 ..S... = Slice-level multithreading
 ...X.. = Codec is experimental
 ....B. = Supports draw_horiz_band
 .....D = Supports direct rendering method 1
 ------
 V....D a64multi             Multicolor charset for Commodore 64 (codec a64_multi)
 V....D a64multi5            Multicolor charset for Commodore 64, extended with 5th color (colram) (codec a64_multi5)
 V....D alias_pix            Alias/Wavefront PIX image
 V..... amv                  AMV Video
 V....D apng                 APNG (Animated Portable Network Graphics) image
 V....D asv1                 ASUS V1
 V....D asv2                 ASUS V2
 V....D libaom-av1           libaom AV1 (codec av1)
 V....D av1_nvenc            NVIDIA NVENC av1 encoder (codec av1)
 V..... av1_qsv              AV1 (Intel Quick Sync Video acceleration) (codec av1)
 V....D av1_amf              AMD AMF AV1 encoder (codec av1)
 V....D avrp                 Avid 1:1 10-bit RGB Packer
 V..X.D avui                 Avid Meridien Uncompressed
 V....D ayuv                 Uncompressed packed MS 4:4:4:4
 VF...D bitpacked            Bitpacked
 V....D bmp                  BMP (Windows and OS/2 bitmap)
 VF...D cfhd                 GoPro CineForm HD
 V....D cinepak              Cinepak
 V....D cljr                 Cirrus Logic AccuPak
 V.S..D vc2                  SMPTE VC-2 (codec dirac)
 VFS..D dnxhd                VC3/DNxHD
 V....D dpx                  DPX (Digital Picture Exchange) image
 VFS..D dvvideo              DV (Digital Video)
 VF...D exr                  OpenEXR image
 V.S..D ffv1                 FFmpeg video codec #1
 VF...D ffvhuff              Huffyuv FFmpeg variant
 V....D fits                 Flexible Image Transport System
 V....D flashsv              Flash Screen Video
 V....D flashsv2             Flash Screen Video Version 2
 V..... flv                  FLV / Sorenson Spark / Sorenson H.263 (Flash Video) (codec flv1)
 V....D gif                  GIF (Graphics Interchange Format)
 V..... h261                 H.261
 V..... h263                 H.263 / H.263-1996
 V.S... h263p                H.263+ / H.263-1998 / H.263 version 2
 V....D libx264              libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)
 V....D libx264rgb           libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB (codec h264)
 V....D h264_amf             AMD AMF H.264 Encoder (codec h264)
 V....D h264_mf              H264 via MediaFoundation (codec h264)
 V....D h264_nvenc           NVIDIA NVENC H.264 encoder (codec h264)
 V..... h264_qsv             H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (Intel Quick Sync Video acceleration) (codec h264)
 VF...D hdr                  HDR (Radiance RGBE format) image
 V....D libx265              libx265 H.265 / HEVC (codec hevc)
 V....D hevc_amf             AMD AMF HEVC encoder (codec hevc)
 V....D hevc_mf              HEVC via MediaFoundation (codec hevc)
 V....D hevc_nvenc           NVIDIA NVENC hevc encoder (codec hevc)
 V..... hevc_qsv             HEVC (Intel Quick Sync Video acceleration) (codec hevc)
 VF...D huffyuv              Huffyuv / HuffYUV
 V....D jpeg2000             JPEG 2000
 VF.... libopenjpeg          OpenJPEG JPEG 2000 (codec jpeg2000)
 VF...D jpegls               JPEG-LS
 VF...D ljpeg                Lossless JPEG
 VF...D magicyuv             MagicYUV video
 VFS... mjpeg                MJPEG (Motion JPEG)
 V..... mjpeg_qsv            MJPEG (Intel Quick Sync Video acceleration) (codec mjpeg)
 V.S... mpeg1video           MPEG-1 video
 V.S... mpeg2video           MPEG-2 video
 V..... mpeg2_qsv            MPEG-2 video (Intel Quick Sync Video acceleration) (codec mpeg2video)
 V.S... mpeg4                MPEG-4 part 2
 V....D libxvid              libxvidcore MPEG-4 part 2 (codec mpeg4)
 V..... msmpeg4v2            MPEG-4 part 2 Microsoft variant version 2
 V..... msmpeg4              MPEG-4 part 2 Microsoft variant version 3 (codec msmpeg4v3)
 V..... msvideo1             Microsoft Video-1
 V....D pam                  PAM (Portable AnyMap) image
 V....D pbm                  PBM (Portable BitMap) image
 V....D pcx                  PC Paintbrush PCX image
 V....D pfm                  PFM (Portable FloatMap) image
 V....D pgm                  PGM (Portable GrayMap) image
 V....D pgmyuv               PGMYUV (Portable GrayMap YUV) image
 V....D phm                  PHM (Portable HalfFloatMap) image
 VF...D png                  PNG (Portable Network Graphics) image
 V....D ppm                  PPM (Portable PixelMap) image
 VF...D prores               Apple ProRes
 VF...D prores_aw            Apple ProRes (codec prores)
 VFS... prores_ks            Apple ProRes (iCodec Pro) (codec prores)
 VF...D qoi                  QOI (Quite OK Image format) image
 V....D qtrle                QuickTime Animation (RLE) video
 V....D r10k                 AJA Kona 10-bit RGB Codec
 V....D r210                 Uncompressed RGB 10-bit
 VF...D rawvideo             raw video
 V....D roqvideo             id RoQ video (codec roq)
 V....D rpza                 QuickTime video (RPZA)
 V..... rv10                 RealVideo 1.0
 V..... rv20                 RealVideo 2.0
 V....D sgi                  SGI image
 V....D smc                  QuickTime Graphics (SMC)
 V....D snow                 Snow
 V..... speedhq              NewTek SpeedHQ
 V....D sunrast              Sun Rasterfile image
 V....D svq1                 Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1
 V....D targa                Truevision Targa image
 V....D libtheora            libtheora Theora (codec theora)
 VF...D tiff                 TIFF image
 VF...D utvideo              Ut Video
 VF...D v210                 Uncompressed 4:2:2 10-bit
 V....D v308                 Uncompressed packed 4:4:4
 V....D v408                 Uncompressed packed QT 4:4:4:4
 V....D v410                 Uncompressed 4:4:4 10-bit
 V.S..D vbn                  Vizrt Binary Image
 V..... vnull                null video
 V....D libvpx               libvpx VP8 (codec vp8)
 V....D libvpx-vp9           libvpx VP9 (codec vp9)
 V..... vp9_qsv              VP9 video (Intel Quick Sync Video acceleration) (codec vp9)
 VF...D wbmp                 WBMP (Wireless Application Protocol Bitmap) image
 V....D libwebp_anim         libwebp WebP image (codec webp)
 V....D libwebp              libwebp WebP image (codec webp)
 V..... wmv1                 Windows Media Video 7
 V..... wmv2                 Windows Media Video 8
 V..... wrapped_avframe      AVFrame to AVPacket passthrough
 V....D xbm                  XBM (X BitMap) image
 V....D xface                X-face image
 V....D xwd                  XWD (X Window Dump) image
 V....D y41p                 Uncompressed YUV 4:1:1 12-bit
 V....D yuv4                 Uncompressed packed 4:2:0
 VF...D zlib                 LCL (LossLess Codec Library) ZLIB
 V....D zmbv                 Zip Motion Blocks Video
 A....D aac                  AAC (Advanced Audio Coding)
 A....D aac_mf               AAC via MediaFoundation (codec aac)
 A....D ac3                  ATSC A/52A (AC-3)
 A....D ac3_fixed            ATSC A/52A (AC-3) (codec ac3)
 A....D ac3_mf               AC3 via MediaFoundation (codec ac3)
 A....D adpcm_adx            SEGA CRI ADX ADPCM
 A....D adpcm_argo           ADPCM Argonaut Games
 A....D g722                 G.722 ADPCM (codec adpcm_g722)
 A....D g726                 G.726 ADPCM (codec adpcm_g726)
 A....D g726le               G.726 little endian ADPCM ("right-justified") (codec adpcm_g726le)
 A....D adpcm_ima_alp        ADPCM IMA High Voltage Software ALP
 A....D adpcm_ima_amv        ADPCM IMA AMV
 A....D adpcm_ima_apm        ADPCM IMA Ubisoft APM
 A....D adpcm_ima_qt         ADPCM IMA QuickTime
 A....D adpcm_ima_ssi        ADPCM IMA Simon & Schuster Interactive
 A....D adpcm_ima_wav        ADPCM IMA WAV
 A....D adpcm_ima_ws         ADPCM IMA Westwood
 A....D adpcm_ms             ADPCM Microsoft
 A....D adpcm_swf            ADPCM Shockwave Flash
 A....D adpcm_yamaha         ADPCM Yamaha
 A....D alac                 ALAC (Apple Lossless Audio Codec)
 A....D libopencore_amrnb    OpenCORE AMR-NB (Adaptive Multi-Rate Narrow-Band) (codec amr_nb)
 A....D libvo_amrwbenc       Android VisualOn AMR-WB (Adaptive Multi-Rate Wide-Band) (codec amr_wb)
 A..... anull                null audio
 A....D aptx                 aptX (Audio Processing Technology for Bluetooth)
 A....D aptx_hd              aptX HD (Audio Processing Technology for Bluetooth)
 A....D comfortnoise         RFC 3389 comfort noise generator
 A....D dfpwm                DFPWM1a audio
 A..X.D dca                  DCA (DTS Coherent Acoustics) (codec dts)
 A....D eac3                 ATSC A/52 E-AC-3
 A....D flac                 FLAC (Free Lossless Audio Codec)
 A....D g723_1               G.723.1
 A....D libgsm               libgsm GSM (codec gsm)
 A....D libgsm_ms            libgsm GSM Microsoft variant (codec gsm_ms)
 A..X.D mlp                  MLP (Meridian Lossless Packing)
 A....D mp2                  MP2 (MPEG audio layer 2)
 A....D mp2fixed             MP2 fixed point (MPEG audio layer 2) (codec mp2)
 A....D libmp3lame           libmp3lame MP3 (MPEG audio layer 3) (codec mp3)
 A....D mp3_mf               MP3 via MediaFoundation (codec mp3)
 A....D nellymoser           Nellymoser Asao
 A..X.D opus                 Opus
 A....D libopus              libopus Opus (codec opus)
 A....D pcm_alaw             PCM A-law / G.711 A-law
 A....D pcm_bluray           PCM signed 16|20|24-bit big-endian for Blu-ray media
 A....D pcm_dvd              PCM signed 16|20|24-bit big-endian for DVD media
 A....D pcm_f32be            PCM 32-bit floating point big-endian
 A....D pcm_f32le            PCM 32-bit floating point little-endian
 A....D pcm_f64be            PCM 64-bit floating point big-endian
 A....D pcm_f64le            PCM 64-bit floating point little-endian
 A....D pcm_mulaw            PCM mu-law / G.711 mu-law
 A....D pcm_s16be            PCM signed 16-bit big-endian
 A....D pcm_s16be_planar     PCM signed 16-bit big-endian planar
 A....D pcm_s16le            PCM signed 16-bit little-endian
 A....D pcm_s16le_planar     PCM signed 16-bit little-endian planar
 A....D pcm_s24be            PCM signed 24-bit big-endian
 A....D pcm_s24daud          PCM D-Cinema audio signed 24-bit
 A....D pcm_s24le            PCM signed 24-bit little-endian
 A....D pcm_s24le_planar     PCM signed 24-bit little-endian planar
 A....D pcm_s32be            PCM signed 32-bit big-endian
 A....D pcm_s32le            PCM signed 32-bit little-endian
 A....D pcm_s32le_planar     PCM signed 32-bit little-endian planar
 A....D pcm_s64be            PCM signed 64-bit big-endian
 A....D pcm_s64le            PCM signed 64-bit little-endian
 A....D pcm_s8               PCM signed 8-bit
 A....D pcm_s8_planar        PCM signed 8-bit planar
 A....D pcm_u16be            PCM unsigned 16-bit big-endian
 A....D pcm_u16le            PCM unsigned 16-bit little-endian
 A....D pcm_u24be            PCM unsigned 24-bit big-endian
 A....D pcm_u24le            PCM unsigned 24-bit little-endian
 A....D pcm_u32be            PCM unsigned 32-bit big-endian
 A....D pcm_u32le            PCM unsigned 32-bit little-endian
 A....D pcm_u8               PCM unsigned 8-bit
 A....D pcm_vidc             PCM Archimedes VIDC
 A....D real_144             RealAudio 1.0 (14.4K) (codec ra_144)
 A....D roq_dpcm             id RoQ DPCM
 A..X.D s302m                SMPTE 302M
 A....D sbc                  SBC (low-complexity subband codec)
 A..X.D sonic                Sonic
 A..X.D sonicls              Sonic lossless
 A....D libspeex             libspeex Speex (codec speex)
 A..X.D truehd               TrueHD
 A....D tta                  TTA (True Audio)
 A..X.D vorbis               Vorbis
 A....D libvorbis            libvorbis (codec vorbis)
 A....D wavpack              WavPack
 A....D wmav1                Windows Media Audio 1
 A....D wmav2                Windows Media Audio 2
 S..... ssa                  ASS (Advanced SubStation Alpha) subtitle (codec ass)
 S..... ass                  ASS (Advanced SubStation Alpha) subtitle
 S..... dvbsub               DVB subtitles (codec dvb_subtitle)
 S..... dvdsub               DVD subtitles (codec dvd_subtitle)
 S..... mov_text             3GPP Timed Text subtitle
 S..... srt                  SubRip subtitle (codec subrip)
 S..... subrip               SubRip subtitle
 S..... text                 Raw text subtitle
 S..... ttml                 TTML subtitle
 S..... webvtt               WebVTT subtitle
 S..... xsub                 DivX subtitles (XSUB)

②、举例

下面命令的功能是从输入视频文件的第 10 秒开始截取持续 10.345 秒的视频,并将截取后的视频保存为 FLV 格式的文件。视频和音频的编码格式将与输入文件相同,没有进行重新编码,只是进行了格式转换和截取操作。

ffmpeg -ss 10 -i SampleVideo_1280x720_20mb.mp4 -t 00:00:10.345 -vcodec copy -acodec copy -f flv -y SampleVideo-testflv.flv

回显信息:

PS D:\Work\test> ffmpeg -ss 10 -i SampleVideo_1280x720_20mb.mp4 -t 00:00:10.345 -vcodec copy -acodec copy -f flv -y SampleVideo-testflv.flv
ffmpeg version 6.0-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
  libavutil      58.  2.100 / 58.  2.100
  libavcodec     60.  3.100 / 60.  3.100
  libavformat    60.  3.100 / 60.  3.100
  libavdevice    60.  1.100 / 60.  1.100
  libavfilter     9.  3.100 /  9.  3.100
  libswscale      7.  1.100 /  7.  1.100
  libswresample   4. 10.100 /  4. 10.100
  libpostproc    57.  1.100 / 57.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'SampleVideo_1280x720_20mb.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01T00:00:00.000000Z
    encoder         : Lavf53.24.2
  Duration: 00:01:57.31, start: 0.000000, bitrate: 1436 kb/s
  Stream #0:0[0x1](und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 1048 kb/s, 25 fps, 25 tbr, 12800 tbn (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 383 kb/s (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
Output #0, flv, to 'SampleVideo-testflv.flv':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf60.3.100
  Stream #0:0(und): Video: h264 (Main) ([7][0][0][0] / 0x0007), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 1048 kb/s, 25 fps, 25 tbr, 1k tbn (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1(und): Audio: aac (LC) ([10][0][0][0] / 0x000A), 48000 Hz, 5.1, fltp, 383 kb/s (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=  299 fps=0.0 q=-1.0 Lsize=    1618kB time=00:00:10.33 bitrate=1283.2kbits/s speed=1.2e+03x
video:1039kB audio:563kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.975729%
PS D:\Work\test>

使用 MediaInfo 查看生成文件相关信息,可以看到截取的视频长度为 11s 976 ms,且包含 1 路视频流及 1 路音频流,帧率为25 帧。
在这里插入图片描述
注:这里是 11s 多而不是 10.345s 的原因是截取时是以一个 GOP 进行截取的。

使用 VLC 播放确实如此:
在这里插入图片描述

2、视频选项

①、主要命令选项

  • -vframes number (output):设置输出文件的帧数,是 -frames:v 的别名。
  • -b:设定视频流量, 默认为 200Kbit/s,bitrate
  • -r[:stream_specifier] fps (input/output,per-stream): 设置帧率(一种 Hz 值,缩写或者分数值)。
  • -s[:stream_specifier] size (input/output,per-stream) :设置帧的尺寸。
  • -vn (output) 禁止输出视频。N:no
  • -vcodec codec (output):设置视频编码器, 这是 -codec:v 的一个别名。
  • aspect[:stream_specifier] aspect (output,per-stream):指定视频的纵横比(长宽显示比例)。aspect 是一 个浮点数字符串或者 num:den 格式字符串(其值就是 num/den) ,例如 "4:3""16:9""1.3333" 以及 "1.7777" 都是常用参数值。

②、举例

1)提取固定帧

下面命令的功能是将输入视频文件进行重新编码,并截取前 90 帧视频,然后将重新编码和截取后的视频保存为 FLV 格式的文件。视频编码器使用了 libx264,这意味着输出视频将使用 x264 编码器进行压缩,以提供高质量的视频编码。

ffmpeg -i SampleVideo_1280x720_20mb.mp4 -vcodec libx264 -vframes 75 -f flv -y SampleVideo-testflv.flv

回显信息:

PS D:\Work\test> ffmpeg -i SampleVideo_1280x720_20mb.mp4 -vcodec libx264 -vframes 75 -f flv -y SampleVideo-testflv.flv
ffmpeg version 6.0-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
  libavutil      58.  2.100 / 58.  2.100
  libavcodec     60.  3.100 / 60.  3.100
  libavformat    60.  3.100 / 60.  3.100
  libavdevice    60.  1.100 / 60.  1.100
  libavfilter     9.  3.100 /  9.  3.100
  libswscale      7.  1.100 /  7.  1.100
  libswresample   4. 10.100 /  4. 10.100
  libpostproc    57.  1.100 / 57.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'SampleVideo_1280x720_20mb.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01T00:00:00.000000Z
    encoder         : Lavf53.24.2
  Duration: 00:01:57.31, start: 0.000000, bitrate: 1436 kb/s
  Stream #0:0[0x1](und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 1048 kb/s, 25 fps, 25 tbr, 12800 tbn (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 383 kb/s (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
[libx264 @ 00000211314d7340] using SAR=1/1
[libx264 @ 00000211314d7340] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 00000211314d7340] profile High, level 3.1, 4:2:0, 8-bit
[libx264 @ 00000211314d7340] 264 - core 164 r3106 eaa68fa - H.264/MPEG-4 AVC codec - Copyleft 2003-2023 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=22 lookahead_threads=3 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, flv, to 'SampleVideo-testflv.flv':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf60.3.100
  Stream #0:0(und): Video: h264 ([7][0][0][0] / 0x0007), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 1k tbn (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc60.3.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
  Stream #0:1(und): Audio: mp3 ([2][0][0][0] / 0x0002), 48000 Hz, stereo, fltp (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc60.3.100 libmp3lame
frame=   75 fps=0.0 q=-1.0 Lsize=     759kB time=00:00:02.97 bitrate=2088.0kbits/s speed=5.24x
video:708kB audio:47kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.517854%
[libx264 @ 00000211314d7340] frame I:1     Avg QP:20.95  size:110857
[libx264 @ 00000211314d7340] frame P:20    Avg QP:22.84  size: 20399
[libx264 @ 00000211314d7340] frame B:54    Avg QP:28.08  size:  3798
[libx264 @ 00000211314d7340] consecutive B-frames:  1.3%  8.0%  0.0% 90.7%
[libx264 @ 00000211314d7340] mb I  I16..4:  6.1% 25.2% 68.8%
[libx264 @ 00000211314d7340] mb P  I16..4:  1.7%  5.3%  0.8%  P16..4: 44.9% 19.7% 10.2%  0.0%  0.0%    skip:17.2%
[libx264 @ 00000211314d7340] mb B  I16..4:  0.2%  0.4%  0.1%  B16..8: 50.8%  2.8%  0.3%  direct: 0.6%  skip:44.8%  L0:54.1% L1:42.1% BI: 3.8%
[libx264 @ 00000211314d7340] 8x8 transform intra:52.3% inter:70.8%
[libx264 @ 00000211314d7340] coded y,uvDC,uvAC intra: 67.9% 80.2% 34.6% inter: 11.8% 15.8% 0.8%
[libx264 @ 00000211314d7340] i16 v,h,dc,p: 19% 28% 10% 44%
[libx264 @ 00000211314d7340] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 19% 14%  5%  9%  9%  8%  7%  8%
[libx264 @ 00000211314d7340] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 13% 10%  9%  9% 10%  7% 14%  7%
[libx264 @ 00000211314d7340] i8c dc,h,v,p: 46% 23% 20% 11%
[libx264 @ 00000211314d7340] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 00000211314d7340] ref P L0: 71.2% 14.7% 13.0%  1.1%
[libx264 @ 00000211314d7340] ref B L0: 96.7%  3.1%  0.2%
[libx264 @ 00000211314d7340] ref B L1: 99.3%  0.7%
[libx264 @ 00000211314d7340] kb/s:1930.46

使用 MediaInfo 查看生成文件相关信息,可以看到截取的视频长度为 3s 81ms,且包含 1 路视频流及 1 路音频流,帧率为25 帧。视频编码格式为 AVC,音频编码格式为 MP3。
在这里插入图片描述

2)禁止输出视频

下面命令的功能是将输入视频文件中的音频流提取出来,并保存为 FLV 格式的文件。通过使用 -vn 选项,该命令禁用了视频流的处理,只保留音频流。这可以用于提取音频轨道,或者将视频文件转换为只包含音频的文件。

ffmpeg -i SampleVideo_1280x720_20mb.mp4 -vn -f flv -y SampleVideo-testflv.flv

使用 MediaInfo 对其进行分析,可以看到只有一路音频流:
在这里插入图片描述

3)指定视频的纵横比

下面命令的功能是从输入视频文件中截取前 75 帧,并将截取后的视频调整为 640x480 的分辨率,同时设置显示比例为 4:3。然后将截取和调整后的视频保存为 FLV 格式的文件。

ffmpeg -i SampleVideo_1280x720_20mb.mp4 -vframes 75 -s 640*480 -aspect "4:3" -f flv -y SampleVideo-testflv.flv

使用 MediaInfo 对其进行分析,可以看到视频的横纵比为4:3
在这里插入图片描述

3、音频选项

①、主要命令选项

  • -aframes number (output):设置 number 音频帧输出,是 -frames:a 的别名。
  • -ar[:stream_specifier] freq (input/output,per-stream):设置音频采样率。默认是输出同于输入。对于输入进行设置,仅仅通道是真实的设备或者 raw 数据分离出并映射的通道才有效。对于输出则可以强制设置音频量化的采用率。
  • -aq q (output):设置音频品质(编码指定为 VBR),它是 -q:a 的别名。
    • quality settings (VBR)
      • -aq 4 = 128 kb/s
      • -aq 5 = 160 kb/s
      • -aq 6 = 192 kb/s
      • -aq 7 = 224 kb/s
      • -aq 8 = 256 kb/s
  • -ac[:stream_specifier] channels (input/output,per-stream):设置音频通道数。默认输出会有输入相同的音频通道。对于输入进行设置,仅仅通道是真实的设备或者 raw 数据分离出并映射的通道才有效。
  • -an (output):禁止输出音频。
  • -acode codec (input/output):设置音频解码/编码的编/解码器,是 -codec:a 的别名。

②、举例

下面命令的功能是从输入视频文件中提取音频流,并截取前 180 帧音频。然后使用 libmp3lame 编码器将截取的音频压缩为 MP3 格式。输出音频是立体声,采样率为 48000Hz。最后,将处理后的音频保存为 FLV 格式的文件。

ffmpeg -i SampleVideo_1280x720_20mb.mp4 -vn -aframes 180 -acodec libmp3lame -ac 2 -ar 48000 -y SampleVideo-testflv.flv

使用 MediaInfo 对其进行分析:
在这里插入图片描述

4、字幕选项

字幕格式包括:srtassssa,…

①、主要命令选项

  • -scodec codec(input/output):设置字幕解码器,是 -codec:s 的别名。
  • -sn (output):禁止输出字幕。

②、举例

1)将字幕加入视频中

新建一个 test.srt 文件,文件格式为 UTF-8,将下面内容复制进去,并进行保存

1
00:00:00,009 --> 00:00:03,490
这是一个字幕测试案例

2
00:00:05,619 --> 00:00:07,420
我们将从这个例子中

3
00:00:09,549--> 00:00:12,170
学会如何向视频中添加字幕

下面命令的功能是将输入视频文件与指定的字幕文件进行合并,生成一个包含字幕的新视频文件。通过使用 -vf subtitles=test.srt 选项,该命令将输入视频的图像流与字幕文件中的文字内容进行合成,生成一个带有字幕的输出视频文件 “test.mp4”。

ffmpeg -i SampleVideo_1280x720_20mb.mp4 -vf subtitles=test.srt -y test.mp4

使用 MediaInfo 对其进行分析,这里只有音频流和视频流,无字幕流
在这里插入图片描述
注意:这里没有字幕流的原因是我们使用的是 -vf 视频过滤器,因此将字幕直接打到视频流里面了

打开 test.mp4 文件我们可以看到字幕:
在这里插入图片描述

2)字幕格式转换

MP4 支持的字幕格式主要有两种常见的格式:SRT(SubRip Subtitle)和VTT(WebVTT Subtitle)

MKV(Matroska Video)是一种开放的多媒体容器格式,支持多种字幕格式,其中包括:SRT(SubRip Subtitle)、VobSub(.sub/.idx)、SSA/ASS(SubStation Alpha)、PGS(Presentation Graphic Stream)等。

srt 格式字幕转换成 ass 格式命令:

ffmpeg -i test.srt test.ass

回显信息:

PS D:\Work\test> ffmpeg -i test.srt test.ass
ffmpeg version 6.0-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
  libavutil      58.  2.100 / 58.  2.100
  libavcodec     60.  3.100 / 60.  3.100
  libavformat    60.  3.100 / 60.  3.100
  libavdevice    60.  1.100 / 60.  1.100
  libavfilter     9.  3.100 /  9.  3.100
  libswscale      7.  1.100 /  7.  1.100
  libswresample   4. 10.100 /  4. 10.100
  libpostproc    57.  1.100 / 57.  1.100
Input #0, srt, from 'test.srt':
  Duration: N/A, bitrate: N/A
  Stream #0:0: Subtitle: subrip
Output #0, ass, to 'test.ass':
  Metadata:
    encoder         : Lavf60.3.100
  Stream #0:0: Subtitle: ass
    Metadata:
      encoder         : Lavc60.3.100 ssa
Stream mapping:
  Stream #0:0 -> #0:0 (subrip (srt) -> ass (ssa))
Press [q] to stop, [?] for help
size=       1kB time=00:00:09.55 bitrate=   0.7kbits/s speed=6.23e+03x
video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:1kB muxing overhead: 450.980377%

生成的 test.ass 文件内容如下:

[Script Info]
; Script generated by FFmpeg/Lavc60.3.100
ScriptType: v4.00+
PlayResX: 384
PlayResY: 288
ScaledBorderAndShadow: yes
YCbCr Matrix: None

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,2,10,10,10,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.01,0:00:03.49,Default,,0,0,0,,这是一个字幕测试案例
Dialogue: 0,0:00:05.62,0:00:07.42,Default,,0,0,0,,我们将从这个例子中
Dialogue: 0,0:00:09.55,0:00:12.17,Default,,0,0,0,,学会如何向视频中添加字幕

下面命令使用 FFmpeg 工具进行视频转码和字幕添加的操作。

ffmpeg -i SampleVideo_1280x720_20mb.mp4 -i test.ass -c copy -y SampleVideo-testmvk.mkv

使用 MediaInfo 对其进行分析,这里有三路流:音频流、视频流和字幕流
在这里插入图片描述

3)提取字幕

下面命令式将输入文件 “SampleVideo-testmvk.mkv” 中的音频和视频流去掉,然后将子标题提取出来,保存为 SRT 格式的 “output-sub1.srt” 文件。

ffmpeg -i SampleVideo-testmvk.mkv -an -vn -scodec srt output-sub1.srt

提取后的信息用 notepad++ 查看:
在这里插入图片描述

下面这个命令的主要功能是从 “output1002.mkv” 文件中提取字幕信息,并将这些信息保存为 ASS 格式的字幕文件 “output-sub1.ass”

ffmpeg -i SampleVideo-testmvk.mkv -an -vn -scodec ass -y output-sub1.ass

提取后的信息用 notepad++ 查看:
在这里插入图片描述
下面这个命令的主要目的是将 “SampleVideo_1280x720_20mb.mp4” 视频文件和 “test.ass” 字幕文件合并。它将保持音频流的原始格式,并指定视频流编码格式为 libx264,并将字幕直接添加到视频中,然后将结果保存为 “output1002.mkv” 文件

ffmpeg -i SampleVideo_1280x720_20mb.mp4 -i test.ass -c copy -c:v libx264 -y output1002.mkv

使用 MediaInfo 对其进行分析,这里有三路流:音频流、视频流和字幕流,并且视频流的格式为 AVC
在这里插入图片描述

三、FFmpeg 命令示例

上面已经对相关的 FFmepg 选项进行了详细的讲解及演示,下面仅做个总结但不进行演示了

1、转换格式(封装格式的转化)

①、下面命令将从 input_test.mp4 中提取音频流,并将其直接复制到 output_test.flv 中,而不进行任何重新编码。这可以用来分离音频流或将音频从一个容器格式转换为另一个容器格式,而无需对音频进行重新编码。

ffmpeg -i input_test.mp4 -vn -acodec copy output_test.flv

②、下面命令将从 input_test.aac 中提取音频流,并将其直接复制到 output_test.mp3 中,而不进行任何重新编码。这可以用来将 AAC 格式的音频转换为 MP3 格式,而无需对音频进行重新编码。请注意,如果输入文件的音频编码不支持 MP3 格式,或者输出文件的扩展名不适用于 MP3 格式,那么该命令可能会失败

ffmpeg -i input_test.aac -vn -acodec copy output_test.mp3

2、抽取画面中的音频

①、下面命令将从 input_test.mp4 中提取音频流,并将其直接复制到 output_test.aac 中,而不进行任何重新编码。

ffmpeg -i input_test.mp4 -vn -y -acodec copy output_test.aac

②、下面命令将从 input_test.mp4 中提取音频流,并将其直接复制到 output_test.mp3 中,而不进行任何重新编码。请注意,如果输入文件的音频编码不支持 MP3 格式,或者输出文件的扩展名不适用于 MP3 格式,那么该命令可能会失败

ffmpeg -i input_test.mp4 -vn -y -acodec copy output_test.mp3

③、audio:aac —> mp3(想从 mp4 文件中提取音频并输出为 mp3 格式可以参考以下步骤)
下面命令的作用是将输入文件 input_test.mp4 进行转码,并将其视频流直接复制到输出文件 output_test.flv 中,而音频流将使用 libmp3lame 编码器进行重新编码为 MP3 格式。

ffmpeg -i input_test.mp4 -vcodec copy -acodec libmp3lame -y output_test.flv

该命令从 output_test.flv 中提取音频流,并将其直接复制到 output_test.mp3 中,而不进行任何重新编码。

ffmpeg -i output_test.flv -vn -acodec copy -y output_test.mp3

因此可总结如下:

  • 输出 mp3 格式的音频文件必须输入文件是 mp3 编码的音频流
  • 输出 aac 格式的音频文件必须输入文件是 aac 编码的音频流

3、抽取画面中的视频

该命令将从 input_test.mp4 中提取视频流,并将其直接复制到 output_test.avi 中,而不进行任何重新编码。

ffmpeg -i input_test.mp4 -vcodec copy -an output_test.avi

4、音频+视频合成

下面命令将合并 input_test_1.mp4 和 input_test_2.mp3 两个输入文件,将视频流和音频流直接复制到输出文件 output_test.mp4 中,而不进行任何重新编码。

ffmpeg -i input_test_1.mp4 -i input_test_2.mp3 -vcodec copy -acodec copy output_test.mp4

下面命令将输入的视频文件 input_test_1.mp4 和音频文件 input_test_2.mp3 进行处理,并将它们合并成一个单独的 MP4 文件 output_test.mp4。视频流和音频流都会被直接复制到输出文件中,而不会进行重新编码。在输出文件中,第一个输入文件的视频将在 10 秒后开始播放或处理。

ffmpeg -i input_test_1.mp4 -itsoffset 10 -i input_test_2.mp3 -vcodec copy -acodec copy output_test.mp4

下面命令将输入的视频文件 input_test_1.mp4 的第 20 秒开始的 5 秒内容与音频文件 input_test_2.aac 进行处理,并将它们合并成一个单独的 MP4 文件 output_test.mp4。视频流和音频流都会被直接复制到输出文件中,而不会进行重新编码。输出文件中只包含输入文件指定的时间范围内的内容。

ffmpeg -ss 20 -t 5 -i input_test_1.mp4 -i input_test_2.aac -vcodec copy -acodec copy output_test.mp4

5、音频+音频合成

下面命令将输入的两个音频文件 input_test_1.mp3 和 input_test_2.mp3 进行混音处理,并将它们合并成一个单独的 MP3 文件 output_test.mp3。输出文件的音频时长将与两个输入文件中最短的音频时长相匹配,通过使用 amix 过滤器来实现混音操作。

ffmpeg -i input_test_1.mp3 -i input_test_2.mp3 -filter_complex amix=inputs=2:duration=shortest output_test.mp3
  • -filter_complex amix=inputs=2:duration=shortest:这个选项用于指定复杂的音频过滤器图表。在这个例子中,使用了 amix 过滤器,它将两个输入的音频混合为一个输出。inputs=2 表示有两个输入,duration=shortest 表示输出的音频时长将与最短输入的时长相匹配。

下面命令将输入的两个音频文件 input_test_1.mp3 和 input_test_2.mp3 进行混音处理,并将它们合并成一个单独的 MP3 文件 output_test.mp3。输出文件的音频时长将与两个输入文件中最长的音频时长相匹配,通过使用 amix 过滤器来实现混音操作。

ffmpeg -i input_test_1.mp3 -i input_test_2.mp3 -filter_complex amix=inputs=2:duration=longest output_test.mp3

下面命令将输入的两个音频文件 input_test_1.mp3 和 input_test_2.mp3 进行复制处理,并将它们合并成一个单独的 MP3 文件 output_test.mp3。输出文件的音频编码格式和质量与输入文件完全相同,因为使用了 -acodec copy 选项来进行直接复制。由于输入是音频文件,所以 -vcodec copy 选项实际上没有影响。

ffmpeg -i input_test_1.mp3 -i input_test_2.mp3 -vcodec copy -acodec copy output_test.mp3

下面命令将输入的三个音频文件(INPUT1、INPUT2 和 INPUT3)进行混音处理,并将它们合并成一个单独的输出文件。输出文件的音频时长将与第一个输入文件的时长相匹配,通过使用 amix 过滤器来实现混音操作。在混音转换时,过渡时间为 3 秒。

ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT
  • -filter_complex amix=inputs=3:duration=first:dropout_transition=3:这个选项用于指定复杂的音频过滤器图表。在这个例子中,使用了 amix 过滤器,它将三个输入的音频混合为一个输出。inputs=3 表示有三个输入,duration=first 表示输出的音频时长将与第一个输入的时长相匹配。dropout_transition=3 表示在混音转换时的过渡时间为 3 秒。

6、视频分离成图片

下面命令从输入的视频文件 input_test.mp4 中提取帧,并以每秒一帧的速率保存为 JPEG 图像文件。输出的图像文件将以 output_image-001.jpeg、output_image-002.jpeg 等命名,表示提取的帧的顺序。

ffmpeg -i input_test.mp4 -r 1 -f image2 output_image-%03d.jpeg

7、图片合成视频

下面命令将一系列图像文件(例如 output_image-001.jpeg、output_image-002.jpeg 等)作为输入,使用 FFmpeg 工具将它们合并为一个视频文件 output_test.mp4。输入的图像文件按照帧的顺序进行读取,并转换为视频格式进行合并。输出文件的格式是 MP4。

ffmpeg -f image2 -i output_image-%03d.jpeg output_test.mp4

8、改变音量大小

下面命令将输入的音频文件 input_test.mp3 进行音量调整处理,将音量调整为原来的一半,并生成一个输出的 MP3 文件 output_test.mp3。这里使用了 -af 选项来指定音频过滤器,并设置了 volume 过滤器来实现音量调整。

ffmpeg -i input_test.mp3 -af 'volume=0.5' output_test.mp3

9、音效淡入淡出效果

下面命令将输入的音频文件 input_test.mp3 应用渐入效果处理,从音频的起始位置开始,在 4 秒的时间内逐渐增加音量,并生成一个输出的 MP3 文件 output_test.mp3。渐入效果由 -filter_complex 选项指定的 afade 过滤器实现。

ffmpeg -i input_test.mp3 -filter_complex afade=t=in:ss=0:d=4 output_test.mp3
  • -filter_complex afade=t=in:ss=0:d=4:这个选项用于指定复杂的音频过滤器图表。在这个例子中,使用了 afade 过滤器来实现渐入效果。t=in 表示渐入效果,ss=0 表示从音频的起始位置开始应用渐入,d=4 表示渐入的持续时间为 4 秒。

10、截取音频

下面命令从输入的音频文件 input_test.mp3 中剪切出从第 10 秒到第 20 秒的部分,并生成一个输出的 MP3 文件 output_test.mp3。剪切操作由 -ss 和 -to 选项指定的时间范围来控制。通过使用 -vn 选项,视频流被忽略,只处理音频流。使用 -acodec copy 选项可以直接复制输入音频的编码格式,而不进行重新编码。

ffmpeg -ss 10 -i input_test.mp3 -to 20 -vn -acodec copy output_test.mp3

11、容器时长获取

下面命令使用 FFprobe 工具对输入的音频文件 input_test.mp3 进行分析,仅输出该文件的持续时间(时长)。输出的持续时间以秒为单位。通过设置 -v error 选项,只输出错误信息,并使用 -of 选项设置输出格式。

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 -i
input_test.mp3
  • -v error:这个选项用于设置错误日志的输出级别为错误级别。-v error 表示只输出错误信息,不输出其他信息。
  • -show_entries format=duration:这个选项用于指定要显示的信息条目。在这个例子中,使用 format=duration 表示要显示输入文件的持续时间。
  • -of default=noprint_wrappers=1:nokey=1:这个选项用于设置输出格式。-of default 表示使用默认输出格式,noprint_wrappers=1 表示不打印包装器,nokey=1 表示不打印键名,只输出值。

12、网络资源下载

下面命令使用 FFmpeg 工具从指定的 URL 下载音频文件,并将其保存为 MP3 格式的输出文件 output_test.mp3。通过使用 -c copy选项,输入文件的编码格式将直接复制到输出文件中,而不进行重新编码。使用 -f mp3 选项指定输出文件的格式为 MP3。请注意,https://xxx.xxx.xxxxxx应替换为实际的音频文件的网络地址。

ffmpeg -i https://xxx.xxx.xxxxxx -c copy -f mp3 output_test.mp3

13、播放音频视频

播放 input_test.mp3 文件

ffplay input_test.mp3

14、图片生成 gif 动图

下面命令将一系列图像文件(例如 input_image_001.png、input_image_002.png 等)作为输入,使用 FFmpeg 工具将它们转换为一个 GIF 动画文件 output_test.gif。输入的图像文件按照帧的顺序进行读取,并根据指定的帧率生成 GIF 动画。输出文件的格式是 GIF。

ffmpeg -i input_image_%03d.png -r 5 output_test.gif
  • -ar 44100:这个选项用于指定输出音频的采样率。在这个例子中,-ar 44100 表示输出音频的采样率为 44100 Hz。
  • -ac 2:这个选项用于指定输出音频的通道数。在这个例子中,-ac 2 表示输出音频的通道数为 2,即立体声。
  • -f s16le:这个选项用于指定输出音频的格式。-f s16le 表示输出音频以 16 位有符号整数的 PCM 格式进行保存。

15、抽取 PCM 数据

下面命令从输入的视频文件 input_test.mp4 中提取音频,并将其保存为 PCM 格式的音频文件 output_test.pcm。通过使用 -vn 选项,视频流被忽略,只处理音频流。使用 -ar 选项指定输出音频的采样率,-ac 选项指定输出音频的通道数,-f 选项指定输出音频的格式为 16 位有符号整数的 PCM。

ffmpeg -i input_test.mp4 -vn -ar 44100 -ac 2 -f s16le output_test.pcm

下面命令使用 ffplay 命令行工具播放 PCM 格式的音频文件 output_test.pcm。通过设置 -ar 选项,指定音频的采样率为 44100 Hz,-ac 选项指定音频的通道数为 2(立体声),-f 选项指定输入音频的格式为 16 位有符号整数的 PCM。

ffplay -ar 44100 -ac 2 -f s16le output_test.pcm

我的qq:2442391036,欢迎交流!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/137363.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

redis的高可用

1.redis的高可用 在集群当中有一个非常重要的指标,提供正常服务的时间的百分比(365天)99% redis的高可用含义更宽泛,正常服务是指标之一,数据容量的扩展,数据的安全性。 在redis中实现高可用技术&#x…

循环链表3

插入函数——插入数据,在链表plsit的pos位置插入val数据元素 位置pos(在无特别说明的情况下)是从0开始计数的 要改变链表结构,就要依赖前驱,每个前驱的next存储着下一个数据结点的地址,也就是依靠前驱的ne…

数据类型扩展02

1、字符串拓展 所有的字符本质还是数字。 char c1 a;char c2 中;System.out.println("c1:"c1);System.out.println("c1转换:"(int)c1);System.out.println("c2:"c2);System.out.println("c2转换:"(int)c2); 执行结果 c1:a c1转换:…

Java修仙记之记录一次与前端女修士论道的经历

文章开始之前,想跟我念一句:福生无量天尊,无量寿佛,阿弥陀佛 第一场论道:id更新之争 一个天气明朗的下午,前端的小美女长发姐告诉我:嘿,小后端,你的代码报错了 我答道&am…

3.6 Windows驱动开发:内核进程汇编与反汇编

在笔者上一篇文章《内核MDL读写进程内存》简单介绍了如何通过MDL映射的方式实现进程读写操作,本章将通过如上案例实现远程进程反汇编功能,此类功能也是ARK工具中最常见的功能之一,通常此类功能的实现分为两部分,内核部分只负责读写…

通过AppLink把拼多多热门榜单商品同步至小红书

上篇说到AppLink当中定时调度方式如何配置,这次来演示一下,如何把热门榜单信息同步至小红书 1.拉取一个定时器作为触发动作,通过配置定时器调度时间将定时策略配置为每天执行一次 2.触发动作完成后通过好单库获取拼多多每日热门榜单&#xf…

单元测试实战(四)MyBatis-Plus 的测试

为鼓励单元测试,特分门别类示例各种组件的测试代码并进行解说,供开发人员参考。 本文中的测试均基于JUnit5。 单元测试实战(一)Controller 的测试 单元测试实战(二)Service 的测试 单元测试实战&am…

人机交互复习专题

第一章概述 1.1人机交互的概念与理解 人机交互的概念与理解 人机交互是人与机器进行交互的操作方式,即用户与机器互相传递信息的媒介。好的人机交互界面美观且通俗易懂、操作简单有引导功能,使用户感受到愉快、有兴趣,从而提升使用效率。 美…

【阿里云】图像识别

一、阿里云官网资料及配置本地 二、配置环境变量 三、C语言调用阿里云Python接口 一、阿里云官网资料及配置本地 阿里云官网 垃圾识别分类 sudo apt install python3-pip pip3 install alibabacloud_imagerecog20190930可能出现的网络问题 二、配置环境变量 配置环境变量A…

猫罐头牌子哪个好一点?精选5款口碑好的猫罐头推荐!

猫罐头牌子哪个好一点?选择猫罐头是十分重要的事情,千万不能将就。因为,好的猫罐头不仅可以营养丰富,水分充足,适口性好,还能易吸收。而一旦选择错误,不仅无法达到上述效果,还可能产…

在Python中调用imageJ开发

文章目录 一、在ImageJ中进行Python开发二、在Python中调用imageJ开发2.1、简介2.2、环境配置2.3、测试一2.4、测试二 Python imageJ 解决方案,采坑记录 一、在ImageJ中进行Python开发 原生ImageJ仅支持JS脚本(JAVAScript),而Im…

虾皮网同行数据丨虾皮数据工具-知虾:监控竞争对手数据的利器

在如今的电商竞争激烈的市场中,了解竞争对手的销售情况和策略对于制定自己的营销策略至关重要。虾皮网作为一家知名的电商平台,提供了一款强大的同行数据工具-知虾,可以帮助卖家监控竞争对手的数据,为自己的业务发展提供有力支持。…

请收藏!2023年全栈开发人员实战进阶指南终极版

全栈工程师在过去十年中越来越受到欢迎,而且在国内的就业环境下,它是更适合从技术转管理的职位。 但究竟什么是全栈工程师?他需要哪些技术能力?如何才能成为一名优秀的全栈工程师?今天这篇文章就给大家全方位分享一下…

去除IDEA中代码的波浪线(黄色警示线)

去除IDEA中代码的波浪线 首先是点击File—>Settings 操作如下图所示: 然后点击Editor—>Inspections—>General—>Duplicated code fragment(去掉勾选)—>Apply—>OK 即可,详情请看下图所示:

构建和应用卡尔曼滤波器 (KF)--扩展卡尔曼滤波器 (EKF)

作为一名数据科学家,我们偶尔会遇到需要对趋势进行建模以预测未来值的情况。虽然人们倾向于关注基于统计或机器学习的算法,但我在这里提出一个不同的选择:卡尔曼滤波器(KF)。 1960 年代初期,Rudolf E. Kal…

华为云cce中环境变量的使用

如上图,cce中的环境变量可配置。 配置后的这些参数怎么用呢? 我们可以在docker打包前在springboot的配置文件中配置,cce在启动的时候会调用环境变量中的设置。 如上图,配置的东西以key值标记,冒号后面的是默认配置项…

jenkins-2.426.1-1.1.noarch.rpm 的公钥没有安装

执行命令 yum install jenkins 报错 jenkins-2.426.1-1.1.noarch.rpm 的公钥没有安装 下载的软件包保存在缓存中,直到下次成功执行事务。 您可以通过执行 yum clean packages 删除软件包缓存。 错误:GPG 检查失败 解决办法: 1、安装新的公…

CentOS8部署Skywalking(非容器方式)

一、官网下载安装包 二、安装 #tar -zxf apache-skywalking-apm-9.6.0.tar.gz #mv apache-skywalking-apm-9.6.0 skywalking #cd /opt/skywalking 修改配置文件 #vi /opt/skywalking/config/application.yml #vi vi /opt/skywalking/webapp/application.yml 三、运行 ./bin…

福州大学《嵌入式系统综合设计》实验三:多媒体开发基础编程

一、实验目的 本实验基于搭建好的开发环境和硬件环境,通过编写简单的通信实验,验证开发环境,掌握多媒体开发编程基础,包括SOCKET编程、多线程编程和线程同步知识。 二、实验内容 基于套接字、多线程、同步锁机制实现多媒体文件…

Java爬虫框架下代理使用中的TCP连接池问题及解决方案

引言 当使用Java爬虫框架进行代理爬取时,可能会遇到TCP连接池问题,导致"java.net.BindException: Cannot assign requested address"等错误。本文将介绍如何以爬取小红书为案例,解决Java爬虫框架中代理使用中的TCP连接池问题&…
最新文章