使用FFmpeg做音速处理

在做音视频处理技术的过程中,有时候会需要对音频进行速度的调整,比如调快,调慢等,而在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)

一. 命令行部分:

下面为了可以快速验证,用二倍速和二分之一倍速来验证一下效果,先通过时间长度来大概判断一下:

  1. 如果是二倍速,那总时长应该是原时长的一半
  2. 如果是二分之一倍速,那总时长应该是原时长二倍

测试时长如图:

图片

粗略判断是符合预期的。

好了,命令行部分搞完了,接下来是给各位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 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论