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

时间:2015-10-28 20:36:47

标签: java ffmpeg aac

在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 个答案:

答案 0 :(得分:2)

AAC适用于"每帧"基础。框架是2048个样本,与前一帧重叠50%,使得"步骤"大小1024个样本。

某些编解码器在开始时插入一个或两个空帧。如果您的采样率是22050 Hz,则1024个采样率为0.046秒,因此您可能就是这种情况。

为什么他们插入空框架?可能是因为有些人向前看计算,或者第一帧没有先前的帧与重叠或相似。