程序功能:
将指定的视频文件,解码为原始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数据,只包含视频流。
开发环境:
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