转码和转换
1)demuxing解封装: 封装文件file→→→编码状态压缩数据包data package)
//根据输入源的文件扩展名来选择最佳的解封装器(在libavformat库里面)。
2)decoding解码: 数据包data package ——> 未压缩的数据帧frame
//如果使用-c copy或-codec copy表示输入输出使用相同的编码方式👉👉跳过编解码过程
3)optional filtering可选的滤镜:通过指定的滤镜修改解码后的数据帧。
3)encoding编码:frame ——> pacet
4)muxing封装:packet ——> 文件file
flv->mp4的指令:
在使用ffmpeg转码的过程中,由于我的flv文件使用的视频编码是h264,音频是aac,所以转码的过程中flv->mp4,仅仅是容器改变了,编码方式几乎没有变化
flv->mp4的指令:
ffmpeg -i input.flv output.mp4 //此过程需要对视频进行重新编码,耗费资源和cpu较为严重,
但是假如:
flv[h264 + aac] -> mp4的指令://不需要对视频进行重新编码,仅仅需要对文件重新加以MP4容器即可
ffmpeg -i input.flv -vcodec copy -acodec copy output.mp4
//显式指明不用编解码👉👉节省大部分计算机资源,近乎拷贝文件
下面代码是flv[h264 + aac] ->AVI[h264 + aac]的c代码实现:
//flv[h264 + aac] ->AVI视频封装格式之间的转换。
#include "stdafx.h"
#include "libavformat/avformat.h"
int _tmain(int argc, _TCHAR* argv[])
{
AVOutputFormat *ofmt = NULL;
AVFormatContext *ifmt_ctx = NULL, *ofmt_ctx = NULL;
AVPacket pkt;