目录
[3.1 主要参数](#3.1 主要参数)
[3.2 音频参数](#3.2 音频参数)
[3.2.2、 -b:a](#3.2.2、 -b:a)
[3.3 视频参数](#3.3 视频参数)
[3.4 查看帮助 ffmpeg -h](#3.4 查看帮助 ffmpeg -h)
[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