gpt4 book ai didi

FFmpeg/Libav 音频解码示例

转载 作者:行者123 更新时间:2023-12-01 03:51:19 27 4
gpt4 key购买 nike

我试图通过使用代码将 MP2 文件转换为原始 PCM 来获得与 ffmpeg/avconv 相同的输出。我使用了 the tutorial included in the FFmpeg/Libav documentation 中的 audio_decode_example 函数但产出不同。

我需要将 ffmpeg/avconv 命令执行哪些步骤添加到我的程序中以获得相同的输出?

编辑:
这是 avconv -v debug -i test.mp2 test.sw 的输出:

avconv version v10_beta1-302-g606cc8a, Copyright (c) 2000-2014 the Libav developers
built on Mar 20 2014 20:28:32 with gcc 4.8 (Ubuntu/Linaro 4.8.1-10ubuntu9)
configuration:
libavutil 53. 6. 0 / 53. 6. 0
libavcodec 55. 34. 1 / 55. 34. 1
libavformat 55. 12. 0 / 55. 12. 0
libavdevice 54. 0. 0 / 54. 0. 0
libavfilter 4. 3. 0 / 4. 3. 0
libavresample 1. 2. 0 / 1. 2. 0
libswscale 2. 1. 2 / 2. 1. 2
Splitting the commandline.
Reading option '-v' ... matched as option 'v' (set libav* logging level) with argument 'debug'.
Reading option '-i' ... matched as input file with argument 'test.mp2'.
Reading option 'test1.sw' ... matched as output file.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option v (set libav* logging level) with argument debug.
Successfully parsed a group of options.
Parsing a group of options: input file test.mp2.
Successfully parsed a group of options.
Opening an input file: test.mp2.
[mp3 @ 0x27e5060] Probed with size=2048 and score=51
[mp3 @ 0x27e5060] Estimating duration from bitrate, this may be inaccurate
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, mp3, from 'test.mp2':
Duration: 00:00:04.80, start: 0.000000, bitrate: 64 kb/s
Stream #0.0, 200, 1/14112000: Audio: mp2, 48000 Hz, stereo, s16p, 64 kb/s
Successfully opened the file.
Parsing a group of options: output file test1.sw.
Successfully parsed a group of options.
Opening an output file: test1.sw.
Successfully opened the file.
Detected 2 logical cores.
[abuffer @ 0x27e5860] tb:1/48000 samplefmt:s16p samplerate: 48000 ch layout:0x3
[abuffersink @ 0x2807040] auto-inserting filter 'auto-inserted fifo 0' between the filter 'audio format for output stream 0:0' and the filter 'output stream 0:0'
[aformat @ 0x2806bc0] auto-inserting filter 'auto-inserted resampler 0' between the filter 'Parsed filter 0 anull' and the filter 'audio format for output stream 0:0'
[AVAudioResampleContext @ 0x28092a0] audio_convert: found function: s16p to s16 (C)
[AVAudioResampleContext @ 0x28092a0] audio_convert: found function: s16p to s16 (SSE2)
[resample @ 0x2808560] fmt:s16p srate:48000 cl:stereo -> fmt:s16 srate:48000 cl:stereo
Output #0, s16le, to 'test1.sw':
Metadata:
encoder : Lavf55.12.0
Stream #0.0, 0, 1/90000: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (mp2 -> pcm_s16le)
Press ctrl-c to stop encoding
Input stream #0:0 frame changed from rate:48000 fmt:s16p ch:2 chl:stereo to rate:48000 fmt:s16 ch:2 chl:stereo
Detected 2 logical cores.
[abuffer @ 0x2806e40] tb:1/48000 samplefmt:s16 samplerate: 48000 ch layout:0x3
[abuffersink @ 0x2806fa0] auto-inserting filter 'auto-inserted fifo 0' between the filter 'audio format for output stream 0:0' and the filter 'output stream 0:0'
No more output streams to write to, finishing.
size= 900kB time=4.80 bitrate=1536.0kbits/s
video:0kB audio:0kB global headers:0kB muxing overhead 0.000000%

最佳答案

我有同样的问题。似乎 libav mp2 解码默认输出为 S16P 格式(平面),这在支持原始输入的各种音频编辑应用程序中并不常见(例如,大胆)。我通过将 AVCodecContext 中的 request_sample_fmt 指定为 AV_SAMPLE_FMT_S16 解决了我的问题。因此,不需要额外的软件重采样。

在函数 audio_decode_example 中:

...
c = avcodec_alloc_context3(codec);
if (!c) {
fprintf(stderr, "Could not allocate audio codec context\n");
exit(1);
}
c->request_sample_fmt = AV_SAMPLE_FMT_S16;
...

关于FFmpeg/Libav 音频解码示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22476217/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com