一个纯粹的视频解码程序(基于FFMPEG 4.0,在Ubuntu 14.04下验证)

该博客介绍了如何使用FFMPEG 4.0在Ubuntu 14.04上进行视频解码。解码过程中,由于原始YUV数据导致输出文件可能极大,例如40MB的MP4文件解码后可能达到2GB。为防止文件过大,程序设定一个500MB的限制,当YUV文件超过这个大小时,解码过程将自动停止。
摘要由CSDN通过智能技术生成
程序功能:
将指定的视频文件,解码为原始YUV数据,只包含视频流。
开发环境:
Ubuntu 14.04, GCC 4.8.4, FFMPEG 4.0
编译方法: 
将代码copy命名为SimpleDecoder.c,与Makefile放置于同一目录下,执行 make 即可。
运行方法:
执行 ./mydecoder 视频路径,比如 ./mydecoder ~/Videos/xx.mp4,解码后的文件保存在xx.mp4同目录下,文件名为xx.mp4_rawvideo.yuv。
说明:

解码后,由于文件保存的是YUV原始数据,一个40MB大小的MP4文件,转换后可能达到2GB。因此,在程序里面做了一个大小限制,当转换后的YUV文件大小达到500M(宏控OUTPUT_VIDEO_SIZE)时,即停止转换。


SimpleDecoder.c:

/*
 * A simple decoder with FFMPEG4.0.
 * Only support video decoder, not support audio and subtitle.
 * Created by LiuWei@20180527
 */
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <sys/stat.h>

#define SUFFIX_VIDEO        "_rawvideo.yuv"
#define OUTPUT_VIDEO_SIZE   500*1024*1024    /* 500MB */

static AVFormatContext *fmt_ctx = NULL;
static AVStream        *video_stream = NULL;
static AVCodec         *dec = NULL;
static AVCodecContext  *video_dec_ctx = NULL;
static AVFrame         *video_frame = NULL;
static AVPacket        pkt;
static FILE            *dst_video_file = NULL; 
static int             video_stream_index = -1;

static uint8_t         *video_dst_data[4] = {NULL};
static int             video_dst_li
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值