资源简介
利用FFmpeg将mkv视频转换为H.264,转换后的视频请用VLC播放。
代码片段和文件信息
// FFMepg_to_mp4.cpp : 定义控制台应用程序的入口点。
//
#include “stdafx.h“
extern “C“
{
#include “libavcodec/avcodec.h“
#include “libavformat/avformat.h“
#include “libswscale/swscale.h“
#include
#include
#include “libavutil/pixdesc.h“
}
const char* SRC_FILE = “Titanic.mkv“;
const char* OUT_FILE = “Titanic.h264“;
const char* OUT_FMT_FILE = “Titanic.mp4“;
int _tmain(int argc _TCHAR* argv[])
{
av_register_all();
AVFormatContext* pFormat = NULL;
if (avformat_open_input(&pFormat SRC_FILE NULL NULL) < 0)
{
return 0;
}
AVCodecContext* video_dec_ctx = NULL;
AVCodec* video_dec = NULL;
if (avformat_find_stream_info(pFormat NULL) < 0)
{
return 0;
}
av_dump_format(pFormat 0 SRC_FILE 0);
video_dec_ctx = pFormat->streams[0]->codec;
video_dec = avcodec_find_decoder(video_dec_ctx->codec_id);
if (avcodec_open2(video_dec_ctx video_dec NULL) < 0)
{
return 0;
}
AVFormatContext* pOFormat = NULL;
AVOutputFormat* ofmt = NULL;
if (avformat_alloc_output_context2(&pOFormat NULL NULL OUT_FILE) < 0)
{
return 0;
}
ofmt = pOFormat->oformat;
if (avio_open(&(pOFormat->pb) OUT_FILE AVIO_FLAG_READ_WRITE) < 0)
{
return 0;
}
AVCodecContext *video_enc_ctx = NULL;
AVCodec *video_enc = NULL;
video_enc = avcodec_find_encoder(AV_CODEC_ID_H264);
AVStream *video_st = avformat_new_stream(pOFormat video_enc);
if (!video_st)
return 0;
video_enc_ctx = video_st->codec;
video_enc_ctx->width = video_dec_ctx->width;
video_enc_ctx->height = video_dec_ctx->height;
video_enc_ctx->pix_fmt = AV_PIX_FMT_YUV420P;
video_enc_ctx->time_base.num = 1;
video_enc_ctx->time_base.den = 25;
video_enc_ctx->bit_rate = video_dec_ctx->bit_rate;
video_enc_ctx->gop_size = 250;
video_enc_ctx->max_b_frames = 10;
video_enc_ctx->qmin = 10;
video_enc_ctx->qmax = 51;
if (avcodec_open2(video_enc_ctx video_enc NULL) < 0)
{
printf(“编码器打开失败!\n“);
return 0;
}
printf(“Output264video Information====================\n“);
av_dump_format(pOFormat 0 OUT_FILE 1);
printf(“Output264video Information====================\n“);
//mp4 file
AVFormatContext* pMp4Format = NULL;
AVOutputFormat* pMp4OFormat = NULL;
if (avformat_alloc_output_context2(&pMp4Format NULL NULL OUT_FMT_FILE) < 0)
{
return 0;
}
pMp4OFormat = pMp4Format->oformat;
if (avio_open(&(pMp4Format->pb) OUT_FMT_FILE AVIO_FLAG_READ_WRITE) < 0)
{
return 0;
}
for (int i = 0; i < pFormat->nb_streams; i++) {
AVStream *in_stream = pFormat->streams[i];
AVStream *out_stream = avformat_new_stream(pMp4Format in_stream->codec->codec);
if (!out_stream) {
return 0;
}
int ret = 0;
ret = avcodec_copy_context(out_stream->codec in_stream->codec);
if (ret < 0) {
fprintf(stderr “Failed to copy context from input to output stream codec context\n“);
return 0;
}
out_stream->codec->codec_tag = 0;
if (pMp4Format->oformat->flags & AVFMT_GLOBALHEADER)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5831 2016-06-25 15:25 FFMepg_to_mp4.cpp
文件 5238 2016-06-25 15:31 FFMepg_to_mp4.vcxproj
文件 1320 2016-06-25 08:25 FFMepg_to_mp4.vcxproj.filters
文件 1552 2016-06-25 08:25 ReadMe.txt
文件 219 2016-06-25 08:25 stdafx.cpp
文件 234 2016-06-25 08:25 stdafx.h
文件 236 2016-06-25 08:25 targetver.h
文件 2834432 2015-07-15 16:19 Titanic.mkv
- 上一篇:KillMBR,硬盘逻辑锁
- 下一篇:资讯网站模板
相关资源
- 安卓交叉编译ffmepgx86_64版本
- ffmepg的安卓arm(armeabi-v7a)版本
- 基于ARM9的远程视频监控系统
- 最简单的基于FFmpeg的封装格式转换器
- SDK播放器加速.zip
- 基于ffmpeg的经典版 ffplay 音视频播放
- ffmpeg api实现视频转码音视频
- FFMPEG入门基础资料pdf
- ffmpeg ffdoc (FFMPEG的最完整教程)
- ffmpeg转码为hls代码
- ffmpeg-4.0.2最新版 windows vs2013编译动态
- ffmpeg实现直播功能
- linuxubuntu下ffmpeg + alsa 的音频播放器
- 内存H264+PCM发布rtmp.rar
- ffmpeg-4.2.1-win32-dev.zip
- M3U8视频PC机64位辅助工具2.0 —&md
- ffmpeg-3.2.tar.bz2
- 适用于VC的FFMpeg静态库已编译)
- 使用ffmpeg api解码h264视频码流,并且能
- MP4v2录制rtsp流存为MP4文件
- [8] ffmpeg + SDL2 实现的视频播放器「快
- ffmpegexe文件
- qt5.8实现rtsp流播放
- OpenCV 1.0.0 patch for ffmpeg errors
- ffmpeg将一个视频文件解码输出bmp和j
- 支持OpenCV3.2的opencv_ffmpeg.7z
-
Mpla
yer.exe 最新版 - ffmpeg 硬件加速
- FFmpeg解码MP4分别播放YUV视频和PCM音频
- ffmpeg(amr转换mp3).exe.zip
评论
共有 条评论