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项目。