FFmpeg的简单使用【Windows】

目录

一、视频生成图片

静态图片

转码过程

动态图片gif

二、图片生成视频

三、FFmpeg常用参数命令

[3.1 主要参数](#3.1 主要参数)

3.1.1、-i

3.1.2、-f

3.1.3、-ss

3.1.4、-t

[3.2 音频参数](#3.2 音频参数)

3.2.1、-aframes

[3.2.2、 -b:a](#3.2.2、 -b:a)

3.2.3、-ar

3.2.4、-ac

3.2.5、-acodec

3.2.6、-an

3.2.7、-af

[3.3 视频参数](#3.3 视频参数)

3.3.1、-vframes

3.3.2、-b

3.3.3、-b:v

3.3.4、-r

3.3.5、-s

3.3.6、-vn

3.3.7、-aspect

3.3.8、-vcodec

3.3.9、-vf

[3.4 查看帮助 ffmpeg -h](#3.4 查看帮助 ffmpeg -h)

四、使用FFmpeg工具进行视频转码的操作流程

解释说明

该过程的命令行

五、抽取完整视频的视频和音频

[5.1 保留封装格式](#5.1 保留封装格式)

提取音频(保留编码格式)

提取视频(保留编码格式)

[5.2 提取视频](#5.2 提取视频)

提取视频(保留编码格式)

强制格式(转换编码格式)

[5.3 提取音频](#5.3 提取音频)

提取音频(保留编码格式)

强制格式(转换编码格式)

[六、 提取像素格式(YUV和RGB格式)转换格式](#六、 提取像素格式(YUV和RGB格式)转换格式)

[6.1 提取YUV数据](#6.1 提取YUV数据)

[6.2 提取RGB数据](#6.2 提取RGB数据)

[6.3 RGB和YUV之间的转换](#6.3 RGB和YUV之间的转换)

[七、 更改视频和音频文件参数并输出新文件](#七、 更改视频和音频文件参数并输出新文件)

[7.1 保持编码格式](#7.1 保持编码格式)

[7.2 改变编码格式](#7.2 改变编码格式)

[7.3 修改帧率](#7.3 修改帧率)

正确命令

错误命令

[7.4 修改视频码率](#7.4 修改视频码率)

正确命令

错误命令

[7.5 修改音频码率](#7.5 修改音频码率)

[7.6 同时修改音频码率和视频码率](#7.6 同时修改音频码率和视频码率)

[7.7 修改视频分辨率](#7.7 修改视频分辨率)

[7.8 修改音频采样率](#7.8 修改音频采样率)


一、视频生成图片

静态图片

在视频所在文件中打开**【命令提示符】窗口,然后输入以下命令即可将视频生成.jpg** 的图片

javascript 复制代码
ffmpeg -i hang.mp4 -r 25 -f image2 data/image%3d.jpg

说明:

  • -i hang.mp4:指定输入文件问 hang.mp4。
  • -r 25:设置输出图像的帧率为每秒25帧。
  • -f image2:指定输出格式为图像序列。
  • data/image%3d.jpg:指定输出图像文件名的格式,其中%3d表示使用三位数字作为图像的编号,并以 .jpg作为文件扩展名,生成的图像文件将保存在当前路径下一个名为 data 的文件夹中【data文件夹如果一开始不存在的话将会报错】。
转码过程
javascript 复制代码
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'hang.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.71.100
  Duration: 00:00:04.47, start: 0.000000, bitrate: 1116 kb/s
  Stream #0:0[0x1](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
      Metadata:
        handler_name    : SoundHandler
        vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, smpte170m/bt470bg/smpte170m, progressive), 480x854 [SAR 1:1 DAR 240:427], 976 kb/s, 29.55 fps, 30 tbr, 90k tbn (default)
      Metadata:
        handler_name    : VideoHandler
        vendor_id       : [0][0][0][0]

解释说明:

  • 输入文件格式为: mov/mp4/m4a/3gp/3g2/mj2
  • 其中数据包括:
    • 主要品牌(major_brand)
    • 次要版本(minor_version)
    • 兼容品牌(compatible_brands)
  • 视频时长为4秒47毫秒,起始时间为0秒,比特率为 1116 kb/s
  • 音频流(Stream #0:0)的详细信息:
    • 编码格式:aac(LC),使用的是AAC长期配置文件(Long Term Profile)
    • 标签:mp4a / 0x6134706D,这是音频编解码器的标签
    • 采样频率:44100Hz
    • 声道数量:stereo,双声道
    • 精度:flp,表示使用的是浮点数精度
    • 比特率:128kb/s
  • 视频流(Stream #0:1)的详细信息:
    • 编码格式:h264(High),使用的是H.264高级配置文件(profile)
    • 标签:avc1 / 0x31637661,这是视频编解码器的标签
    • 像素格式:yuv420p,这是一种常见的颜色空间编码方式
    • 色彩空间:tv,smpte170m/bt470bg/smpte170m,这是表示视频的色彩空间遵循这些标准之一
    • 扫描类型:progressive,表示视频是非交错的(逐行扫描)
    • 分辨率:480 * 854
    • 方向比例:SAR 1:1 DAR 240:427,样本宽高比(Sample Aspect Ratio)为1:1,显示宽高比(Display Aspect Ratio)为240:427
    • 比特率:976kb/s
    • 帧速率:29.55fps
    • 时间基:30 tbr,90k tbn,时间基比率(Time Base Rate)为30,时间基数(Time Base Number)为90k
javascript 复制代码
Output #0, image2, to 'data/image%3d.jpg':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf61.7.100
  Stream #0:0(und): Video: mjpeg, yuv420p(pc, smpte170m/bt470bg/smpte170m, progressive), 480x854 [SAR 1:1 DAR 240:427], q=2-31, 200 kb/s, 25 fps, 25 tbn (default)
      Metadata:
        handler_name    : VideoHandler
        vendor_id       : [0][0][0][0]
        encoder         : Lavc61.19.100 mjpeg
      Side data:
        cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
[out#0/image2 @ 000001e29ef3c300] video:1804KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
frame=  112 fps=0.0 q=24.8 Lsize=N/A time=00:00:04.48 bitrate=N/A dup=0 drop=21 speed=15.6x

转换过程中的输出信息说明:

  • 输出文件格式为图像序列(image2),保存在 'data/image%3d.jpg'中
  • 输出文件的元数据与输入文件相似,包括:
    • 主要品牌(major_brand)
    • 次要版本(minor_version)
    • 兼容品牌(compatible_brands)
  • 视频流(Stream #0:0)的详细信息:
    • 编码格式:mjpeg,使用的是Motion JPEG编码
    • 像素格式:yuv420p,这是一种常见的颜色空间编码方式
    • 色彩空间:yuv420p(pc,smpte170m/bt470bg/smpte170m, progressive),表示视频的色彩空间遵循这些标准之一
    • 扫描类型:progressive,表示视频是非交错的(逐行扫描)
    • 分辨率:480 * 854
    • 方向比例:SAR 1:1 DAR 240:427,样本宽高比(Sample Aspect Ratio)为1:1,显示宽高比(Display Aspect Ratio)为240:427
    • 编码质量:q=2-31,这表示量化等级(quality level)的范围是从2到31
    • 比特率:200kb/s
    • 帧速率:25fps
    • 时间基:25 tbn,时间基数(Time Base Number)为25
  • 视频数据总量为1804KiB,没有音频、字幕或其他流的数据
  • 转换过程中输出的帧数为112帧,帧速率为0fps,转换时间为4秒48毫秒

动态图片gif

javascript 复制代码
ffmpeg -i hang.mp4 -t 3 -r 1 data/image1.gif

说明:

  • -i hang.mp4:指定输入文件为 hang.mp4
  • -t 3:设置输出文件的最大持续时间为3秒,如果原视频文件超过3秒,那么只会处理前3秒的内容
  • -r 1:设置输出帧率为1帧每秒,这意味着在生成GIF时,每秒钟只选取一帧图像
  • image1.gif:指定输出文件的名称为image1.gif,输出格式为GIF
javascript 复制代码
ffmpeg -i hang.mp4 -t 4 -r 25 -s 640*360 data/image3.gif

说明:

  • -i hang.mp4:指定输入文件为 hang.mp4
  • -t 4:设置输出文件的最大持续时间为4秒,如果原视频文件超过4秒,那么只会处理前3秒的内容
  • -r 25:设置输出帧率为25帧每秒,这意味着在生成GIF时,每秒钟只选取一帧图像
  • -s 640*360:设置输出的分辨率大小为640*360像素,这回强制输出的GIF图像具有指定的尺寸
  • image2.gif:指定输出文件的名称为image2.gif,输出格式为GIF

二、图片生成视频

注意:合成的视频没有音频

javascript 复制代码
ffmpeg -r 25 -f image2 -i data/image%3d.jpg -vcodec libx264 -s 480*854-g 1 -keyint_min 25 -sc_threshold 0 -pix_fmt yuv420p out.mp4

说明 :

  • -r 25:设置输出视频的帧率为每秒25帧
  • -f image2:指定输入格式为图像序列
  • -i data/image%3d.jpg:指定输入图像文件名的格式,其中%3d表示使用三位数字作为图像的编号
  • -vcodec libx264:执行视频编码器为libx264,这是一个常用的H.264编码器
  • -s 480*854:设置输出视频的分辨率为480*854像素
  • -g 1:设置关键帧间隔为1,即每一帧都是关键帧
  • -keyint_min 25:设置最小关键帧间隔为25帧
  • -sc_threshold 0:设置场景切换阈值为0,这意味着不考虑场景切换
  • -pix_fmt yuv420p:设置像素格式为yuv420p,这是H.264编码器的常用格式
  • out.mp4:指定输出文件名为out.mp4

三、FFmpeg常用参数命令

3.1 主要参数

3.1.1、-i

说明:指定输入文件

用途:告诉 FFmpeg 从哪里读取多媒体文件

示例:

javascript 复制代码
// 将 input.mp4 文件作为输入,并将其转换为 output.mp4 文件
ffmpeg -i input.mp4 output.mp4
3.1.2、-f

说明: 指定输出格式

用途:告诉FFmpeg输出文件应该以哪种容器格式

示例:

javascript 复制代码
// 将 input.mp4 文件转换为 Matroska 容器格式的 output.mkv 文件
ffmpeg -i input.mp4 -f matroska output.mkv
3.1.3、-ss

说明: 从指定的时间戳开始处理视频

用途:允许从视频中的某个特定时间点开始处理

示例:

javascript 复制代码
// 从 input.mp4 文件的1分30秒处开始处理,并处理接下来的30秒,最终输出为 output.mp4 文件
ffmpeg -i input.mp4 -ss 00:01:30 -t 00:00:30 output.mp4
3.1.4、-t

说明: 处理指定的持续时间

用途:允许从指定时间点开始处理一段特定时长的视频

示例:

javascript 复制代码
// 从 input.mp4 文件的1分30秒处开始处理,并处理接下来的30秒,最终输出为 output.mp4 文件
ffmpeg -i input.mp4 -ss 00:01:30 -t 00:00:30 output.mp4

3.2 音频参数

3.2.1、-aframes

说明:设置要输出的音频帧数

用途:用于限制输出音频的长度,特别适用于需要精确控制输出音频帧数的情况

示例:

javascript 复制代码
// 提取前200帧音频并复制编解码器
ffmpeg -i input.mp4 -aframes 200 -c:a copy output.mp3
3.2.2、 -b:a

说明:设置音频的比特率

用途:控制输出音频的质量,比特率越高,通常音质越好,但文件大小也会越大

示例:

javascript 复制代码
// 设置音频比特率为128kbps
ffmpeg -i input.mp4 -b:a 128k output.mp3
3.2.3、-ar

说明:设定音频的采样率

用途:改变输出音频的采样率,通常用于提高或降低音频的质量

示例:

javascript 复制代码
// 设置音频采样率为44100Hz
ffmpeg -i input.mp4 -ar 44100 output.mp3
3.2.4、-ac

说明:设定音频的声道数(通道数)

用途:用于调整输出音频的声道数,如单声道(1声道)或立体声(2声道)

示例:

javascript 复制代码
// 设置音频为立体声
ffmpeg -i input.mp4 -ac 2 output.mp3
3.2.5、-acodec

说明:设定音频编解码器

用途:选择不同的音频编解码器进行编码或解码

示例:

javascript 复制代码
// 复制音频流
ffmpeg -i input.mp4 -acodec aac output.mp4

注意:如果使用 copy,则表示直接复制输入文件中的音频流而不进行重新编码

3.2.6、-an

说明:禁用音频流

用途:用于输出文件时不包含音频流,通常用于仅保留视频或生成静音文件

示例:

javascript 复制代码
// 生成静音视频文件
ffmpeg -i input.mp4 -an output.mp4
3.2.7、-af

说明:应用音频滤镜

用途:对音频进行各种处理,如调整音量、淡入淡出、混音等

示例:

javascript 复制代码
// 调整音量为1.5倍
ffmpeg -i input.mp4 -af "volume=1.5" output.mp4

3.3 视频参数

3.3.1、-vframes

说明:设置要输出的视频帧数

用途:用于限制输出视频的帧数

示例:

javascript 复制代码
// 将从 input.mp4 文件中提取前100帧,并输出为 output.mp4 文件
ffmpeg -i input.mp4 -vframes 100 output.mp4
3.3.2、-b

说明:设定视频的比特率(过时)

用途:早期版本的ffmpeg使用 -b 来设定视频比特率,但现在推荐使用 -b:v

示例:

javascript 复制代码
// 将 input.mp4 文件的视频比特率设置为1000kbps,并输出为 output.mp4 文件
ffmpeg -i input.mp4 -b:v 1000k output.mp4
3.3.3、-b:v

说明:设定视频的比特率

用途:控制输出视频的质量,比特率越高,通常视频质量越好,但文件大小也会越大

示例:

javascript 复制代码
// 将 input.mp4 文件的视频比特率设置为1000kbps,并输出为 output.mp4 文件
ffmpeg -i input.mp4 -b:v 1000k output.mp4
3.3.4、-r

说明:设定帧速率

用途:改变输出视频的帧速率

示例:

javascript 复制代码
// 将 input.mp4 文件的帧速率设置为30fps,并输出为 output.mp4 文件
ffmpeg -i input.mp4 -r 30 output.mp4
3.3.5、-s

说明:设定画面的宽与高

用途:改变输出视频的分辨率

示例:

javascript 复制代码
// 将 input.mp4 文件的分辨率设置为640x480,并输出为 output.mp4 文件
ffmpeg -i input.mp4 -s 640x480 output.mp4
3.3.6、-vn

说明:不处理视频

用途:用于输出文件时不包含视频流,通常用于仅保留音频

示例:

javascript 复制代码
// 从 input.mp4 文件中提取音频,并输出为 output.mp3 文件,不包含视频流
ffmpeg -i input.mp4 -vn output.mp3
3.3.7、-aspect

说明:设置画面的宽高比

用途:改变输出视频的宽高比

示例:

javascript 复制代码
// 将 input.mp4 文件的画面宽高比设置为16:9,并输出为 output.mp4 文件
ffmpeg -i input.mp4 -aspect 16:9 output.mp4
3.3.8、-vcodec

说明:设定视频编解码器

用途:选择不同的视频编解码器进行编码或解码

示例:

javascript 复制代码
// 将 input.mp4 文件的视频编解码器设置为H.264,并输出为 output.mp4 文件
ffmpeg -i input.mp4 -vcodec h264 output.mp4

注意: 如果使用 copy,则表示直接复制输入文件中视频流而不进行重新编码。

3.3.9、-vf

说明:视频过滤器

用途:对视频进行各种处理,如裁剪、缩放、添加水印等

示例:

javascript 复制代码
// 将 input.mp4 文件的视频先缩放到640x480,然后裁剪为16:9的比例,并输出为 output.mp4 文件
ffmpeg -i input.mp4 -vf "scale=640:480,crop=ih*16/9:ih" output.mp4

3.4 查看帮助 ffmpeg -h

javascript 复制代码
Getting help:
    -h      -- print basic options  // 获取基本帮助选项
    -h long -- print more options
    -h full -- print all options (including all format and codec specific options, very long)
    -h type=name -- print all options for the named decoder/encoder/demuxer/muxer/filter/bsf/protocol
    See man ffmpeg for detailed description of the options.

Per-stream options can be followed by :<stream_spec> to apply that option to specific streams only. <stream_spec> can be a stream index, or v/a/s for video/audio/subtitle (see manual for full syntax).

Print help / information / capabilities:
-L                  show license // 显示许可证信息
-h <topic>          show help // 显示特定主题的帮助信息
-version            show version // 显示版本信息
-muxers             show available muxers // 显示可用的复用器
-demuxers           show available demuxers // 显示可用的解复用器
-devices            show available devices // 显示可用的设备
-decoders           show available decoders // 显示可用的解码器
-encoders           show available encoders // 显示可用的编码器
-filters            show available filters // 显示可用的滤镜
-pix_fmts           show available pixel formats // 显示可用的像素格式
-layouts            show standard channel layouts // 显示标准的声道布局
-sample_fmts        show available audio sample formats // 显示可用的音频样本格式

// 全局选项
Global options (affect whole program instead of just one file):  
-v <loglevel>       set logging level // 设置日志级别
-y                  overwrite output files // 覆盖输出文件,无需确认
-n                  never overwrite output files // 从不覆盖输出文件
-stats              print progress report during encoding // 在编码过程中打印进度报告

 // 主文件选项
Per-file options (input and output): 
-f <fmt>            force container format (auto-detected otherwise) // 强制使用指定的容器格式(否则自动检测)
-t <duration>       stop transcoding after specified duration // 在指定的持续时间后停止转码
-to <time_stop>     stop transcoding after specified time is reached // 在到达指定时间后停止转码
-ss <time_off>      start transcoding at specified time // 从指定的时间开始转码


Per-file options (output-only):
-metadata[:<spec>] <key=value>  add metadata // 添加元数据

Per-stream options:
-c[:<stream_spec>] <codec>  select encoder/decoder ('copy' to copy stream without reencoding) // 选择编码器/解码器(使用copy可以不解码直接复制流)
-filter[:<stream_spec>] <filter_graph>  apply specified filters to audio/video // 应用指定的滤镜到音频/视频

// 视频选项
Video options:  
-r[:<stream_spec>] <rate>  override input framerate/convert to given output framerate (Hz value, fraction or abbreviation) // 覆盖输出帧率/转换为给定的输出帧率(单位为Hz值,分数或简写)
-aspect[:<stream_spec>] <aspect>  set aspect ratio (4:3, 16:9 or 1.3333, 1.7777) // 设置宽高比(如:4:3、16:9或1.3333、1.7777)
-vn                 disable video // 禁用视频
-vcodec <codec>     alias for -c:v (select encoder/decoder for video streams) // 等同于-c:v(选择视频的编码器/解码器)
-vf <filter_graph>  alias for -filter:v (apply filters to video streams) // 等同于-filter:v(应用滤镜到视频流)
-b <bitrate>        video bitrate (please use -b:v) // 视频比特率(建议使用-b:v)

// 音频选项
Audio options:  
-aq <quality>       set audio quality (codec-specific) // 设置音频质量(编解码器特定)
-ar[:<stream_spec>] <rate>  set audio sampling rate (in Hz) // 设置音频采样率(单位为Hz)
-ac[:<stream_spec>] <channels>  set number of audio channels // 设置音频声道数
-an                 disable audio // 禁用音频
-acodec <codec>     alias for -c:a (select encoder/decoder for audio streams) // 等同于-c:a(选择音频流的编码器/解码器)
-ab <bitrate>       alias for -b:a (select bitrate for audio streams) // 等同于-b:a(选择音频流的比特率)
-af <filter_graph>  alias for -filter:a (apply filters to audio streams) // 等同于-filter:a(应用滤镜到音频流)

// 字幕选项
Subtitle options:  
-sn                 disable subtitle // 禁用字幕
-scodec <codec>     alias for -c:s (select encoder/decoder for subtitle streams) // 等同于-c:s(选择字幕流的编码器/解码器)

四、使用FFmpeg工具进行视频转码的操作流程

下方图像描述了如何使用FFmpeg将一个分辨率为1280*720的MP4视频文件转换为一个分辨率为1920*1080的FLV视频文件,同时保持视频流不变。

解释说明

  • 输入文件 :test_1280*720.mp4
    • 这是一个分辨率为1280*720的MP4格式视频文件,它包含以下内容:
      • 1个视频流:AVC(H.264)编码
      • 1个音频流:AAC LC编码
  • Demuxer:解复用器,负责将输入文件中的音视频流分开。
  • Decoder:视频流通过解码器进行解码买得到原始的数据帧。在这个过程中,对数据帧进行了缩放(从1280*720到1920*1080),这就是所谓的"帧处理"(filter),而音频流则直接复制到输出文件,不做任何编码转换。
  • Encoder:处理后的数据帧经过编码器重新编码成新的H.264编码数据包。
  • Muxer:编码后的视频流和音频流由Muxer(复用器)合成输出文件所需的完整封装格式,在这种情况下时FLV格式。
  • 输出文件 :test_1920*1080.flv
    • 这是最终的输出文件,是一个分辨率为1920*1080的FLV格式视频文件

该过程的命令行

javascript 复制代码
ffmpeg -i test_1280*720.mp4 -acodec copy -vcodec libx264 -s 1920*1080 text_1920*1080.flv

该命令的具体含义:

  • -i:指定输入文件
  • test_1280*720.mp4:输入文件名
  • -acodec copy:将音频流直接复制到输出文案金,不做任何编码转换
  • -vcodec libx264:使用libx264库进行视频编码
  • -s 1920*1080:设置输出分辨率
  • test_1920*1080.flv:输出文件名

五、抽取完整视频的视频和音频

5.1 保留封装格式

如果你想要从一个视频文件中分别提取音频和视频流,并保留他们的原始编码格式,可以使用以下命令:

提取音频(保留编码格式)
javascript 复制代码
ffmpeg -i test.mp4 -acodec copy -vn audio.mp4

说明:

  • -i test.mp4:指定输入文件为 test.mp4。
  • -acodec copy:表示音频流将直接复制,不进行重新编码。
  • -vn:表示不处理视频流,即禁用视频输出。
  • audio.mp4:输出文件名,这里假设输出为 audio.mp4。
提取视频(保留编码格式)
javascript 复制代码
ffmpeg -i test.mp4 -vcodec copy -an video.mp4

说明:

  • -i test.mp4:指定输入文件为 test.mp4。
  • -vcodec copy:表示视频流将直接复制,不进行重新编码。
  • -an:表示不处理音频流,即禁用音频输出。
  • video.mp4:输出文件名,这里假设输出为 video.mp4。

5.2 提取视频

如果想从视频文件中提取视频流,可以保留原始编码格式或者转换为其他编码格式。

提取视频(保留编码格式)
javascript 复制代码
ffmpeg -i test.mp4 -vcodec copy -an test_copy.h264

说明:

  • -i test.mp4:指定输入文件为 test.mp4。
  • -vcodec copy:表示视频流将直接复制,不进行重新编码。
  • -an:表示不处理音频流,即禁用音频输出。
  • test_copy.h264:输出文件名,这里假设输出为 test_copy.h264。
强制格式(转换编码格式)
javascript 复制代码
ffmpeg -i test.mp4 -vcodec libx264 -an test.h264

说明:

  • -i test.mp4:指定输入文件为 test.mp4。
  • -vcodec libx264:使用libx264编码器重新编码视频流。
  • -an:表示不处理音频流,即禁用音频输出。
  • test.h264:输出文件名,这里假设输出为 test.h264。

5.3 提取音频

如果想从视频文件中提取音频流,可以保留原始编码或转换为其他编码格式。

提取音频(保留编码格式)
javascript 复制代码
ffmpeg -i test.mp4 -acodec copy -vn test.aac

说明:

  • -i test.mp4:指定输入文件为 test.mp4。
  • -acodec copy:表示音频流将直接复制,不进行重新编码。
  • -vn:表示不处理视频流,即禁用视频输出。
  • test.aac:输出文件名,这里假设输出为 test.aac。
强制格式(转换编码格式)
javascript 复制代码
ffmpeg -i test.mp4 -acodec libmp3lame -vn test.mp3

说明:

  • -i test.mp4:指定输入文件为 test.mp4。
  • -acodec libmp3lame:使用libmp3lame编码器重新编码音频流。
  • -vn:表示不处理视频流,即禁用视频输出。
  • test.mp3:输出文件名,这里假设输出为 test.mp3。

六、 提取像素格式(YUV和RGB格式)转换格式

6.1 提取YUV数据

这条命令将生成一个包含前3秒、分辨率为320*240像素、采用YUV 4:2:0采样格式的YUV文件。

javascript 复制代码
ffmpeg -i test.mp4 -t 3 -pix_fmt yuv420p -s 320x240 YUV_320x240.yuv

说明:

  • -i test.mp4:指定输入文件为 test.mp4。
  • -t 3:表示只提取前3秒钟的数据。
  • -pix_fmt yuv420p:设置输出的像素格式为 YUV 4:2:0 采样格式。
  • -s 320x240:设置输出的分辨率大小为 320x240 像素。
  • YUV_320x240.yuv:输出文件名,这里假设输出为 YUV_320x240.yuv

6.2 提取RGB数据

这条命令将生成一个包含前3秒、分辨率为320*240像素、采用24位RGB格式的RGB文件。

javascript 复制代码
ffmpeg -i test.mp4 -t 3 -pix_fmt rgb24 -s 320x240 rgb24_320x240.rgb

说明:

  • -i test.mp4:指定输入文件为 test.mp4。
  • -t 3:表示只提取前3秒钟的数据。
  • -pix_fmt rgb24:设置输出的像素格式为 24位 RGB 格式。
  • -s 320x240:设置输出的分辨率大小为 320x240 像素。
  • rgb24_320x240.rgb:输出文件名,这里假设输出为 rgb24_320x240.rgb

6.3 RGB和YUV之间的转换

如果您有一个YUV格式的文件,并且想要将其转换为RGB格式,可以使用以下命令:

javascript 复制代码
ffmpeg -s 320x240 -pix_fmt yuv420p -i yuv420p_320x240.yuv -pix_fmt rgb24 rgb24_320x240_2.rgb

说明:

  • -s 320x240:指定输入的分辨率大小为 320x240 像素。
  • -pix_fmt yuv420p:指定输入的像素格式为 YUV 4:2:0 采样格式。
  • -i yuv420p_320x240.yuv:指定输入文件为 yuv420p_320x240.yuv。
  • -pix_fmt rgb24:设置输出的像素格式为 24位 RGB 格式。
  • rgb24_320x240_2.rgb:输出文件名,这里假设输出为 rgb24_320x240_2.rgb。

七、 更改视频和音频文件参数并输出新文件

7.1 保持编码格式

这条命令会从test.mp4中提取视频和音频流,并以相同的编码格式输出到test_copy.ts文件中,同时将输出格式改为.ts(Transport Stream)。

javascript 复制代码
ffmpeg -i test.mp4 -vcodec copy -acodec copy test_copy.ts

7.2 改变编码格式

这条命令会将test.mp4的视频流重新编码为H.265(使用libx265编码器),音频流重新编码为MP3(使用libmp3ame编码器),并输出到out_h265_mp3.mkv文件中。

javascript 复制代码
ffmpeg -i test.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv

7.3 修改帧率

正确命令

这条命令会将test.mp4的帧率设置为每秒15帧,并输出到output2.mp4文件中

javascript 复制代码
ffmpeg -i test.mp4 -r 15 output2.mp4
错误命令

这条命令试图修改帧率,但同时使用 -codec copy 来复制流,这是不可能的,因为复制流不支持修改帧率。

javascript 复制代码
ffmpeg -i test.mp4 -r 15 -codec copy output.mp4

7.4 修改视频码率

正确命令

这条命令会将test.mp4的视频比特率设置为400kbps,并输出到output_bv.mkv文件中。

javascript 复制代码
ffmpeg -i test.mp4 -b:v 400k output_bv.mkv
错误命令

这条命令试图同时设置视频和音频的总比特率,但 -b 参数通常用于设置总的比特率,这样会导致音频和视频都被重新编码。

javascript 复制代码
ffmpeg -i test.mp4 -b 400k output_b.mkv

7.5 修改音频码率

这条命令会将test.mp4的音频比特率设置为192kbps,并输出到output_ba.mp4文件中。

javascript 复制代码
ffmpeg -i test.mp4 -b:a 192k output_ba.mp4

7.6 同时修改音频码率和视频码率

这条命令会将test.mp4的视频比特率设置为400kbps,音频比特率设置为192kbps,并输出到output_bva.mp4文件中。

javascript 复制代码
ffmpeg -i test.mp4 -b:v 400k -b:a 192k output_bva.mp4

7.7 修改视频分辨率

这条命令会将test.mp4的分辨率调整为480*270,并输出到output_480x270.mp4文件中。

javascript 复制代码
ffmpeg -i test.mp4 -s 480x270 output_480x270.mp4

7.8 修改音频采样率

这条命令会将test.mp4的音频采样率设置为44.1kHz,并输出到output_44100hz.mp4文件中。

javascript 复制代码
ffmpeg -i test.mp4 -ar 44100 output_44100hz.mp4
相关推荐
韩曙亮12 小时前
【FFmpeg】FFmpeg 内存结构 ③ ( AVPacket 函数简介 | av_packet_ref 函数 | av_packet_clone 函数 )
ffmpeg·音视频·avpacket·av_packet_clone·av_packet_ref·ffmpeg内存结构
oushaojun216 小时前
ubuntu中使用ffmpeg和nginx推流rtmp视频
nginx·ubuntu·ffmpeg·rtmp
莫固执,朋友17 小时前
网络抓包工具tcpdump 在海思平台上的编译使用
网络·ffmpeg·音视频·tcpdump
lxkj_202418 小时前
修改ffmpeg实现https-flv内容加密
网络协议·https·ffmpeg
cuijiecheng201818 小时前
音视频入门基础:MPEG2-TS专题(6)——FFmpeg源码中,获取MPEG2-TS传输流每个transport packet长度的实现
ffmpeg·音视频
VisionX Lab1 天前
数据脱敏工具:基于 FFmpeg 的视频批量裁剪
python·ffmpeg·音视频
柳鲲鹏2 天前
全网首发:Ubuntu编译跨平台嵌入式支持ffmpeg的OpenCV
linux·ubuntu·ffmpeg
冰山一脚20132 天前
ffplay音频SDL播放处理
ffmpeg
cuijiecheng20182 天前
音视频入门基础:MPEG2-TS专题(7)——FFmpeg源码中,读取出一个transport packet数据的实现
ffmpeg·音视频
Maxwellhang2 天前
【java-ffmpeg】java 内存测试和集成
java·ffmpeg·jni