`

ffmpeg视频格式转换分析

    博客分类:
  • java
阅读更多

我们在将多种格式的视频转换成flv格式的时候,我们关注的就是转换后的flv视频的品质和大小。下面就自己的实践所得来和大家分享一下,主要针对avi、3gp、mp4和wmv四种格式来进行分析。通常在使用ffmpeg进行视频转换的时候我们使用到的控制音视频的主要参数有如下:
-ab bitrate 设置音频码率
-acodec codec 使用codec编解码
-ac channels 设置通道,缺省为1
-ar freq 设置音频采样率
-r fps 设置帧频,缺省25
-b bitrate 设置比特率,缺省200kb/s
-qscale 6或4 使用动态码率来设置
对于其他诸如-i、-y、-s等参数基本上都是可以很好理解的了。我们上面提到的几个参数前四个主要是用来设置音频的,后三个主要是用来设置视频的。对于音频的ar(采样率)可以指定为22050、24000、44100或48000,一般来将后两种比较常见;对于音频的ab(码率)一般是选择32、64、96或128这几种;对音频的acodec则是指定编码方式,可以指定为libmp3lame或aac等,这两种分别是指使用mp3和aac格式的音频。在实际的测试过程中我发现在使用mp3进行音频编码时指定ab为64或更高和指定ar为22050或更高对实际的视频音质没有什么大的影响,请参见后面的测试结果。

对于视频的r用来指定帧频,一般设置为29.97;对于视频的b(视频的比特率)可以指定如128、314等数字,对于1500以上则没有效果;对于视频的qscale,属于动态码率,可以设置为4或6,4的质量比6的要高。在测试的过程中我发现设置-b参数对视频的质量并没有过大的改变(指定大指定小都差不多或是一样),而设置qscale则完全不一样,如果我们想获取高品质的话应该使用动态码率而不是指定-b参数,当然了,使用动态码率的坏处就是视频的体积变大了。在使用动态码率的时候使用6的效果和4差不多,但是体积减少了,因此通常建议使用6来设置动态码率。

上面介绍了转换过程中的音视频的配置参数,综合上面,我们在转换的时候通常的命令如下:
高品质:ffmpeg -i infile -ab 128 -acodec libmp3lame -ac 1 -ar 22050 -r 29.97 -qscale 6 -y outfile
低品质:ffmpeg -i infile -ab 128 -acodec libmp3lame -ac 1 -ar 22050 -r 29.97 -b 512 -y outfile

使用这两个命令测试四种格式的视频结果如下,同时在测试的过程中会改变相应的参数进行测试,四个视频的信息如下:
AVI格式的:test.avi 14.1M
3GP格式的:test.3gp 4.30M
MP4格式的:test.mp4 16.4M
WMV格式的:test.wmv 15.0M

1.使用高品质的脚本测试结果如下:
AVI格式转换后的:-qscale 6结果=avi_01.flv 6.61M -qscale 4结果=avi_02.flv 9.30M
3GP格式转换后的:-qscale 6结果=3gp_01.flv 4.21M -qscale 4结果=3gp_02.flv 5.30M
MP4格式转换后的:-qscale 6结果=mp4_01.flv 13.1M -qscale 4结果=mp4_02.flv 17.5M
WMV格式转换后的:-qscale 6结果=wmv_01.flv 15.9M -qscale 4结果=wmv_02.flv 22.3M

2.使用低品质的脚本测试结果如下:
AVI格式转换后的:-b 512结果=avi_03.flv 2.87M -b 1000结果=avi_04.flv 2.87M
3GP格式转换后的:-b 512结果=3gp_03.flv 1.73M -b 1000结果=3gp_04.flv 1.73M
MP4格式转换后的:-b 512结果=mp4_03.flv 5.84M -b 1000结果=mp4_04.flv 5.84M
WMV格式转换后的:-b 512结果=wmv_03.flv 6.17M -b 1000结果=wmv_04.flv 6.17M

3.压缩率比较如下:
AVI格式转换后的:-qscale 6结果=53.12% -qscale 4结果=34.04% -b 512/1000结果=79.65%
3GP格式转换后的:-qscale 6结果=2.093% -qscale 4结果=123.1% -b 512/1000结果=59.77%
MP4格式转换后的:-qscale 6结果=20.12% -qscale 4结果=106.7% -b 512/1000结果=64.39%
WMV格式转换后的:-qscale 6结果=106.0% -qscale 4结果=148.7% -b 512/1000结果=58.87%

通过比较前后的压缩大小我们可以看到在音频保持一致的情况下,使用高品质的转换和使用低品质的转换的巨大差异,同时对于不同格式的视频在转换的过程中也会出现比较大的差异。当然了,这些数据并不一定代表所有这些格式的视频都是如此,具体的要看大家的应用了。不过,我们可以确定的是AVI格式的视频在转换成FLV格式后其压缩率最大,不过对于不同编码的AVI其结果就不一定了。同时我们也还看到,对于某些格式的视频在转换后其体积比原先的还大了,这个我们在应用的时候就需要注意了。

分享到:
评论

相关推荐

    FFMPEG实现视频格式转换组件-源代码

    FFMPEG是一个强大的开源工具,用于处理音频和视频文件,包括转换、编码、解码、流处理等功能...通过深入理解和实践“FFMPEG实现视频格式转换组件”的源代码,开发者可以提升自己的技能,应对更多样化的多媒体处理挑战。

    基于FFMPEG的视频转换系统1

    随着数字视频工业的迅速崛起,视频摄像机已广泛渗透到人们的日常生活中,导致视频格式和编码方式的多样化。这种多样性为视频处理带来了挑战,尤其是对于需要在不同设备间共享和播放的用户而言。因此,开发一个基于...

    ffmpeg转换参数和对几种视频格式的转换分析

    二、FFmpeg视频格式转换 1. MP4 (MPEG-4 Part 14): 常见的通用格式,兼容性好,适用于网络传输。转换命令:`ffmpeg -i input.mp4 -c:v libx264 -preset slow -crf 23 -c:a aac output.mp4` 2. FLV (Flash Video): ...

    FFmpeg视频mp4转换mov示例,可供FFmpeg学习

    此外,你还可以利用FFmpeg的命令行工具,如`ffmpeg.exe`,实现快速的格式转换,而不必编写代码。在命令行中,一条简单的转换命令可能如下: ```bash ffmpeg -i input.mp4 -c:v copy -c:a copy output.mov ``` 这条...

    java ffmpeg视频转换

    Java FFmpeg视频转换是一个在Java开发中常见的任务,它涉及到使用FFmpeg库通过Java代码来处理多媒体文件,如视频的编码、解码、格式转换等。FFmpeg是一个强大的跨平台命令行工具,提供了丰富的功能,包括视频转码、...

    视频转换利器ffmpeg及其源码

    FFmpeg是一款强大的、开源的跨平台多媒体处理工具,它涵盖了音视频编码、解码、转码、封装、格式转换、流媒体处理等多个方面。在本文中,我们将深入探讨FFmpeg的功能、工作原理以及如何利用其源码进行开发。 FFmpeg...

    mfc ffmpeg 任意格式视频播放

    在MFC(Microsoft Foundation Classes)应用程序中整合FFmpeg,可以实现对任意格式视频的播放功能。 MFC 是微软提供的一套面向对象的C++类库,用于构建Windows应用程序。通过MFC,我们可以构建用户界面并管理与操作...

    利用ffmpeg批量视频转换.zip

    FFmpeg 是一个强大的开源命令行工具,用于处理各种多媒体文件,包括音频和视频的编码、解码、转换、流媒体等。在这个“利用ffmpeg批量视频转换.zip”压缩包中,我们很显然会涉及到如何使用FFmpeg来自动化处理一系列...

    ffmpeg 视频解析 for andorid

    例如,使用`avformat_open_input()`打开视频文件,`avformat_find_stream_info()`获取流信息,`avcodec_find_decoder()`查找解码器,`avcodec_decode_video2()`解码视频帧,`sws_scale()`进行色彩空间转换,以及`...

    ffmpeg MP3 转换 pcm

    总结来说,FFmpeg是一个功能强大的多媒体处理工具,能够方便地进行音频和视频的格式转换。在这个项目中,我们学习了如何在VS2013下编译FFmpeg,并使用它将MP3文件转换为PCM格式,这有助于我们在音频处理领域进行更...

    用 Electron + FFmpeg 开发的视频剪辑器(毕业设计).zip

    3. **转码**:可以将视频和音频文件转换为不同的格式,适应不同的设备或网络环境。 4. **特效与滤镜**:提供丰富的滤镜和特效,如裁剪、缩放、色彩调整等。 5. **实时处理**:FFmpeg支持实时处理,适用于直播或流...

    C#实现将视频格式转换为FLV,进而实现在线预览

    在C#中,实现视频格式转换通常需要借助第三方库,如FFmpeg。FFmpeg是一个强大的跨平台多媒体处理工具,可以用来进行视频编码、解码、转码、封装等多种操作。在C#中可以通过FFmpeg的C#绑定库,如NAudio、Xabe.FFmpeg...

    ffmpeg合成视频

    四、视频格式转换 FFmpeg支持多种视频格式之间的转换,如MP4转AVI: ```bash ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset veryfast -c:a copy output.avi ``` 其中,`-crf`设置质量参数,数值越小质量越高...

    万能的视频格式转换软件

    视频格式转换软件是一种非常实用的工具,它允许用户将各种不同类型的视频文件转换为其他兼容的格式,以适应不同的设备或平台的需求。标题中的“万能”指的是这种软件的广泛兼容性,它能够处理多种多样的视频格式,...

    java web ffmpeg memcoder视频转换为flash

    总的来说,这个项目涉及到的技术栈主要包括Java Web开发、FFmpeg视频处理、系统命令调用以及可能的图形界面工具集成。通过学习和实践这些知识点,开发者可以构建出一个功能完善的视频转换服务,满足在线视频平台的...

    ffmpeg整体流程及视频格式分析(马德祥)

    本文将深入探讨FFmpeg的整体流程、框架结构、主要数据结构及其在处理视频格式,如MP4和FLV时的关键分析。 1. FFmpeg整体流程: FFmpeg 的工作流程大致可以分为四个阶段:输入、解码、处理和编码。首先,FFmpeg 使用...

    FFMPEG_YUV-格式转换缩放_本地文件

    FFmpeg是一款强大的开源工具,广泛应用于音视频处理领域,包括格式转换、编码解码、剪辑、缩放等任务。在本案例中,"FFMPEG_YUV-格式转换缩放_本地文件"指的是使用FFmpeg对本地的YUV格式文件进行格式转换和尺寸缩放...

    ffmpeg视频解码示例代码

    在这个“ffmpeg视频解码示例代码”中,我们主要关注的是如何使用 FFmpeg API 进行视频解码。 解码是将编码后的视频数据转换回原始像素的过程,以便播放或进一步处理。在 FFmpeg 中,这个过程涉及以下几个关键步骤:...

    java+ffmpeg视频、音频转码

    FFmpeg是一款强大的跨平台命令行工具,用于处理各种音视频格式,包括转码、剪辑、合并等操作。而Java则提供了一个稳定的运行环境和丰富的库来封装FFmpeg的功能,使得在Java应用中调用FFmpeg变得更加便捷。 1. **...

Global site tag (gtag.js) - Google Analytics