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

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

有人能帮忙吗?


当前回答

从几个视频剪辑创建一个音频书

首先,从一堆h264文件中提取音频(如' .m4a):

for f in *.mp4; do ffmpeg -i "$f" -vn -c:a copy "$(basename "$f" .mp4).m4a"; done

vn output选项禁用视频输出(自动选择或映射任何视频流)。要完全手动控制,请参阅-map选项。

可选

如果有一个40秒的介绍,你可以用-ss参数跳过它:

for f in *.m4a; do ffmpeg -i "$f" -ss 00:00:40  -c copy crop/"$f"; done

将所有文件合并为一个:

ffmpeg -f concat -safe 0 -i <(for f in ./*.m4a; do echo "file '$PWD/$f'"; done) -c copy output.m4a

其他回答

提取音频流,不需要重新编码。

ffmpeg -i input-video.avi -vn -acodec copy output-audio.aac

-vn是no video。 -acodec copy表示使用已经存在的相同音频流。

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

如果封装到avi中的音频一开始就不是mp3格式,您可能需要指定-acodec mp3作为附加参数。或者不管你的mp3编解码器是什么(在Linux系统上可能是-acodec libmp3lame)。您还可以通过指定-f mp3来“强制”将格式转换为mp3,从而获得与平台无关的相同效果,尽管不是所有版本的ffmpeg仍然支持这种切换。你的里程可能会有所不同。

命令行是正确的,工作在一个有效的视频文件。我会确保你已经安装了正确的库工作与mp3,安装蹩脚o探头与另一个音频编解码器。

通常

ffmpeg -formats

or

ffmpeg -codecs

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

要从电影文件(如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音频文件。