目录
一、视频生成图片
静态图片
转码过程
动态图片gif
二、图片生成视频
三、FFmpeg常用参数命令
3.1 主要参数
3.1.1、-i
3.1.2、-f
3.1.3、-ss
3.1.4、-t
3.2 音频参数
3.2.1、-aframes
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.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
四、使用FFmpeg工具进行视频转码的操作流程
解释说明
该过程的命令行
五、抽取完整视频的视频和音频
5.1 保留封装格式
提取音频(保留编码格式)
提取视频(保留编码格式)
5.2 提取视频
提取视频(保留编码格式)
强制格式(转换编码格式)
5.3 提取音频
提取音频(保留编码格式)
强制格式(转换编码格式)
六、 提取像素格式(YUV和RGB格式)转换格式
6.1 提取YUV数据
6.2 提取RGB数据
6.3 RGB和YUV之间的转换
七、 更改视频和音频文件参数并输出新文件
7.1 保持编码格式
7.2 改变编码格式
7.3 修改帧率
正确命令
错误命令
7.4 修改视频码率
正确命令
错误命令
7.5 修改音频码率
7.6 同时修改音频码率和视频码率
7.7 修改视频分辨率
7.8 修改音频采样率
一、视频生成图片
静态图片
在视频所在文件中打开【命令提示符】窗口,然后输入以下命令即可将视频生成 .jpg 的图片
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文件夹如果一开始不存在的话将会报错】。
转码过程
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
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
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
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
二、图片生成视频
注意:合成的视频没有音频
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 从哪里读取多媒体文件
示例:
// 将 input.mp4 文件作为输入,并将其转换为 output.mp4 文件
ffmpeg -i input.mp4 output.mp4
3.1.2、-f
说明: 指定输出格式
用途:告诉FFmpeg输出文件应该以哪种容器格式
示例:
// 将 input.mp4 文件转换为 Matroska 容器格式的 output.mkv 文件
ffmpeg -i input.mp4 -f matroska output.mkv
3.1.3、-ss
说明: 从指定的时间戳开始处理视频
用途:允许从视频中的某个特定时间点开始处理
示例:
// 从 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
说明: 处理指定的持续时间
用途:允许从指定时间点开始处理一段特定时长的视频
示例:
// 从 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
说明:设置要输出的音频帧数
用途:用于限制输出音频的长度,特别适用于需要精确控制输出音频帧数的情况
示例:
// 提取前200帧音频并复制编解码器
ffmpeg -i input.mp4 -aframes 200 -c:a copy output.mp3
3.2.2、 -b:a
说明:设置音频的比特率
用途:控制输出音频的质量,比特率越高,通常音质越好,但文件大小也会越大
示例:
// 设置音频比特率为128kbps
ffmpeg -i input.mp4 -b:a 128k output.mp3
3.2.3、-ar
说明:设定音频的采样率
用途:改变输出音频的采样率,通常用于提高或降低音频的质量
示例:
// 设置音频采样率为44100Hz
ffmpeg -i input.mp4 -ar 44100 output.mp3
3.2.4、-ac
说明:设定音频的声道数(通道数)
用途:用于调整输出音频的声道数,如单声道(1声道)或立体声(2声道)
示例:
// 设置音频为立体声
ffmpeg -i input.mp4 -ac 2 output.mp3
3.2.5、-acodec
说明:设定音频编解码器
用途:选择不同的音频编解码器进行编码或解码
示例:
// 复制音频流
ffmpeg -i input.mp4 -acodec aac output.mp4
注意:如果使用 copy,则表示直接复制输入文件中的音频流而不进行重新编码
3.2.6、-an
说明:禁用音频流
用途:用于输出文件时不包含音频流,通常用于仅保留视频或生成静音文件
示例:
// 生成静音视频文件
ffmpeg -i input.mp4 -an output.mp4
3.2.7、-af
说明:应用音频滤镜
用途:对音频进行各种处理,如调整音量、淡入淡出、混音等
示例:
// 调整音量为1.5倍
ffmpeg -i input.mp4 -af "volume=1.5" output.mp4
3.3 视频参数
3.3.1、-vframes
说明:设置要输出的视频帧数
用途:用于限制输出视频的帧数
示例:
// 将从 input.mp4 文件中提取前100帧,并输出为 output.mp4 文件
ffmpeg -i input.mp4 -vframes 100 output.mp4
3.3.2、-b
说明:设定视频的比特率(过时)
用途:早期版本的ffmpeg使用 -b 来设定视频比特率,但现在推荐使用 -b:v
示例:
// 将 input.mp4 文件的视频比特率设置为1000kbps,并输出为 output.mp4 文件
ffmpeg -i input.mp4 -b:v 1000k output.mp4
3.3.3、-b:v
说明:设定视频的比特率
用途:控制输出视频的质量,比特率越高,通常视频质量越好,但文件大小也会越大
示例:
// 将 input.mp4 文件的视频比特率设置为1000kbps,并输出为 output.mp4 文件
ffmpeg -i input.mp4 -b:v 1000k output.mp4
3.3.4、-r
说明:设定帧速率
用途:改变输出视频的帧速率
示例:
// 将 input.mp4 文件的帧速率设置为30fps,并输出为 output.mp4 文件
ffmpeg -i input.mp4 -r 30 output.mp4
3.3.5、-s
说明:设定画面的宽与高
用途:改变输出视频的分辨率
示例:
// 将 input.mp4 文件的分辨率设置为640x480,并输出为 output.mp4 文件
ffmpeg -i input.mp4 -s 640x480 output.mp4
3.3.6、-vn
说明:不处理视频
用途:用于输出文件时不包含视频流,通常用于仅保留音频
示例:
// 从 input.mp4 文件中提取音频,并输出为 output.mp3 文件,不包含视频流
ffmpeg -i input.mp4 -vn output.mp3
3.3.7、-aspect
说明:设置画面的宽高比
用途:改变输出视频的宽高比
示例:
// 将 input.mp4 文件的画面宽高比设置为16:9,并输出为 output.mp4 文件
ffmpeg -i input.mp4 -aspect 16:9 output.mp4
3.3.8、-vcodec
说明:设定视频编解码器
用途:选择不同的视频编解码器进行编码或解码
示例:
// 将 input.mp4 文件的视频编解码器设置为H.264,并输出为 output.mp4 文件
ffmpeg -i input.mp4 -vcodec h264 output.mp4
注意: 如果使用 copy,则表示直接复制输入文件中视频流而不进行重新编码。
3.3.9、-vf
说明:视频过滤器
用途:对视频进行各种处理,如裁剪、缩放、添加水印等
示例:
// 将 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
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格式视频文件
该过程的命令行
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 保留封装格式
如果你想要从一个视频文件中分别提取音频和视频流,并保留他们的原始编码格式,可以使用以下命令:
提取音频(保留编码格式)
ffmpeg -i test.mp4 -acodec copy -vn audio.mp4
说明:
- -i test.mp4:指定输入文件为 test.mp4。
- -acodec copy:表示音频流将直接复制,不进行重新编码。
- -vn:表示不处理视频流,即禁用视频输出。
- audio.mp4:输出文件名,这里假设输出为 audio.mp4。
提取视频(保留编码格式)
ffmpeg -i test.mp4 -vcodec copy -an video.mp4
说明:
- -i test.mp4:指定输入文件为 test.mp4。
- -vcodec copy:表示视频流将直接复制,不进行重新编码。
- -an:表示不处理音频流,即禁用音频输出。
- video.mp4:输出文件名,这里假设输出为 video.mp4。
5.2 提取视频
如果想从视频文件中提取视频流,可以保留原始编码格式或者转换为其他编码格式。
提取视频(保留编码格式)
ffmpeg -i test.mp4 -vcodec copy -an test_copy.h264
说明:
- -i test.mp4:指定输入文件为 test.mp4。
- -vcodec copy:表示视频流将直接复制,不进行重新编码。
- -an:表示不处理音频流,即禁用音频输出。
- test_copy.h264:输出文件名,这里假设输出为 test_copy.h264。
强制格式(转换编码格式)
ffmpeg -i test.mp4 -vcodec libx264 -an test.h264
说明:
- -i test.mp4:指定输入文件为 test.mp4。
- -vcodec libx264:使用libx264编码器重新编码视频流。
- -an:表示不处理音频流,即禁用音频输出。
- test.h264:输出文件名,这里假设输出为 test.h264。
5.3 提取音频
如果想从视频文件中提取音频流,可以保留原始编码或转换为其他编码格式。
提取音频(保留编码格式)
ffmpeg -i test.mp4 -acodec copy -vn test.aac
说明:
- -i test.mp4:指定输入文件为 test.mp4。
- -acodec copy:表示音频流将直接复制,不进行重新编码。
- -vn:表示不处理视频流,即禁用视频输出。
- test.aac:输出文件名,这里假设输出为 test.aac。
强制格式(转换编码格式)
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文件。
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文件。
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格式,可以使用以下命令:
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)。
ffmpeg -i test.mp4 -vcodec copy -acodec copy test_copy.ts
7.2 改变编码格式
这条命令会将test.mp4的视频流重新编码为H.265(使用libx265编码器),音频流重新编码为MP3(使用libmp3ame编码器),并输出到out_h265_mp3.mkv文件中。
ffmpeg -i test.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv
7.3 修改帧率
正确命令
这条命令会将test.mp4的帧率设置为每秒15帧,并输出到output2.mp4文件中
ffmpeg -i test.mp4 -r 15 output2.mp4
错误命令
这条命令试图修改帧率,但同时使用 -codec copy 来复制流,这是不可能的,因为复制流不支持修改帧率。
ffmpeg -i test.mp4 -r 15 -codec copy output.mp4
7.4 修改视频码率
正确命令
这条命令会将test.mp4的视频比特率设置为400kbps,并输出到output_bv.mkv文件中。
ffmpeg -i test.mp4 -b:v 400k output_bv.mkv
错误命令
这条命令试图同时设置视频和音频的总比特率,但 -b 参数通常用于设置总的比特率,这样会导致音频和视频都被重新编码。
ffmpeg -i test.mp4 -b 400k output_b.mkv
7.5 修改音频码率
这条命令会将test.mp4的音频比特率设置为192kbps,并输出到output_ba.mp4文件中。
ffmpeg -i test.mp4 -b:a 192k output_ba.mp4
7.6 同时修改音频码率和视频码率
这条命令会将test.mp4的视频比特率设置为400kbps,音频比特率设置为192kbps,并输出到output_bva.mp4文件中。
ffmpeg -i test.mp4 -b:v 400k -b:a 192k output_bva.mp4
7.7 修改视频分辨率
这条命令会将test.mp4的分辨率调整为480*270,并输出到output_480x270.mp4文件中。
ffmpeg -i test.mp4 -s 480x270 output_480x270.mp4
7.8 修改音频采样率
这条命令会将test.mp4的音频采样率设置为44.1kHz,并输出到output_44100hz.mp4文件中。
ffmpeg -i test.mp4 -ar 44100 output_44100hz.mp4