ffmpeg从video中提取audio

我尝试了以下命令从video中提取audio:
ffmpeg -i Sample.avi -vn -ar 44100 -ac 2 -ab 192k -f mp3 Sample.mp3

但我得到的输出为

 libavutil 50.15. 1 / 50.15. 1 libavcodec 52.72. 2 / 52.72. 2 libavformat 52.64. 2 / 52.64. 2 libavdevice 52. 2. 0 / 52. 2. 0 libavfilter 1.19. 0 / 1.19. 0 libswscale 0.11. 0 / 0.11. 0 libpostproc 51. 2. 0 / 51. 2. 0 SamplE.avi: Invalid data found when processing input 

任何人都可以帮忙吗?

如果你只是想不经过重新编码提取audiostream只是做:

 ffmpeg -i input-video.avi -vn -acodec copy output-audio.aac 
  • -vn不是video。
  • -acodec copy说使用已经在那里相同的audiostream。

阅读输出以查看它是什么编解码器,以设置正确的文件扩展名。

使用-q:a编码来自AVI的高质量MP3, 获得可变比特率。

 ffmpeg -i sample.avi -q:a 0 -map a sample.mp3 

如果要从video中提取部分audio,请使用-ss选项指定开始时间戳,使用-t选项指定编码时间,例如从3分钟到5秒钟,持续45秒

 ffmpeg -i sample.avi -ss 00:03:05 -t 00:00:45.0 -q:a 0 -map a sample.mp3 
  • 时间戳必须采用HH:MM:SS.xxx格式或以秒为单位。

  • 如果你不指定-t选项,它将会结束。

命令行是正确的,并在有效的video文件上工作。 我会确保你已经安装了正确的库来处理MP3,安装lame o探头与另一个audio编解码器。

平时

 ffmpeg -formats 

要么

 ffmpeg -codecs 

会提供足够的信息,让你知道更多。

ffmpeg -i sample.avi将为您提供文件的audio/video格式信息。 确保你有正确的库configuration来parsinginputstream。 另外,确保文件没有损坏。

只是一个猜测:

 -ab 192 

应该

 -ab 192k 

似乎这可能是一个问题,但也许ffmpeg是足够聪明的纠正它。

如果包装到avi中的audio不是以mp3格式开始的,则可能需要指定-acodec mp3作为附加参数。 或者不pipe你的mp3编解码器是什么(在Linux系统上它可能是-acodec libmp3lame )。 你也可以得到相同的效果,平台不可知的,而不是指定-f mp3来强制格式为mp3,尽pipe不是所有版本的ffmpeg仍然支持该开关。 你的旅费可能会改变。

编码mp3audioffmpeg.org显示以下示例:

 ffmpeg -i input.wav -codec:a libmp3lame -qscale:a 2 output.mp3 

我只是通过将video文件名replace为input.wav从video中提取audio。 2意味着190 kb /秒。 您可以在上面的链接中看到其他质量级别。

使用-b:a而不是-ab as -ab现在已经过时。请确保您的input文件path是正确的。

为了从video中提取audio,我已经使用了下面的命令,它的工作正常。

 String[] complexCommand = {"-y", "-i", inputFileAbsolutePath, "-vn", "-ar", "44100", "-ac", "2", "-b:a", "256k", "-f", "mp3", outputFileAbsolutePath}; 

这里,

-y

覆盖输出文件而不询问。

-一世

ffmpeg从-i选项指定的任意数量的input“文件”中读取数据

-vn

禁用video录制

-ar

设置audiostream的采样率(如果编码的话)

-ac

设置audio通道的数量。

-b:一

设置audio比特率

-F

格式

看看这个在github上完整的示例ffmpeg android项目。