ffmpeg实战教程(四)格式转换如MP4转MKV等

知识延伸:

I,P,B帧和PTS,DTS的关系

基本概念:

I frame :帧内编码帧 又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。I帧可以看成是一个图像经过压缩后的产物。

P frame: 前向预测编码帧 又称predictive-frame,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧;

B frame: 双向预测内插编码帧 又称bi-directional interpolated prediction frame,既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧;

PTS:Presentation Time Stamp。PTS主要用于度量解码后的视频帧什么时候被显示出来

DTS:Decode Time Stamp。DTS主要是标识读入内存中的bit流在什么时候开始送入解码器中进行解码。

在没有B帧存在的情况下DTS的顺序和PTS的顺序应该是一样的。

IPB帧的不同:

I frame:自身可以通过视频解压算法解压成一张单独的完整的图片。

P frame:需要参考其前面的一个I frame 或者B frame来生成一张完整的图片。

B frame:则要参考其前一个I或者P帧及其后面的一个P帧来生成一张完整的图片。

两个I frame之间形成一个GOP,在x264中同时可以通过参数来设定bf的大小,即:I 和p或者两个P之间B的数量。

通过上述基本可以说明如果有B frame 存在的情况下一个GOP的最后一个frame一定是P.

DTS和PTS的不同:

DTS主要用于视频的解码,在解码阶段使用.PTS主要用于视频的同步和输出.在display的时候使用.在没有B frame的情况下.DTS和PTS的输出顺序是一样的.

用ffmpeg实现格式的转化,比如MP4转MKV。

本程序并不进行视音频的编码和解码工作。而是直接将视音频压缩码流从一种封装格式文件中获取出来然后打包成另外一种封装格式的文件。因为不需要进行视音频的编码和解码,所以不会有视音频的压缩损伤。

思路:
程序包含了对两个文件的处理:读取输入文件和写入输出文件。然后使用了一个avcodec_copy_context()拷贝输入的AVCodecContext到输出的AVCodecContext。然后再从输出的AVCodecContext写进输出文件

关键函数:
输入文件操作:

avformat_open_input():打开媒体的的过程开始于avformat_open_input。

av_read_frame():从输入文件中读取一个AVPacket。

输出文件操作:

avformat_alloc_output_context2():初始化输出视频码流的AVFormatContext。

avformat_new_stream():创建输出码流的AVStream。

avcodec_copy_context():拷贝输入视频码流的AVCodecContex的数值t到输出视频的AVCodecContext。

avio_open():打开输出文件。

avformat_write_header():写文件头(对于某些没有文件头的封装格式,不需要此函数。比如说MPEG2T
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 使用FFmpeg将M3U8格式转换MP4的步骤如下: 1. 下载FFmpeg并安装。 2. 打开终端或命令提示符,进入M3U8文件所在的目录。 3. 运行以下命令:ffmpeg -i input.m3u8 -c copy output.mp4 其中,input.m3u8是要换的M3U8文件名,output.mp4换后的MP4文件名。 4. 等待换完成,换时间根据文件大小和计算机性能而定。 5. 换完成后,可以在同一目录下找到换后的MP4文件。 注意:如果M3U8文件中包含多个分段文件,换过程可能需要一些时间。 ### 回答2: FFmpeg是一个强大的自由软件,可以处理多种音视频文件格式。M3U8是流媒体协议之一,通常用于将一个视频切割成多个小块并且进行分段传输,以便于适应不同网络环境中的传输需求。而MP4则是一种常见的视频文件格式。 如果要将M3U8格式的视频文件换成MP4格式,可以使用FFmpeg来实现。以下是基本的步骤: 1. 下载并安装FFmpeg 首先需要在计算机上安装FFmpeg。在Linux系统中,可以使用命令行sudo apt-get install ffmpeg进行安装;在Windows系统中,请先下载 FFmpeg二进制文件包,然后将其解压缩到一个方便存取的文件夹中。 2. 下载M3U8文件 要将M3U8文件换为MP4文件,需要先下载M3U8文件。用浏览器打开M3U8文件链接(通常以.m3u8结尾),然后将其中的URL复制到文本编辑器中,保存为.m3u8格式的文件。 3. 使用FFmpeg进行换 在Windows中,在bin文件夹中打开命令提示符(Shift+右键),然后输入以下命令: ffmpeg.exe -i input.m3u8 -c copy output.mp4 其中,input.m3u8是输入的M3U8文件名,output.mp4是输出的MP4文件名。-c copy选项表示直接将音视频流从输入文件复制到输出文件中,以加快换速度。执行完该命令后,FFmpeg将开始换。 注意要更改指令中输入输出的文件名,以符合文件实际情况。 4. 等待换完成 换时间取决于换文件的大小和处理器的速度。等换完成,即可在指定的输出文件夹中找到换后的MP4视频。 总之,FFmpeg可以轻松地将M3U8格式的流媒体文件换成MP4格式,而且换过程非常简便。 ### 回答3: FFmpeg是一个开源的音视频编码解码,可以用来实现音视频的录制、码和播放等功能。而m3u8格式是一种基于HTTP协议的流媒体格式,可用于视频直播和点播等场景。在一些情况下,我们可能需要将m3u8格式的视频换为mp4格式的视频,以便于后续的处理或播放。 FFmpeg提供了丰富的命令行参数,可以实现各种码效果。在将m3u8格式转换mp4格式时,可以使用如下命令: ffmpeg -i input.m3u8 -c copy output.mp4 其中,-i参数指定输入文件为input.m3u8;-c copy参数指定使用原始编解码器进行复制,以保持视频和音频的原始质量;output.mp4则是输出文件的文件名。 需要注意的是,由于m3u8格式的视频可能由多个片段组成,因此在进行换时需要先将所有片段合并为一个文件。我们可以使用FFmpeg中的concat协议来实现该功能。具体操作步骤如下: 1. 创建一个名为filelist.txt的文件,其中列出了所有的片段,格式如下: file 'segment1.ts' file 'segment2.ts' file 'segment3.ts' ... 2. 运行以下命令将所有片段合并为一个文件: ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.ts 其中,-f concat参数指定使用concat协议;-safe 0参数指定禁止检测文件名,因为filelist.txt中的文件名可能无法通过安全检测;output.ts为输出文件名。 3. 最后再运行以下命令将合并后的ts文件换为mp4文件: ffmpeg -i output.ts -c copy output.mp4 需要注意的是,在进行换时可能会遇到一些编码格式不支持的问题。此时可以使用FFmpeg中的音视频过滤器来进行码,以保证输出文件的质量和兼容性。具体的过滤器使用方法可以参考FFmpeg官方文档或相关教程
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值