在做音视频处理技术的过程中,有时候会需要对音频进行速度的调整,比如调快,调慢等,而在FFmpeg中已经有滤镜可以支持这样的调慢、调快的功能,主要是通过atempo滤镜来进行操作,下面看一下atempo滤镜的文档描述:
7.42 atempo
Adjust audio tempo.
The filter accepts exactly one parameter, the audio tempo. If not specified then the filter will assume nominal 1.0 tempo. Tempo must be in the [0.5, 100.0] range.
Note that tempo greater than 2 will skip some samples rather than blend them in. If for any reason this is a concern it is always possible to daisy-chain several instances of atempo to achieve the desired product tempo.
7.42.1 Examples
Slow down audio to 80% tempo:
atempo=0.8
To speed up audio to 300% tempo:
atempo=3
To speed up audio to 300% tempo by daisy-chaining two atempo instances:
atempo=sqrt(3),atempo=sqrt(3)
一. 命令行部分:
下面为了可以快速验证,用二倍速和二分之一倍速来验证一下效果,先通过时间长度来大概判断一下:
- 如果是二倍速,那总时长应该是原时长的一半
- 如果是二分之一倍速,那总时长应该是原时长二倍
测试时长如图:
粗略判断是符合预期的。
好了,命令行部分搞完了,接下来是给各位Ctrl+C Ctrl+V打法的大佬们贴代码部分。
二. 代码部分
因为不想贴太长的篇幅,只贴修改部分就好了:
diff --git a/doc/examples/transcoding.c b/doc/examples/transcoding.c
index e48837cbd2..8792490500 100644
--- a/doc/examples/transcoding.c
+++ b/doc/examples/transcoding.c
@@ -393,7 +393,7 @@ static int init_filters(void)
if (ifmt_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
filter_spec = "null"; /* passthrough (dummy) filter for video */
else
- filter_spec = "anull"; /* passthrough (dummy) filter for audio */
+ filter_spec = "atempo=2.0"; /* passthrough (dummy) filter for audio */
ret = init_filter(&filter_ctx[i], stream_ctx[i].dec_ctx,
stream_ctx[i].enc_ctx, filter_spec);
if (ret)
音频两倍速处理搞定。
如果想了解音频pcm级别的速度变更处理,可以参考atempo的滤镜代码,相关文件为:
libavfilter/af_atempo.c
关于音频倍速处理滤镜使用就讲到这里。
作者:悟空 公众号:流媒体技术
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。