我正在尝试使用ffmpeg从mp3获取PCM数据,但文件存储在数据库gridfs中,所以我试图使用管道为ffmpeg提供一些成功的数据,但是有一个ffmpeg处理的文件如果输入文件名作为输入正确,并且在将文件作为管道给出时不正确:(任何想法为什么?
ffmpeg -i - -f s16le -acodec pcm_s16le output.raw < testMp3s/test-corrupt.mp3
给出
ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers
built on Jun 9 2012 13:50:13 with gcc 4.7.0 20120505 (prerelease)
configuration: --prefix=/usr --enable-libmp3lame --enable-libvorbis --enable-libxvid -- enable-libx264 --enable-libvpx --enable-libtheora --enable-libgsm --enable-libspeex -- enable-postproc --enable-shared --enable-x11grab --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libschroedinger --enable-libopenjpeg --enable-librtmp --enable-libpulse --enable-libv4l2 --enable-gpl --enable-version3 --enable-runtime-cpudetect -- disable-debug --disable-static
libavutil 51. 54.100 / 51. 54.100
libavcodec 54. 23.100 / 54. 23.100
libavformat 54. 6.100 / 54. 6.100
libavdevice 54. 0.100 / 54. 0.100
libavfilter 2. 77.100 / 2. 77.100
libswscale 2. 1.100 / 2. 1.100
libswresample 0. 15.100 / 0. 15.100
libpostproc 52. 0.100 / 52. 0.100
[mp3 @ 0x16d7100] Unknown attached picture mimetype: JPG, skipping.
[mp3 @ 0x16d7100] max_analyze_duration 5000000 reached at 5015510
[mp3 @ 0x16d7100] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from 'pipe:':
Metadata:
album : FreshNewMusik.Com
encoded_by : iTunes 10.6.3
title : No Lie (Freestyle)
artist : Lil Wayne
album_artist : Lil Wayne
genre : Hip-Hop/Rap
TT3 : twitter.com/jakejarvis
date : 2012
Duration: N/A, start: 0.000000, bitrate: 320 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16, 320 kb/s
然而
ffmpeg -i testMp3s/test-corrupt.mp3 -f s16le -acodec pcm_s16le output.raw
给出
ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers
built on Jun 9 2012 13:50:13 with gcc 4.7.0 20120505 (prerelease)
configuration: --prefix=/usr --enable-libmp3lame --enable-libvorbis --enable-libxvid -- enable-libx264 --enable-libvpx --enable-libtheora --enable-libgsm --enable-libspeex --enable-postproc --enable-shared --enable-x11grab --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libschroedinger --enable-libopenjpeg --enable-librtmp --enable-libpulse --enable-libv4l2 --enable-gpl --enable-version3 --enable-runtime-cpudetect --disable-debug --disable-static
libavutil 51. 54.100 / 51. 54.100
libavcodec 54. 23.100 / 54. 23.100
libavformat 54. 6.100 / 54. 6.100
libavdevice 54. 0.100 / 54. 0.100
libavfilter 2. 77.100 / 2. 77.100
libswscale 2. 1.100 / 2. 1.100
libswresample 0. 15.100 / 0. 15.100
libpostproc 52. 0.100 / 52. 0.100
[mp3 @ 0xf33100] Unknown attached picture mimetype: JPG, skipping.
[mp3 @ 0xf33100] max_analyze_duration 5000000 reached at 5015510
[mp3 @ 0xf33100] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from 'testMp3s/test-corrupt.mp3':
Metadata:
album : FreshNewMusik.Com
encoded_by : iTunes 10.6.3
title : No Lie (Freestyle)
artist : Lil Wayne
album_artist : Lil Wayne
genre : Hip-Hop/Rap
TT3 : twitter.com/jakejarvis
date : 2012
Duration: 00:02:33.86, start: 0.000000, bitrate: 320 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16, 320 kb/s
如何获得管道的持续时间? (数据在python应用程序的内存中可用)
答案 0 :(得分:6)
[mp3 @ 0xf33100] Estimating duration from bitrate, this may be inaccurate
当给出真实文件时,ffmpeg可以使用stat获取文件的大小。持续时间是大小/比特率。但是当它获得stdio时,它无法分辨出预期的数据量。事实上,如果它正在获得一个流,甚至可能没有明确定义的持续时间。我记得,MP3可以在文件开头的id3标签中提供持续时间,这就是为什么你的某些文件显示持续时间的原因。