我尝试了以下命令从视频中提取音频:

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

有人能帮忙吗?


当前回答

似乎你正在从视频文件中提取音频,并将其降至立体声频道。 只提取音频(不重新编码):

ffmpeg.exe -i in.mp4 -vn -c:a copy out.m4a

提取音频和混音到立体声(无需重新编码):

ffmpeg.exe -i in.mp4 -vn -c:a copy -ac 2 out.m4a

要生成一个mp3文件,你需要重新编码音频:

ffmpeg.exe -i in.mp4 -vn -ac 2 out.mp3

-c(选择codecs) & -map(选择流)选项:

-c:a ->选择最佳支持的音频(转码) ->最好支持的音频(复制) -map 0:a ->所有音频从第一个(音频)输入文件(转码) -map 0:0 ->第一个输入文件的第一个流(转码) -map 1:a:0 ->第一个音频流从第2(音频)输入文件(转码) -map 1:a:1 -c:a copy ->第2个音频流从第2(音频)输入文件(复制)

其他回答

似乎你正在从视频文件中提取音频,并将其降至立体声频道。 只提取音频(不重新编码):

ffmpeg.exe -i in.mp4 -vn -c:a copy out.m4a

提取音频和混音到立体声(无需重新编码):

ffmpeg.exe -i in.mp4 -vn -c:a copy -ac 2 out.m4a

要生成一个mp3文件,你需要重新编码音频:

ffmpeg.exe -i in.mp4 -vn -ac 2 out.mp3

-c(选择codecs) & -map(选择流)选项:

-c:a ->选择最佳支持的音频(转码) ->最好支持的音频(复制) -map 0:a ->所有音频从第一个(音频)输入文件(转码) -map 0:0 ->第一个输入文件的第一个流(转码) -map 1:a:0 ->第一个音频流从第2(音频)输入文件(转码) -map 1:a:1 -c:a copy ->第2个音频流从第2(音频)输入文件(复制)

Ffmpeg -i sample。Avi将为您的文件提供音频/视频格式信息。确保配置了正确的库来解析输入流。另外,要确保文件没有损坏。

使用-b:a代替-ab,因为-ab现在已经过时了,还要确保输入的文件路径是正确的。

从视频中提取音频,我已经使用下面的命令和它的工作良好。

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

在这里,

-y -覆盖输出文件而不询问。 -i - FFmpeg从-i选项指定的任意数量的输入“文件”中读取 -vn -关闭录像功能 -ar -设置音频流编码时的采样率 -ac -设置音频通道数。 -b:a—设置音频比特率 -f - format

在GitHub上查看我完整的FFmpeg android项目示例。

要从电影文件(如AVI, MP4, MOV等)或音频文件(如WAV)中编码高质量的MP3或MP4音频,我发现最好使用-q: 0作为可变比特率,并且指定-map a来排除视频/字幕,只抓取音频是一个很好的做法:

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

如果你想从视频中提取一部分音频,使用-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选项,它将被放到末尾。 如果您想指定范围,可以使用-to选项而不是-t选项,例如45秒:00:03:05 + 45 = 00:03:50

工作的例子:

下载ffmpeg 打开命令提示符(Start > Run > CMD)或在Mac/Linux上打开终端 CD(更改目录命令)到使用ffmeg.exe的目录,如所示。 发出命令并等待输出文件(或排除任何错误)

窗户

Mac / Linux

对于寻找更简单的方法从视频文件中提取音频,同时保留原始视频文件的参数的人,您可以使用:

ffmpeg -i <video_file_name.extension> <audio_file_name.extension>

例如,运行:

ffmpeg -i screencap.mov screencap.mp3

从mov视频文件中提取mp3音频文件。