=====================================================
最简单的基于FFmpeg的封装格式处理系列文章列表:
最简单的基于FFmpeg的封装格式处理:视音频分离器简化版(demuxer-simple)
最简单的基于FFmpeg的封装格式处理:视音频分离器(demuxer)
最简单的基于FFmpeg的封装格式处理:视音频复用器(muxer)
最简单的基于FFMPEG的封装格式处理:封装格式转换(remuxer)
=====================================================
本文介绍一个基于FFMPEG的封装格式转换器。所谓的封装格式转换,就是在AVI,FLV,MKV,MP4这些格式之间转换(对应.avi,.flv,.mkv,.mp4文件)。需要注意的是,本程序并不进行视音频的编码和解码工作。而是直接将视音频压缩码流从一种封装格式文件中获取出来然后打包成另外一种封装格式的文件。传统的转码程序工作原理如下图所示:
视音频质量无损。因为不需要进行视音频的编码和解码,所以不会有视音频的压缩损伤。
下面附上基于FFmpeg的Remuxer的流程图。图中使用浅红色标出了关键的数据结构,浅蓝色标出了输出视频数据的函数。可见成个程序包含了对两个文件的处理:读取输入文件(位于左边)和写入输出文件(位于右边)。中间使用了一个avcodec_copy_context()拷贝输入的AVCodecContext到输出的AVCodecContext。
简单介绍一下流程中关键函数的意义:
输入文件操作:
avformat_open_input():打开输入文件,初始化输入视频码流的AVFormatContext。
av_read_frame():从输入文件中读取一个AVPacket。
输出文件操作:
avformat_alloc_output_context2():初始化输出视频码流的AVFormatContext。
avformat_new_stream():创建输出码流的AVStream。
avcodec_copy_context():拷贝输入视频码流的AVCodecContex的数值t到输出视频的AVCodecContext。
avio_open():打开输出文件。
avformat_write_header():写文件头(对于某些没有文件头的封装格式,不需要此函数。比如说MPEG2TS)。
av_interleaved_write_frame():将AVPacket(存储视频压缩码流数据)写入文件。
av_write_trailer():写文件尾(对于某些没有文件头的封装格式,不需要此函数。比如说MPEG2TS)。
贴上代码,代码是从FFmpeg的例子改编的,平台是VC2010。
下图显示了一个测试的输入文件的视音频参数。
simplest ffmpeg format
项目主页
SourceForge:https://sourceforge.net/projects/simplestffmpegformat/
Github:https://github.com/leixiaohua1020/simplest_ffmpeg_format
开源中国:http://git.oschina.net/leixiaohua1020/simplest_ffmpeg_format
工程中包含4个例子:
simplest_ffmpeg_demuxer_simple:视音频分离器(简化版)。
simplest_ffmpeg_demuxer:视音频分离器。
simplest_ffmpeg_muxer:视音频复用器。
simplest_ffmpeg_remuxer:封装格式转换器。
更新-1.1==================================================
修复了以下问题:
(1)Release版本下的运行问题
(2)simplest_ffmpeg_muxer封装H.264裸流的时候丢失声音的错误
CSDN下载地址:
http://download.csdn.net/detail/leixiaohua1020/8284309
更新-1.2 (2015.2.13)=========================================
这次考虑到了跨平台的要求,调整了源代码。经过这次调整之后,源代码可以在以下平台编译通过:
VC++:打开sln文件即可编译,无需配置。
cl.exe:打开compile_cl.bat即可命令行下使用cl.exe进行编译,注意可能需要按照VC的安装路径调整脚本里面的参数。编译命令如下。
MinGW:MinGW命令行下运行compile_mingw.sh即可使用MinGW的g++进行编译。编译命令如下。
GCC:Linux或者MacOS命令行下运行compile_gcc.sh即可使用GCC进行编译。编译命令如下。
CSDN下载地址:http://download.csdn.net/detail/leixiaohua1020/8445303
SourceForge上已经更新。
将h264转换到avi格式:ffmpeg -i input.264 -s 640x480 output.avi-s : 为重新设置分辨率-r : 为帧率设置...
最近一直在做使用ffmpeg关于读取标准h264格式内存如何封装为mp4格式文件,在经过一周的持续奋战之后在网上找了一些代码,特别的雷神的博客让我获益匪浅,开始不知道如何持续读取发送来的内存块,如何边...
由于需要在各种平台有播放视频的需要,我们经常需要将视频转化成各种各样的格式,网上类似的工具很多但这些工具都是基于ffmpeg开发的,我们下面简单的用一个python程序来...
2018-4-17
举报内容: FFMpeg 常用命令格式转换,视频合成 举报原因: 色情 政治 抄袭 广告 招聘 骂人 其他 原文地址: 原因补充: 最多只允许输入30个字加入...
2018-5-2
h264一帧一帧的数据如何 赋值给av_interleaved_write_frame 函数进行写文件呢?
最近下了点小视频,上传到百度网盘上被识别了md5重复后秒传了,然后就和谐了,于是想着把视频转换下格式重新上传到隐藏空间。先建个文件夹,把视频文件,newfiles文件...
2018-5-9
ffmpeg,视频格式转换,Linux下FFmpeg编译,支持大部分主流视频编码格式... ffmpeg,视频格式转换,Linux下FFmpeg编译,支持大部分主流视频编码格式 综合评分:4 收藏评论(7)举...
2018-5-7
为了提高H264的保存效率,抛弃了FFmpeg库的avi封装,直接才源码的方式封装avi文件,源码来源于网络,经改造回馈网络。废话不多说,直接上干货。...
1.简单分析avi格式使用ultraedit打开Avi文件,二进制显示如下: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 012345678901234...
windows下利用ffmpeg进行视频格式转换原创 2016年05月04日 00:30:10 标签: 2518 编辑 删除 本文写作时只是直接下载了已经编译好的ffmpeg.exe来进行相关操作,没有...
2018-4-5
} /** * 视频转换 * @param video_path * @return */ public static String convertCommand(String video_path,String videoFileName) { //D:/ffmpeg.exe ...
2017-6-20
2017年08月15日 19.75MB下载
FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。
2018-5-9
在进行图形图像分析的时候,我们往往需要把视频转换为yuv 格式或者单通道灰度图像,ffmpeg 就显得很方便了 以下我将示范几个用法用法1. mp4 转换为 gray ,单通道的...
2017-12-3
FFmpeg FLV 视频直播 ffserver flv ffmpegffplay
原贴:http://linuxdesktop.cn/2007/07/25/ffmpeg-convert-flv-to-mpeg 用ffmpeg转换flv至mpeg 2007-07-25 13:50 |...
本文主要分析通过FFMPEG函数将音视频容器格式转换成另一种格式。在转换中涉及到h264_mp4toannexb的转换,本文会针对此种情况重点说明下,先上带解析的源代码。
2018-4-17
如题,具体如下https://github.com/ksvc/FFmpeg/wiki/instructionshttps://github.com/ksvc/FFmpeg/wiki...
本系列文章导航Windows下FFmpeg快速入门ffmpeg参数解释mencoder和ffmpeg参数详解(Java处理视频)Java 生成视频缩略图(ffmpeg)使用ffmpeg进行视频文件转换...
1、环境winxp-sp2下:从 http://ffdshow.faireal.net/mirror/ffmpeg/ 下载最新版本的 FFMpeg.exe直接用就行(须rar解压)。 以下的东西是为对...
时间戳一定要对。如果各个流数据都在同时生成,就用 av_interleaved_write_frame如果各个流的数据 有时有 有时没有,就用 av_write_frame原因是 ,av_...
宏观上看,FLV包括文件头(FileHeader)和文件体(File Body)两部分。文件体由一系列的标签组成,标签又可以分成三类:音频标签、视频标签、脚本标签,且每个标签只能包含一种类型的数据。...
转换文件test.avi到test.flvffmpeg -i test.avi -ab 56 -ar 22050 -b 500 -r 29.97 -s 320x240 test.flv对文件抓缩微图:...
由于需要在各种平台有播放视频的需要,我们经常需要将视频转化成各种各样的格式,网上类似的工具很多但这些工具都是基于ffmpeg开发的,我们下面简单的用一个python程序来调用ffmpeg.exe来实现...
命令如下: ffmpeg -y -i Titanic.mkv -s 640*480 out.h264 运行效果: 一般的 使用 ffmpeg -y -i 原材料视频 -s 宽*高 输出的目的视...
首先通过ffmpeg的sws_scale函数可以将原视频格式转换为YUV格式,保存在AVPicture结构体里,而AVPicture结构体里的data成员即储存着视频数据,下面通过一段代码就可以将YU...
http://blog.csdn.net/lius1984/article/details/4367150 整理常用的ffmpeg命令,便于大家查找。 1. AVI转FLV ...
wenzhihui_2010
2014-09-22 11:52:24
阅读数:12230