当前位置: 首页 > 知识库问答 >
问题:

FFmpeg向转码的AAC文件添加0.05秒的静音?

孔海超
2023-03-14

在Java中,我使用FFmpeg将WAV文件转换为AAC,函数如下:

-i input.wav -ac 1 -ab 64000 -ar 22050 output.aac

当我在Audacity中打开这两个文件时,我可以清楚地看到AAC文件的长度增加了0.05秒,开头增加了0.05秒的沉默。

这是一个问题,当我试图将这个AAC文件与视频文件多路复用时,音频无法同步。

是否有某种参数来防止这种行为或另一种方法来解决这个问题?

编辑-运行函数时的控制台输出:

10-28 17:47:10.845: I/System.out(14784): FFmpeg: Running the function: -i "input.wav" -ac 1 -ab 64000 -ar 22050 "output.aac"
10-28 17:47:10.845: I/System.out(14784): FFmpeg function: onStart()
10-28 17:47:10.865: D/FFmpeg(14784): Running publishing updates method
10-28 17:47:10.865: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.875: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.875: I/System.out(14784): ffmpeg version n2.4.2 Copyright (c) 2000-2014 the FFmpeg developers
10-28 17:47:10.875: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.875: I/System.out(14784):   built on Oct  7 2014 15:08:46 with gcc 4.8 (GCC)
10-28 17:47:10.875: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.875: I/System.out(14784):   configuration: --target-os=linux --cross-prefix=/home/sb/Source-Code/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/home/sb/Source-Code/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-libass --enable-libfreetype --enable-libfribidi --enable-fontconfig --enable-pthreads --disable-debug --disable-ffserver --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config=/home/sb/Source-Code/ffmpeg-android/ffmpeg-pkg-config --prefix=/home/sb/Source-Code/ffmpeg-android/build/armeabi-v7a-neon --extra-cflags='-I/home/sb/Source-Code/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all -mfpu=neon' --extra-ldflags='-L/home/sb/Source-Code/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs='-lpng -lexpat -lm' --extra-cxxflags=
10-28 17:47:10.875: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.875: I/System.out(14784):   libavutil      54.  7.100 / 54.  7.100
10-28 17:47:10.875: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.875: I/System.out(14784):   libavcodec     56.  1.100 / 56.  1.100
10-28 17:47:10.875: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.875: I/System.out(14784):   libavformat    56.  4.101 / 56.  4.101
10-28 17:47:10.880: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.880: I/System.out(14784):   libavdevice    56.  0.100 / 56.  0.100
10-28 17:47:10.880: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.880: I/System.out(14784):   libavfilter     5.  1.100 /  5.  1.100
10-28 17:47:10.880: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.880: I/System.out(14784):   libswscale      3.  0.100 /  3.  0.100
10-28 17:47:10.880: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.880: I/System.out(14784):   libswresample   1.  1.100 /  1.  1.100
10-28 17:47:10.880: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.880: I/System.out(14784):   libpostproc    53.  0.100 / 53.  0.100
10-28 17:47:10.895: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.895: I/System.out(14784): Guessed Channel Layout for  Input Stream #0.0 : mono
10-28 17:47:10.895: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.895: I/System.out(14784): Input #0, wav, from 'input.wav':
10-28 17:47:10.895: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.900: I/System.out(14784):   Duration: 00:00:02.50, bitrate: 352 kb/s
10-28 17:47:10.900: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.900: I/System.out(14784):     Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 22050 Hz, 1 channels, s16, 352 kb/s
10-28 17:47:10.935: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.935: I/System.out(14784): Output #0, adts, to 'output.aac':
10-28 17:47:10.935: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.935: I/System.out(14784):   Metadata:
10-28 17:47:10.935: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.935: I/System.out(14784):     encoder         : Lavf56.4.101
10-28 17:47:10.935: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.935: I/System.out(14784):     Stream #0:0: Audio: aac, 22050 Hz, mono, fltp, 64 kb/s
10-28 17:47:10.935: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.935: I/System.out(14784):     Metadata:
10-28 17:47:10.935: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.935: I/System.out(14784):       encoder         : Lavc56.1.100 aac
10-28 17:47:10.940: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.940: I/System.out(14784): Stream mapping:
10-28 17:47:10.940: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.940: I/System.out(14784):   Stream #0:0 -> #0:0 (pcm_s16le (native) -> aac (native))
10-28 17:47:10.940: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:10.940: I/System.out(14784): Press [q] to stop, [?] for help
10-28 17:47:11.395: D/dalvikvm(14784): JIT unchain all for threadid=16
10-28 17:47:11.420: D/dalvikvm(14784): GC_FOR_ALLOC freed 4698K, 40% free 7190K/11964K, paused 271ms, total 272ms
10-28 17:47:11.420: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:11.420: I/System.out(14784): size=      12kB time=00:00:02.50 bitrate=  37.7kbits/s    
10-28 17:47:11.455: I/System.out(14784): FFmpeg function: onProgress()...
10-28 17:47:11.455: I/System.out(14784): video:0kB audio:11kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 3.363914%
10-28 17:47:11.470: I/System.out(14784): FFmpeg function: onSuccess(), message:
10-28 17:47:11.470: I/System.out(14784): ffmpeg version n2.4.2 Copyright (c) 2000-2014 the FFmpeg developers
10-28 17:47:11.470: I/System.out(14784):   built on Oct  7 2014 15:08:46 with gcc 4.8 (GCC)
10-28 17:47:11.470: I/System.out(14784):   configuration: --target-os=linux --cross-prefix=/home/sb/Source-Code/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/home/sb/Source-Code/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-libass --enable-libfreetype --enable-libfribidi --enable-fontconfig --enable-pthreads --disable-debug --disable-ffserver --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config=/home/sb/Source-Code/ffmpeg-android/ffmpeg-pkg-config --prefix=/home/sb/Source-Code/ffmpeg-android/build/armeabi-v7a-neon --extra-cflags='-I/home/sb/Source-Code/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all -mfpu=neon' --extra-ldflags='-L/home/sb/Source-Code/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs='-lpng -lexpat -lm' --extra-cxxflags=
10-28 17:47:11.470: I/System.out(14784):   libavutil      54.  7.100 / 54.  7.100
10-28 17:47:11.470: I/System.out(14784):   libavcodec     56.  1.100 / 56.  1.100
10-28 17:47:11.470: I/System.out(14784):   libavformat    56.  4.101 / 56.  4.101
10-28 17:47:11.470: I/System.out(14784):   libavdevice    56.  0.100 / 56.  0.100
10-28 17:47:11.470: I/System.out(14784):   libavfilter     5.  1.100 /  5.  1.100
10-28 17:47:11.470: I/System.out(14784):   libswscale      3.  0.100 /  3.  0.100
10-28 17:47:11.470: I/System.out(14784):   libswresample   1.  1.100 /  1.  1.100
10-28 17:47:11.470: I/System.out(14784):   libpostproc    53.  0.100 / 53.  0.100
10-28 17:47:11.470: I/System.out(14784): Guessed Channel Layout for  Input Stream #0.0 : mono
10-28 17:47:11.470: I/System.out(14784): Input #0, wav, from 'input.wav':
10-28 17:47:11.470: I/System.out(14784):   Duration: 00:00:02.50, bitrate: 352 kb/s
10-28 17:47:11.475: I/System.out(14784):     Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 22050 Hz, 1 channels, s16, 352 kb/s
10-28 17:47:11.475: I/System.out(14784): Output #0, adts, to 'output.aac':
10-28 17:47:11.475: I/System.out(14784):   Metadata:
10-28 17:47:11.475: I/System.out(14784):     encoder         : Lavf56.4.101
10-28 17:47:11.475: I/System.out(14784):     Stream #0:0: Audio: aac, 22050 Hz, mono, fltp, 64 kb/s
10-28 17:47:11.475: I/System.out(14784):     Metadata:
10-28 17:47:11.475: I/System.out(14784):       encoder         : Lavc56.1.100 aac
10-28 17:47:11.475: I/System.out(14784): Stream mapping:
10-28 17:47:11.475: I/System.out(14784):   Stream #0:0 -> #0:0 (pcm_s16le (native) -> aac (native))
10-28 17:47:11.475: I/System.out(14784): Press [q] to stop, [?] for help
10-28 17:47:11.475: I/System.out(14784): size=      12kB time=00:00:02.50 bitrate=  37.7kbits/s    
10-28 17:47:11.475: I/System.out(14784): video:0kB audio:11kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 3.363914%
10-28 17:47:11.475: I/System.out(14784): FFmpeg function: onFinish()

共有1个答案

广昊昊
2023-03-14

AAC以“每帧”为基础工作。该帧为2048个样本,与前一帧重叠50%,使“步长”大小为1024个样本。

有些编解码器会在一次插入一到两个空帧。如果你的采样率是22050赫兹,那么1024个样本的时间为0.046秒,所以你可能就是这样。

为什么要插入空框?可能是因为一些前瞻性计算,或者第一帧没有要重叠的前一帧,或者类似的。

 类似资料:
  • 我在使用FFmpeg进行acc编码时遇到问题。我有带aac音频的au mp4文件。我试图用ffmpeg复制音频。在源mp4文件中,第一个音频噪声出现在0.30秒。转换后使用,生成的文件错误,第一个音频噪音出现在0.32秒。文件的持续时间也不一样。 当我强制编码器libfaac,它的工作,但文件太大。 那么,为什么使用默认编码器(aac、libfdk_aac)时它不工作呢?请注意,当我从audaci

  • 我有两个视频文件,具有以下流: 文件1: 文件2: 两个文件都有完全相同的视频内容,但第一个视频有德语音轨,第二个视频有英语音轨。 如何从德语视频文件中提取音轨并将其添加到英语视频文件中,而不丢失英语字幕,并能够在媒体播放器中在这些音轨之间进行选择? 我对此进行了搜索,我找到了类似问题的多个答案,但都不起作用:有些只包含一个音轨,有些同时播放两个音轨。 我不确定这个问题是否应该在Super Use

  • 我正在尝试解码ADTS容器中的AAC音频流,该音频流来自外部硬件H264编码器。 我分析了ADT,它告诉我我有一个2通道,44100 AAC主配置文件框架。我为ffmpeg解码器设置了额外的数据字节,并成功解码了帧?详情如下: (伪c代码) 设置解码器: 设置额外的数据字节: 然后解码帧: 解码帧: 现在,据我所知,32位原始格式的每个帧每个采样将有4个字节,每个通道将被交错(因此每4个字节是交替

  • 我正在尝试捕获和编码音频数据,我正在使用FFMPEG AAC编码音频,为了捕获PCM数据,我使用ALSA,捕获部分在我的情况下工作,但是AAC编码器不工作。 我试图播放test.aac文件使用 ffplaytest.aac 但它包含很多噪音。 附加aac编码器代码: 这里,请忽略DUMP_TEST标志,我已经启用了。 有人能告诉我什么是问题吗? 谢谢,哈希尔

  • 我正尝试从FFMPEG向输出文件添加时间戳,但出现此错误。 我犯错的地方? 感谢所有回复:)

  • 动态的 web 应用也需要静态文件,一般是 CSS 和 JavaScript 文件。理想情况下你的 服务器已经配置好了为你的提供静态文件的服务。在开发过程中, Blade 也能做好这个工作。我们在 resources 目录下创建一个名为 static 的文件夹存储静态资源文件,静态文件位于 应用的 /static 中。 Blade 默认设置了 static、assets、webjars、uploa