ffmpeg 将拆分的数据合成一帧_FFmpeg 简单合成 MP4 :视频解封与重新封装

本文介绍了如何使用FFmpeg对音视频进行解封和重新封装,不涉及解码和编码。首先,通过FFmpeg打开源视频获取参数,然后初始化封装参数,包括复制原视频流参数到目标输出流。接着,解封装原视频并写入目标文件,转换时间戳以适应目标时间基。最后,释放资源完成封装。这个过程为视频编辑和封装打下了基础。
摘要由CSDN通过智能技术生成

教程代码:【Github传送门:https://github.com/ChenLittlePing/LearningVideo】

目录

一、Android音视频硬解码篇:

二、使用OpenGL渲染视频画面篇

三、Android FFmpeg音视频解码篇

本文你可以了解到

利用 FFmpeg 对音视频进行简单的解封和重新封装,不涉及解码和编码,为下一篇讲解如何对编辑好的视频进行重编码和封装做好铺垫。

一、前言

前面的文章中,对 FFmpg 视频的解码,以及如何利用 OpenGL 对视频进行编辑和渲染,做了详细的讲解,接来非常重要的,就是对编辑好的视频进行编码和保存。

当然了,在了解如何编码之前,先了解如何对编码好的音视频进行封装,会有事半功倍的效果。

在《音视频解封和封装:生成一个MP4》中使用了 Android 的原生功能,实现了对音视频的重打包。FFmpeg 也是同样的,只不过流程更为繁琐一些。

二、初始化封装参数

我们知道,将编码数据封装到 Mp4 中,需要知道音视频编码相关的参数,比如编码格式,视频的宽高,音频通道数,帧率,比特率等,下面就先看看如何初始化它们。

首先,定一个打包器 FFRepacker:

// ff_repack.h

class FFRepack {

private:

const char *TAG = "FFRepack";

AVFormatContext *m_in_format_cxt;

AVFormatContext *m_out_format_cxt;

int OpenSrcFile(char *srcPath);

int InitMuxerParams(char *destPath);

public:

FFRepack(JNIEnv *env,jstring in_path, jstring out_path);

};

初始化过程分为两个步骤:打开原视频文件、初始化打包参数。

// ff_repack.cpp

FFRepack::FFRepack(JNIEnv *env, jstring in_path, jstring out_path) {

const char *srcPath = env->GetStringUTFChars(in_path, NULL);

const char *destPath = env->GetStringUTFChars(out_path, NULL);

// 打开原视频文件,并获取相关参数

if (OpenSrcFile(srcPath) >= 0) {

// 初始化打包参数

if (InitMuxerParams(destPath)) {

LOGE(TAG, "Init muxer params fail")

}

} else {

LOGE(TAG, "Open src file fail")

}

}

打开原视频,获取原视频参数

代码很简单,在使用 FFMpeg 解码的文章中就已经讲解过。如下:

// ff_repack.cpp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值