音视频开发7 音视频转换格式流程

先看条转换视频文件的命令

我们的目的是将  源文件 source_1920x1080.mp4 转换成 目标文件 dest_1280x720.flv

ffmpeg -i source_1920x1080.mp4 -acodec copy -vcodec libx264 -s 1280x720 dest_1280x720.flv
-acodec copy 的意思是,目标的 音频格式 使用和 源文件一样的格式。
-vcodec libx264  的意思是,目标的 视频格式 使用 libx264  格式
-s 1280x720 的意思是,目标的视频的大小为 1280x720
dest_1280x720.flv   的意思是,目标文件的名字为 dest_1280x720.flv
按照上述标准,那么我们生成的  目标文件, 声音部分 和 视频部分应该是如下的样式的:
声音部分编码保持不变,还是 AAC 的
视频部分编码 从源文件的视频编码 变成 x264的,由于源文件的视频编码本身也是AVC的(也就是x264的),因此对于用于当前演示的这个文件,实际上也是不变的,但是如果换一个 源文件的视频编码不是x264的,就需要对源文件的编码进行改动。

主要的处理流程

这里要注意的是:如果是音频流的格式没有变化,那么理论上不需要  解码 -- 处理数据帧 -- 编码 这个过程。

请思考:

如果视频流的格式没有变化,需要这个过程吗?  解码 -- 处理数据帧 -- 编码

如果视频的大小有变化,例如从1920x1080 变成 1280x720 . 应该是需要的

重要概念:

容器(Container)


容器就是一种文件格式,比如flv、mkv、mp4等。包含下面5种流以及文件头信息。

流(Stream)


是一种视频数据信息的传输方式,5种流:音频,视频,字幕,附件,数据。

包(Packet)


在ffmpeg中包代表已经编码好的一个单位的音频或者视频。

帧(Frame)


在ffmpeg中帧代表一幅静止的图像(yuv数据)或一些数量的音频采样。

编解码器(Codec)

是对视频进行压缩或者解压缩,CODEC =ENCode (编码) +DECode(解码)

复用/解复用(mux/demux)


把不同的流按照某种容器的规则放入容器,这种行为叫做复用(mux)
把不同的流从某种容器中解析出来,这种行为叫做解复用(demux)

为了更好理解以上概念,下面以h264+aac编码的flv文件转码为 h265+mp3编码的mp4文件为例,ffmpeg的处理流程是这样的:

三 学习路线中的问题解答。基础知识-- 解复用基础知识

原文链接:https://blog.csdn.net/weixin_52622200/article/details/136683908

1.什么是解复用?比如mp4格式

把不同的流按照某种容器的规则放入容器,这种行为叫做复用(mux)
把不同的流从某种容器中解析出来,这种行为叫做解复用(demux)

解复用是指将音视频数据从容器格式中解封装出来,并进行解码操作,得到原始的音频和视频信号的过程。在音视频开发中,容器格式如MP4内部包含了音频轨、视频轨以及其他元数据,解复用过程就是将这些数据提取出来并进行解码,以便播放或者进一步处理。

对于MP4格式,解复用的过程包括以下步骤:

解析文件结构:首先需要读取MP4文件的头部信息,这包括了文件的基本结构、各个数据块的位置和大小等元数据。
定位音视频数据:根据文件结构信息,找到音频轨和视频轨的位置和大小。
音频解复用:将音频数据从MP4格式中提取出来,并进行解码操作,得到原始的音频信号。
视频解复用:将视频数据从MP4格式中提取出来,并进行解码操作,得到原始的视频信号。
在解复用的过程中,需要使用相应的解码器对音频和视频数据进行解码操作,得到原始的音频和视频信号,以便后续的播放或处理

2.为什么需要不同的复用格式 mp4/FLV/TS

主要原因包括以下几点:

容器格式特性:

MP4(MPEG-4 Part 14):MP4是一种通用的多媒体容器格式,支持多种编码格式的音频和视频数据,常用于存储和播放音视频文件。MP4格式具有良好的兼容性和广泛的支持,适用于多种场景。
FLV(Flash Video):FLV是Adobe Flash Player使用的一种视频容器格式,通常用于网络视频播放。FLV格式支持在Web上高效地传输和播放视频内容,适合在线视频流媒体。
TS(Transport Stream):TS是一种用于传输和存储音视频数据的格式,常用于数字电视、广播和视频流媒体。TS格式适合实时传输和广播环境,具有较好的抗干扰性和稳定性。
应用场景:

MP4适用于通用的存储和播放需求,广泛应用于本地视频文件、在线视频平台等场景。
FLV常用于在线视频流媒体服务,如Flash播放器、网络直播等。
TS适用于数字电视、广播、IPTV等需要实时传输和播放的场景,具有优秀的传输性能和稳定性。
编解码支持:

不同的复用格式可能对特定的编码格式有更好的支持,例如某些格式可能更适合H.264编码的视频数据,而另一些则更适合AAC编码的音频数据。
网络传输特性:

不同的复用格式可能对网络传输有不同的优化,如TS格式在传输过程中可以更好地处理丢包和延迟等问题。

3.常见的复用格式 mp4/FLV/TS

当谈及常见的复用格式时,我们通常会提到MP4、FLV和TS这三种格式。下面我将对它们进行更详细的讲解:

MP4(MPEG-4 Part 14)

MP4是一种通用的多媒体容器格式,最初由国际标准化组织制定。它可以存储视频、音频、文本和图形等数据,并且支持多种编码格式的音频和视频数据。MP4文件通常使用H.264(视频编码)和AAC(音频编码)作为默认的编码方式。

特点:

  • 广泛兼容性: MP4格式拥有非常好的兼容性,几乎所有的主流设备和播放器都支持MP4格式。
  • 网络传输: 由于其压缩效率高,因此在网络上传输中占用较小的带宽。
  • 应用领域: 适用于通用的存储和播放需求,如本地视频文件、在线视频平台等

FLV(Flash Video)


FLV是Adobe Flash Player使用的一种视频容器格式,最初被设计用于在Web上高效地传输和播放视频内容。

特点:

网络传输: FLV格式在网络传输中具有优异的表现,它能够提供较好的视频播放体验。
流媒体应用: 常用于在线视频流媒体服务,如Flash播放器、网络直播等。
互动性: FLV格式通常与Flash技术结合使用,支持视频流的交互式操作。


                        

TS(Transport Stream)


TS是一种用于传输和存储音视频数据的格式,最初用于数字电视、广播和视频流媒体等领域。

特点:

实时传输: TS格式非常适合实时传输和广播环境,具有稳定的传输性能。
抗干扰性: TS格式具有较好的抗干扰性,适用于不稳定网络环境下的传输。
应用领域: 主要应用于数字电视、广播、IPTV等需要实时传输和播放的场景。


                        
 

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 第一章 多媒体概念介绍 6 1.1视频格式 6 1.1.1常见格式 6 1.2音频格式 9 1.2.1常见格式 9 1.2.2比较 15 1.3字幕格式 15 1.3.1外挂字幕与内嵌字幕的阐述 15 1.3.2外挂字幕视频与内嵌字幕视频的画面比较 15 1.3.3外挂字幕的三种格式 15 1.4采集录制和播放渲染 16 1.4.1视频采集 16 1. 4.2视频录制 17 1.4.3视频渲染 17 1.5编解码器 18 1.6容器和协议 19 1.6.1容器格式和编码格式 19 1.6.2协议 26 1.6.2.1 视频协议 26 1.6.2.2 音频协议. 26 1.6.2.3 上层通讯协议 27 1.7常用概念介绍 27 1.7.1硬解 27 1.7.2 IBP帧 28 1.7.3 DTS和PTS 31 1.7.4 分辨率 31 1.7.5 码率 32 1.7.6 帧率 32 1.7.7 RGB和YUV 32 1.7.8 实时和非实时 32 1.7.9 复合视频和s-video 32 1.7.10 硬件加速 32 1.7.11 FFmpeg Device 32 第二章 FFmpeg框架 34 2.1 FFmpeg概述 34 2.1.1简介 34 2.1.2功能 34 2.1.3模块组成 35 2.1.4命令集 35 2.2 媒体播放器三大底层框架 37 第三章 编译及简单应用 41 3.1 FFmpeg库编译和入门介绍 41 41 3.2 流媒体数据流程讲解 49 3.3 简单应用 51 3.4 SDL( Simple Direct Layer) 55 3.4.1 SDL显示视频 55 3.4.2 SDL显示音频 55 3.5 ffmpeg程序的使用(ffmpeg.exe,ffplay.exe,ffprobe.exe) 56 3.5.1 ffmpeg.exe 56 3.5.2 ffplay.exe 56 3.5.3 ffprobe.exe 56 第四章 数据结构 57 4.1 AVCodec结构体 59 4.2 AVCodecContext结构体 59 4.3 AVInputFormat结构体 60 4.4 AVFormatContext结构体 61 4.5 MovContext结构体 62 4.6 URLProtocol结构体 62 4.7 URLContext结构体 63 4.8 AVIOContext结构体(老版本为:ByteIOContext) 63 4.9 AVStream结构体 64 4.10 MOVStreamContext 结构体 65 4.11 AVPacket 结构体 66 4.12 AVPacketList 结构体 67 4.13 AVFrame结构体 67 第五章 重要模块 76 5.1 libavutil公共模块 76 1 文件列表 76 2 common.h 文件 76 3 bswap.h 文件 78 4 rational.h 文件 79 5 mathematics.h 文件 80 6 avutil.h 文件 80 5.2 libavcodec编解码模块 82 1 文件列表 82 2 avcodec.h 文件 82 3 allcodec.c 文件 87 4 dsputil.h 文件 87 5 dsputil.c 文件 88 6 utils_codec.c 文件 88 7 imgconvert_template.h 文件 99 8 imgconvert.c 文件 121 9 msrle.c 文件 164 10 turespeech_data.h 文件 171 11 turespeech.c 文件 174 5.3 libavformat容器模块 184 1 文件列表 184 2 avformat.h 文件 184 3 allformat.c 文件 190 4 cutils.c 文件 190 5 file.c 文件 192 6 avio.h 文件 194 7 avio.c 文件 196 8 aviobuf.c 文件 200 9 utils_format.c 文件 209 10 avidec.c 文件 220 5.4 libswscale视频色彩空间转换 243 5.5 libswresample音频重采样 243 5.6 libavfilter音视频滤器 243 5.7 libavdevice设备输入和输出容器 243 5.8 libpostproc视频后期处理 243 第六章 播放器 243 6.1 视频播放器 243 6.1.1 ffmpeg库的配置 243 6.1.2 一个简单的视频播放器 244 6.2 音频播放器 247 6.3 一个完整的播放器--ffplay 253 6.3.1 ffplay流程图 253 6.3.2 ffplay源码剖析 254 第七章 应用开发 275 7.1 ffmpeg库的使用:编码 275 第八章 关键函数介绍 280 8.1 avformat_open_input 280 8.2 avcodec_register_all() 281 8.3 av_read_frame() 283 8.4 avcodec_decode_video2() 283 8.5 transcode_init() 283 8.6 transcode() 294 第九章 ffmpeg相关工程 301 9.1 ffdshow 301 ffdshow 源代码分析1 : 整体结构 302 ffdshow 源代码分析 2: 位图覆盖滤镜(对话框部分Dialog) 304 ffdshow 源代码分析 3: 位图覆盖滤镜(设置部分Settings) 312 ffdshow 源代码分析 4: 位图覆盖滤镜(滤镜部分Filter) 317 ffdshow 源代码分析 5: 位图覆盖滤镜(总结) 322 ffdshow 源代码分析 6: 对解码器的dll的封装(libavcodec) 322 ffdshow 源代码分析 8: 视频解码器类(TvideoCodecDec) 344 ffdshow 源代码分析 9: 编解码器有关类的总结 352 9.2 LAV filters 357 LAV Filter 源代码分析 1: 总体结构 357 LAV Filter 源代码分析 2: LAV Splitter 358 LAV Filter 源代码分析 3: LAV Video (1) 382 LAV Filter 源代码分析 4: LAV Video (2) 400 9.3 MPlayer 427 9.3.1 Mplayer支持的格式 427 9.3.2 Mplayer 中头文件的功能分析 427 9.3.3 MPlayer.main 主流程简要说明 428 9.3.4 Mplayer源码分析 429 第十章 开发实例 436 第十一章 mp4文件封装协议分析 436 11.1 概述 436 11.2 mp4的物理结构 436 11.3 数据的组织结构 437 11.4 mp4的时间结构 437 11.5 文件结构分析 438 11.5.1 File Type Box(ftyp) 438 11.5.2 Movie Box(moov) 438 第十二章 flv 文件格式分析 457 12.1 概述 457 12.2 文件总体结构 457 12.3 文件结构分析 458 12.3.1 flv文件头的结构 458 12.3.2 body主体结构 459 附录A:常见问题 465 1 ffmpeg 从内存中读取数据 465 2 MFC中使用SDL播放音频没有声音的解决方法 465 附录B:经典代码示例 466 附录C:ffmpeg参数中文详细解释 477 附录D:ffplay的快捷键以及选项 479 附录E: ffmpeg处理rtmp流媒体 481
Music Studio 7 是你创建、编辑、设计和制作音频的全能工具。为什么 选 Music Studio?Music Studio …直观而又强大!只需几下点击就能出色的完成任务。出色!Music Studio 有着以任务为导向的用户界面,简洁直观。技术久经考验!第五代的产品,我们开发人员经验丰富,严格保证 Music Studio 稳定可靠大眼仔(www.dayanzai.me)。Music Studio 重装上阵 外观更加精美,性能更高,功能更多 – 这绝对是我们做出来的最好的 Music Studio! 音频处理全能工具 Ashampoo Music Studio 中文版音频处理全能工具 Ashampoo Music Studio 中文版 用户界面 我们完全重新设计了这个产品,移除了那些乱七八糟的东西,最大限度保证其清晰简洁,让您永远专注于手头的任务。 速度更快 Music Studio 4 比之前版本更加快速了。平均下来,从开始启动到正常工作的时间小于 3 秒大眼仔(www.dayanzai.me),而音频转换方面的多核处理器支持使处理速度更上一层楼。 视频转音频 想要提取电脑中收藏的那些电影中的精美音乐?有了 Music Studio 4,小意思。有了视频转转音频功能,只需要选择然后范围然后点击处理 – 还能更方便吗? 音轨混淆 Music Studio 独创 – 为您的音乐收藏添加新的变化,利用交叉淡入淡出效果将多首歌曲无缝组合起来。 Ashampoo Music Studio 7 涵盖了从音乐创作到制作的整个流程。 支持的音频格式:FLAC、MP3、OGG、WAV、WMA 创作 数字化您的音乐,享受高质量的数字音乐。大眼仔(www.dayanzai.me)无论笔记本电脑、音乐播放器或是手机 – 随时随时倾听您最爱的音乐。 将您珍贵的音乐收藏传到电脑上,Music Studio 会为您创建相应的音频文件。 录制来自任意 Windows 录音设置的音频,如麦克风、线路输入,然后 Music Studio 可以处理完一切。 从收藏的电影中提取音乐并创建自己的铃声或是混音效果。 编辑 管理您的音乐收藏,按需求调节您的歌曲。 Music Studio 可以为您的歌曲自动创建大眼仔(www.dayanzai.me)有意义的文件名。如将 “Allegro con brio.mp3” 命名为 “Beethoven – [Op. 15] – Allegro con brio.mp3”,方便您查找海量收藏中的各首音乐。 音量太高?歌曲太长?音频格式错误?有了 Music Studio – 修正这一切都无比简单 设计 将您的音乐收藏进行分类,永远不会再找不到想要的歌曲了。 为精装或是简装的光盘盒设计精美的封面,甚至是直接打印到光盘上。Music Studio 的封面编辑器让您能瞬间创建出精美的艺术品。 制作 你的文件现在已数字化了,经过了转换和修改。现在是时候把它们刻录到光盘上,进行永久保存,或是方便在 CD 播放机上播放,亦或是赠送给亲朋好友。为什么不同时添加些变化,或是将音轨混合起来创做出首新歌? Music Studio 的音轨混淆功能提供了神奇的大眼仔(www.dayanzai.me)变化,让您的音乐增加新的魔力。完全支持淡入淡出效果,简单的混合多个音轨制作新的歌曲。 刻录成自己的音频 CD,或是 MP3、WMA 光盘,甚至是混合类光盘,支持 MP3、WMA、FLAC、OGG 以及 WAV 文件。
### 回答1: 很高兴能帮到你!学习音视频开发的路径主要可以分为以下几个步骤:1、加深对基础知识的理解,比如计算机图形学、计算机视觉、数字图像处理、信号处理等;2、掌握音视频编码技术,包括视频编码格式、视频编码技术、音频编码技术等;3、学习音视频开发的常用技术,比如视频分析、视频网络传输、视频编辑、音频分析、音频编辑等;4、学习音视频开发的常用工具,比如FFmpeg、GStreamer、编解码器等;5、学习音视频开发的应用,包括视频监控、视频会议、视频编辑等。 ### 回答2: 音视频开发是一门广阔的学科,涵盖了音频和视频的采集、处理、编码、传输和播放等方面。如果你想学习音视频开发,可以从以下几个方面入手: 1. 基础知识学习:首先要了解计算机图像和音频的基础知识,包括色彩空间、分辨率、帧率、采样率、编码格式等概念。同时还需要学习相关的数学知识,如数字信号处理、图像处理和声音处理等。 2. 学习编程:音视频开发需要掌握编程技术,建议学习C++语言,因为它在音视频领域应用广泛。学习C++的基本语法和面向对象编程思想,熟悉常用的音视频开发库和工具,如FFmpeg、GStreamer等。 3. 学习音视频编码:音视频编码是音视频开发的核心内容之一。学习各种常见的音视频编码算法和标准,如H.264、MPEG-2、AAC等。了解编码的原理和流程,熟悉压缩、解压缩、封装和解封装等相关技术。 4. 学习音视频采集和处理:学习音频和视频的采集、处理和编辑技术,掌握音频信号的采集和处理、视频图像的采集和特效处理、音视频的同步和合成等技术。可以尝试使用开发工具和库来实现简单的音视频应用,如录制、剪辑、转码等。 5. 学习音视频传输和网络技术:掌握音视频的传输技术和网络协议,如RTP/RTCP、HTTP、RTMP等。了解音视频传输的原理和流程,学习网络编程的基础知识和技术,如套接字编程、UDP/TCP传输等。 6. 实践和项目开发:通过参与实际项目,积累实践经验和解决问题的能力。可以参加一些开源项目或自己设计、实现一些小的音视频应用程序,如音频播放器、视频会议应用等。 总之,学习音视频开发需要系统地学习相关的基础知识和技术,同时通过实践不断提升自己的能力。不断探索和学习新的技术和方法,关注行业的最新动态和发展趋势,才能在音视频开发领域有所建树。 ### 回答3: 音视频开发学习路径通常可以按照以下步骤进行: 1. 学习基础知识:首先了解音视频基础理论和相关概念。包括音频处理、视频编解码、媒体传输等基本原理。可以通过阅读相关书籍、教程或参加在线课程来获取这些基础知识。 2. 编程技能:具备一定的编程基础是进行音视频开发的前提。熟悉至少一门编程语言,如C++、Java或Python等,并掌握相关的编程技巧和常用的开发工具。 3. 学习音视频编解码:了解常用的音视频编解码标准,如AAC、MP3、H.264、VP9等。学习如何使用编解码库进行音视频格式转换、压缩和解压缩等工作。可以参考FFmpeg等开源库进行学习。 4. 掌握音视频处理技术:学习音视频处理的算法和技术,如音频降噪、音频增强、视频滤镜、视频特效等。可以通过学习相关的数字信号处理算法、图像处理算法以及计算机视觉技术等来推进。 5. 学习媒体传输和流媒体技术:了解常用的媒体传输协议,如RTP、RTSP、HTTP等。学习流媒体技术,如HTTP Live Streaming(HLS)、Dynamic Adaptive Streaming over HTTP(DASH)等。这些知识将有助于你理解和实现音视频流的传输和播放。 6. 实践项目:利用你学到的知识,尝试实践一些音视频开发项目。可以开发音视频播放器,录音录像应用,视频会议应用等。通过实践项目,可以更好地理解和巩固所学的知识,并培养实际应用能力。 总之,音视频开发是一个庞大的领域,需要掌握多方面的知识。通过系统学习和实践,逐步提升自己的技能和水平,在实际应用中获得更多的经验和成长。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值