ffmpeg speex转换为mp3或者aac

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

输入:

flv格式,视频264编码,音频speex编码

-8:[root@andrew ffmpeg-3.0./ffprobe test_speex1.flv
32:ffprobe version 3.0-static32: Copyright (c) 2007-2016 the FFmpeg developers32:
32:  built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-16)
32:  configuration: --enable-gpl --enable-nonfree --disable-shared --enable-postproc --enable-bzlib --enable-zlib --enable-parsers --enable-libx264 --enable-libmp3lame --enable-libfaac --enable-libfdk-aac --enable-pthreads --extra-ldflags=-static --disable-ffserver --enable-ffplay --enable-asm --enable-yasm --enable-optimizations --pkg-config-flags=--static --extra-cflags=--static --extra-version=static --extra-ldflags=-L/usr/local/lib --extra-cflags=-I/usr/local/include --extra-libs=-lrtmp --enable-libspeex --enable-encoder=libspeex --enable-decoder=libspeex
32:  libavutil      55. 17.103 / 55. 17.103
32:  libavcodec     57. 24.102 / 57. 24.102
32:  libavformat    57. 25.100 / 57. 25.100
32:  libavdevice    57.  0.101 / 57.  0.101
32:  libavfilter     6. 31.100 /  6. 31.100
32:  libswscale      4.  0.100 /  4.  0.100
32:  libswresample   2.  0.101 /  2.  0.101
32:  libpostproc    54.  0.100 / 54.  0.100
32:[h264 @ 0x242c260] decoding video .......
32:Input #0, flv, from 'test_speex1.flv':
32:  Metadata:
32:    metadatacreator : 32:Yet Another Metadata Injector for FLV - Version 1.832:
32:    canSeekToEnd    : 32:true32:
32:    videosize       : 32:2034203232:
32:    audiosize       : 32:272241432:
32:    lastkeyframetimestamp: 32:31832:
32:    lastkeyframelocation: 32:2313943332:
32:    encoder         : 32:Lavf57.25.10032:
32:  Duration: 32:00:00:01.7332:, start: 32:0.08100032:, bitrate: 32:331 kb/s32:
32:    Stream #0:032:: Video: h264 (High), yuv420p, 608x448 [SAR 56:57 DAR 4:3]32:, 32:15.17 fps, 32:15 tbr, 32:1k tbn, 32:30 tbc32:
32:    Stream #0:132:: Audio: speex, 16000 Hz, mono, s16, 27 kb/s32:

 

输出h264+mp3

例1:

./ffmpeg -re -i test_speex1.flv -vcodec libx264 -acodec libmp3lame  -y -f flv test_1out.flv

-8:[root@andrew ffmpeg-3.0]# ./ffmpeg -re -i test_speex1.flv -vcodec libx264 -acodec libmp3lame -y -f flv test_1out.flv
32:ffmpeg version 3.0-static32: Copyright (c) 2000-2016 the FFmpeg developers32:
32:  built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-16)
32:  configuration: --enable-gpl --enable-nonfree --disable-shared --enable-postproc --enable-bzlib --enable-zlib --enable-parsers --enable-libx264 --enable-libmp3lame --enable-libfaac --enable-libfdk-aac --enable-pthreads --extra-ldflags=-static --disable-ffserver --enable-ffplay --enable-asm --enable-yasm --enable-optimizations --pkg-config-flags=--static --extra-cflags=--static --extra-version=static --extra-ldflags=-L/usr/local/lib --extra-cflags=-I/usr/local/include --extra-libs=-lrtmp --enable-libspeex --enable-encoder=libspeex --enable-decoder=libspeex
32:  libavutil      55. 17.103 / 55. 17.103
32:  libavcodec     57. 24.102 / 57. 24.102
32:  libavformat    57. 25.100 / 57. 25.100
32:  libavdevice    57.  0.101 / 57.  0.101
32:  libavfilter     6. 31.100 /  6. 31.100
32:  libswscale      4.  0.100 /  4.  0.100
32:  libswresample   2.  0.101 /  2.  0.101
32:  libpostproc    54.  0.100 / 54.  0.100
32:[h264 @ 0x3ec1b40] decoding video .......
32:Input #0, flv, from 'test_speex1.flv':
32:  Metadata:
32:    metadatacreator : 32:Yet Another Metadata Injector for FLV - Version 1.832:
32:    canSeekToEnd    : 32:true32:
32:    videosize       : 32:2034203232:
32:    audiosize       : 32:272241432:
32:    lastkeyframetimestamp: 32:31832:
32:    lastkeyframelocation: 32:2313943332:
32:    encoder         : 32:Lavf57.25.10032:
32:  Duration: 32:00:00:01.7332:, start: 32:0.08100032:, bitrate: 32:331 kb/s32:
32:    Stream #0:032:: Video: h264 (High), yuv420p, 608x448 [SAR 56:57 DAR 4:3]32:, 32:15.17 fps, 32:15 tbr, 32:1k tbn, 32:30 tbc32:
32:    Stream #0:132:: Audio: speex, 16000 Hz, mono, s16, 27 kb/s32:
32:[libx264 @ 0x3ec2fe0] x264 init info........
32:[libx264 @ 0x3ec2fe0] using SAR=56/57
32:[libx264 @ 0x3ec2fe0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
32:[libx264 @ 0x3ec2fe0] profile High, level 2.2
32:[libx264 @ 0x3ec2fe0] 264 - core 144 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=1 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=15 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
16:[flv @ 0x3f6f440] FLV does not support sample rate 16000, choose from (44100, 22050, 11025)
16:[flv @ 0x3f6f440] Audio codec mp3 not compatible with flv
32:Output #0, flv, to 'test_1out.flv':
32:  Metadata:
32:    metadatacreator : 32:Yet Another Metadata Injector for FLV - Version 1.832:
32:    canSeekToEnd    : 32:true32:
32:    videosize       : 32:2034203232:
32:    audiosize       : 32:272241432:
32:    lastkeyframetimestamp: 32:31832:
32:    lastkeyframelocation: 32:2313943332:
32:    encoder         : 32:Lavf57.25.10032:
32:    Stream #0:032:: Video: h264 (libx264) ([7][0][0][0] / 0x0007), yuv420p, 608x448 [SAR 56:57 DAR 4:3], q=-1--132:, 32:15 fps, 32:1k tbn, 32:15 tbc32:
32:    Metadata:
32:      encoder         : 32:Lavc57.24.102 libx26432:
32:    Side data:
32:      24:unknown side data type 10 (24 bytes)32:
32:    Stream #0:132:: Audio: mp3 (libmp3lame) ([2][0][0][0] / 0x0002), 16000 Hz, mono, s16p32:
32:    Metadata:
32:      encoder         : 32:Lavc57.24.102 libmp3lame32:
32:Stream mapping:
32:  Stream #0:0 -> #0:032: (h264 (native) -> h264 (libx264))32:
32:  Stream #0:1 -> #0:132: (speex (libspeex) -> mp3 (libmp3lame))32:
16:Could not write header for output file #0 (incorrect codec parameters ?): Function not implemented

问题:

16:[flv @ 0x3f6f440] FLV does not support sample rate 16000, choose from (44100, 22050, 11025)
16:[flv @ 0x3f6f440] Audio codec mp3 not compatible with flv

libmp3lame.c代码

static const int libmp3lame_sample_rates[] = {44100, 48000,  32000, 22050, 24000, 16000, 11025, 12000, 8000, 0
};

 

例2:

./ffmpeg -re -i test_speex1.flv -vcodec libx264 -acodec libmp3lame -ar 22050 -y -f flv test_1out.flv

能够正常转码。

 

例3:

./ffmpeg -re -i test_speex1.flv -vcodec libx264 -acodec aac -y -f flv test_1out.flv

能够正常转码。即aac支持16kHz的采样率。

aacenctab.h

/* duplicated from avpriv_mpeg4audio_sample_rates to avoid shared build* failures */
static const int mpeg4audio_sample_rates[16] = {96000, 88200, 64000, 48000, 44100, 32000,24000, 22050, 16000, 12000, 11025, 8000, 7350
};

 

flvenc.c对采样率和声道的判断

static int get_audio_flags(AVFormatContext *s, AVCodecContext *enc)
{int flags = (enc->bits_per_coded_sample == 16) ? FLV_SAMPLESSIZE_16BIT: FLV_SAMPLESSIZE_8BIT;if (enc->codec_id == AV_CODEC_ID_AAC) // specs force these parametersreturn FLV_CODECID_AAC | FLV_SAMPLERATE_44100HZ |FLV_SAMPLESSIZE_16BIT | FLV_STEREO;else if (enc->codec_id == AV_CODEC_ID_SPEEX) {if (enc->sample_rate != 16000) {av_log(s, AV_LOG_ERROR,"FLV only supports wideband (16kHz) Speex audio\n");return AVERROR(EINVAL);}if (enc->channels != 1) {av_log(s, AV_LOG_ERROR, "FLV only supports mono Speex audio\n");return AVERROR(EINVAL);}return FLV_CODECID_SPEEX | FLV_SAMPLERATE_11025HZ | FLV_SAMPLESSIZE_16BIT;} else {switch (enc->sample_rate) {case 44100:flags |= FLV_SAMPLERATE_44100HZ;break;case 22050:flags |= FLV_SAMPLERATE_22050HZ;break;case 11025:flags |= FLV_SAMPLERATE_11025HZ;break;case 16000: // nellymoser onlycase  8000: // nellymoser onlycase  5512: // not MP3if (enc->codec_id != AV_CODEC_ID_MP3) {flags |= FLV_SAMPLERATE_SPECIAL;break;}default:av_log(s, AV_LOG_ERROR,"FLV does not support sample rate %d, ""choose from (44100, 22050, 11025)\n", enc->sample_rate);return AVERROR(EINVAL);}}if (enc->channels > 1)flags |= FLV_STEREO;switch (enc->codec_id) {case AV_CODEC_ID_MP3:flags |= FLV_CODECID_MP3    | FLV_SAMPLESSIZE_16BIT;break;case AV_CODEC_ID_PCM_U8:flags |= FLV_CODECID_PCM    | FLV_SAMPLESSIZE_8BIT;break;case AV_CODEC_ID_PCM_S16BE:flags |= FLV_CODECID_PCM    | FLV_SAMPLESSIZE_16BIT;break;case AV_CODEC_ID_PCM_S16LE:flags |= FLV_CODECID_PCM_LE | FLV_SAMPLESSIZE_16BIT;break;case AV_CODEC_ID_ADPCM_SWF:flags |= FLV_CODECID_ADPCM  | FLV_SAMPLESSIZE_16BIT;break;case AV_CODEC_ID_NELLYMOSER:if (enc->sample_rate == 8000)flags |= FLV_CODECID_NELLYMOSER_8KHZ_MONO  | FLV_SAMPLESSIZE_16BIT;else if (enc->sample_rate == 16000)flags |= FLV_CODECID_NELLYMOSER_16KHZ_MONO | FLV_SAMPLESSIZE_16BIT;elseflags |= FLV_CODECID_NELLYMOSER            | FLV_SAMPLESSIZE_16BIT;break;case AV_CODEC_ID_PCM_MULAW:flags = FLV_CODECID_PCM_MULAW | FLV_SAMPLERATE_SPECIAL | FLV_SAMPLESSIZE_16BIT;break;case AV_CODEC_ID_PCM_ALAW:flags = FLV_CODECID_PCM_ALAW  | FLV_SAMPLERATE_SPECIAL | FLV_SAMPLESSIZE_16BIT;break;case 0:flags |= enc->codec_tag << 4;break;default:av_log(s, AV_LOG_ERROR, "Audio codec '%s' not compatible with FLV\n",avcodec_get_name(enc->codec_id));return AVERROR(EINVAL);}return flags;
}

从以上代码可以总结出以下几点:

1. 编码类型为AV_CODEC_ID_AAC,flv都支持

2.编码类型为AV_CODEC_ID_SPEEX,采样率只能为16000,并且单声道

3. 采用率为44100,22050,11025的所有编码方式都是支持的

4. MP3的编码方式不支持采样率为16000,8000和5512

 

 

总结:

使用ffmpeg转码speex到mp3时,需要指定输出的采样率,否则可能转码合成flv时出问题。

 

 

转载于:https://my.oschina.net/u/2326611/blog/681038

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294115.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言给bmp图片加滤镜,关于BMP位图透明通道的详解制作教程, 教你输出透明的BMP位图...

我是sjmhiex啊月谢谢大家的支持 百度贴吧&#xff1a;sjmhiex吧QQ群&#xff1a;243153684BMP支持透明比较常见的方法有两种&#xff1a; 一种是32位图&#xff0c;直接就可以是透明的&#xff0c;还可以是半透明效果&#xff0c;一般都是用PNG转成的&#xff0c;或者在保存图…

Android之Lollipop DevicePolicyManager学习(上)

Android 5.0(lollipop)发布之后&#xff0c;看特性文档增加了不少有趣的东西。 最近花了一些时间&#xff0c;研究了下其中Managed Profile的概念&#xff0c;简称MP&#xff0c;记录下来作为一些经验&#xff0c;有需要的同学请参考。 简介 Managed Profile&#xff0c;简称被…

简述JQuery,Extjs,YUI,Prototype,Dojo等JS框架的区别和应用场景

随着web2.0的彪悍发展&#xff0c;以及浏览器端所承载的工作越来越大&#xff08;在不是很影响性能的情况下&#xff0c;开发者都习惯把能用浏览器做的事儿都让浏览器做&#xff0c;以减轻服务器的压力和带宽费用等&#xff09;。所以Javascript已经成为了web开发最最基本的要求…

怎么向小学生解释欧拉公式 e^(πi)+1=0?

全世界只有3.14 % 的人关注了爆炸吧知识前几天&#xff0c;超模君空投了一个包裹给8岁表妹。不到三秒&#xff0c;表妹就从包裹里面拿出来一条毛毯&#xff1a;表哥&#xff0c;这个毛绒绒的毯子好舒服&#xff0c;我披着毯子写作业很暖和&#xff0c;但这个图案是啥&#xff0…

正式发布!Azure Functions OpenAPI Extension

微软中国MSDN 点击上方蓝字关注我们距离Azure Functions OpenAPI Extension的预览版发布已有一年的时间&#xff0c;今天&#xff0c;我们很开心地宣布它已经正式发布了&#xff01;该版本支持.NET Core 2.1 (LTS)、3.1 (LTS)、.NET 5 和 .NET 6 (LTS)的同时&#xff0c;它还支…

Java中数据是如何存储

2019独角兽企业重金招聘Python工程师标准>>> 一&#xff1a;JAVA中数据的存储方式 ①&#xff1a;寄存器&#xff1a;这是最快的存储区&#xff0c;因为它位于不同于其他存储区的地方———处理器内部。但是寄存器的数量极其有限&#xff0c;所以寄存器根据需求进行…

Android之Lollipop DevicePolicyManager学习(下)

转载&#xff1a;http://blog.csdn.net/guiyu_1985/article/details/42968781 3. 如何在主账户与被管理者账户之间做数据通信。 a) 什么是userID 刚才提到&#xff0c;Lollipop用来区分主账户与被管理账户的其实是一个int型数值userID。 从UserHandler.class可…

详解:从Greenplum、Hadoop到现在的阿里大数据技术

对于企业来说&#xff0c;但是到底云计算是什么呢&#xff1f;相信很多企业都有这样的困惑&#xff0c;让我们一起回到这个原始的起点探讨究竟什么是云计算&#xff1f;云计算对于企业而言到底意味什么&#xff1f;云计算的三条发展路径及三种落地形态 当回到最初的起点再审视云…

技术分享 | 【构建服务端SDK】之连接中心统一调用SDK

源宝导读&#xff1a;微服务架构与传统的单体式方案的最大不同是微服务将应用的核心功能拆分成多项服务。每项服务可以单独构建和部署。服务之间需要互相通信。假设服务间每次通信都需要在调用方编码操作&#xff0c;那么必定会增加很大的工作量&#xff0c;并且造成代码冗余并…

Tcp连接的七次握手浅析

连接的三次握手 客户端向服务器发送SYN请求 服务器发送ACK回应请求&#xff0c;并同时发送一个SYN的请求给客户端 客户端回应ACK应答 关闭的四次握手 对于关闭流程&#xff0c;一共有三种情况&#xff1a;客户端主动关闭&#xff0c;服务器端主动关闭&#xff0c;客户端和服务器…

VS2022安装教程和使用说明来了

我看很多小伙伴已经开始迫不及待的安装VS2022了&#xff0c;虽然我也安装了VS2022&#xff0c;但是我依旧使用VS2019。因为我觉得适合我的才是最好的&#xff0c;并非是最新的&#xff0c;所以大家在使用的时候&#xff0c;根据实际需求选择开发工具&#xff0c;不要一味追求最…

华为交换机RRPP配置实验

在工作中遇到了H3C和HW的RRPP配置&#xff0c;以下就以华为模拟器再作一次实验。大家共同来论讨论遇到的问题。 【理论基础】RRPP具体的理论见配置手册下面只点几个容易出错的地方1、作为RRPP环的接口要关闭STP2、两个重要的命令&#xff1a;control-vlan vlan-id命令&#xff…

Android之AIDL服务

AIDL服务 服务&#xff08;Service&#xff09;是android系统中非常重要的组件。Service可以脱离应用程序运行。也就是说&#xff0c;应用程序只起到一个启动Service的作用。一但Service被启动&#xff0c;就算应用程序关闭&#xff0c;Service仍然会在后台运行。 andro…

男人的那些统一话术......

1 当面试官来租你的房子▼2 好家伙&#xff08;via.dy油画艺术&#xff09;▼3 学到了&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 一杯奶茶能加多少料▼5 原来我们如此优秀&#xff01;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼6 幼儿园里卧…

后端开发者开发前端必会的工具(一):样式调试篇

又来为大家分享干货了&#xff0c;今天主要是分享一点关于后端工程师开发前端比较苦恼的一个问题《如何去调试前端&#xff1f;》&#xff0c;我相信这是所有后端开发者比较困惑的&#xff0c;如果有这个困惑的&#xff0c;记得关注“程序员晓晓”公众号&#xff0c;并给我留言…

adb android源码分析,Android源码分析(十六)----adb shell 命令进行OTA升级

一: 进入shell命令界面adb shell二&#xff1a;创建目录/cache/recoverymkdir /cache/recovery 如果系统中已有此目录&#xff0c;则会提示已存在。三: 修改文件夹权限chmod -R 777 /cache/recovery四: 把ota文件路径写入/cache/recovery/command文件中echo "--update_pac…

如何使用cURL获得请求和响应时间?

✎ 码甲说 hello&#xff0c;老伙计们&#xff0c;又有半个多月没见了&#xff0c;今天给大家分享一个干货编程小技巧&#xff0c;上至架构师、下至开发者、运维男、QA&#xff0c; 得此利器&#xff0c;事半功倍。cURL在我的眼里&#xff0c;就是一个httpClient手办&#xff…