@ltlovezh
2020-03-20T10:09:46.000000Z
字数 2320
阅读 2957
ffmpeg
Register a bitstream filter
av_register_bitstream_filter
av_get_default_channel_layout : 根据channel个数,获取默认的channel_layout(uint64_t)
av_get_channel_layout_nb_channels : 根据channel_layout(uint64_t)获取对应的channel数。
ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}
ffmpeg -s 1280*720 -pix_fmt nv12 -i output-nv12.yuv -b:v 2000k -vcodec libx264 output-2000.h264
对NV12格式的YUV数据,进行H264编码。
-s
表示视频帧的宽高,格式为W*H-pix_fmt
表示像素格式,可以通过ffmpeg -pix_fmts
查看FFmpeg支持的所有格式-i
表示输入文件-b:v
表示视频码率-b:a
表示音频码率-vcodec
or -c:v
表示视频编码器,copy
表示直接copy原始视频流-acodec
or -c:a
表示音频编码器,copy
表示直接copy原始音频流
//解码为yuv420p
ffmpeg -i output.h264 [-pix_fmt yuv420p] output.yuv
//解码为rgb24
ffmpeg -i output.h264 [-pix_fmt rgb24] output.yuv
-pix_fmt
指定解码的格式,默认为yuv420p。
ffmpeg -s 1920x1080 -pix_fmt rgb24 -i origin.rgb -s 1920x1080 -pix_fmt yuv420p origin.yuv
通过FFmpeg可以进行RGB和YUV、YUV和YUV等格式的转换。
//截取一定时间内的视频帧
ffmpeg -s 1920x1080 -pix_fmt yuv420p -i origin-500-libyuv.yuv -ss 5 -t 10 out.yuv
//截取指定的帧数
ffmpeg -s 1920x1080 -pix_fmt yuv420p -i origin.yuv -ss 5 -vframes 100 out.yuv
//截取某一帧,保存成图片
ffmpeg -s 1920x1080 -pix_fmt yuv420p -i origin.yuv -ss 5 -vframes 1 out.jpg
//把视频帧,拆分成图片
ffmpeg -s 1920x1080 -pix_fmt yuv420p -i origin.yuv %04d.jpg
//从第10秒开始,以每秒截取1张图片的速度,截取5秒时长的图片
ffmpeg -i origin.mp4 -r 1 -ss 00:00:10 -t 00:00:05 images%04d.jpg
-ss
表示开始时间,-t
表示需要截取的时长,-r
表示fps,-vframes
表示截取的帧数
//把1920*1080的YUV转成到1280*720的YUV
ffmpeg -s:v 1920x1080 -i origin.yuv -vf scale=1280:720 -c:v rawvideo -pix_fmt yuv420p output.yuv
ffplay -i leon.rgb -pixel_format rgb24 -video_size 720x1280
typedef struct AVStream {
/** stream index in AVFormatContext */
int index;
} AVStream;
enum AVMediaType {
AVMEDIA_TYPE_UNKNOWN = -1,
AVMEDIA_TYPE_VIDEO, // 视频流
AVMEDIA_TYPE_AUDIO, // 音频流
AVMEDIA_TYPE_DATA,
AVMEDIA_TYPE_SUBTITLE, // 字幕流
AVMEDIA_TYPE_ATTACHMENT,
AVMEDIA_TYPE_NB
};
typedef struct AVCodecParameters {
/**
* General type of the encoded data.
* 流类型
*/
enum AVMediaType codec_type;
/**
* Specific type of the encoded data (the codec used).
* 流编码类型,H264是AV_CODEC_ID_H264,H265是AV_CODEC_ID_HEVC或者AV_CODEC_ID_H265
*/
enum AVCodecID codec_id;
/**
* 有关编解码器的附加信息,可以通过宏:av_fourcc_make_string转换为四字母字符串,例 * 如:avc1、mp4a
*/
uint32_t codec_tag;
} AVCodecParameters;