我尝试了以下命令从视频中提取音频:
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
有人可以帮忙吗?
答案 0 :(得分:317)
提取音频流而不重新编码:
ffmpeg -i input-video.avi -vn -acodec copy output-audio.aac
-vn
不是视频。 -acodec copy
表示使用已经存在的相同音频流。 读取输出以查看它是什么编解码器,设置正确的文件扩展名。
答案 1 :(得分:89)
要从AVI编码高质量MP3,最好使用 -q: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 选项,则会结束。
答案 2 :(得分:15)
似乎您正在从视频文件中提取音频并缩混到立体声通道。
仅提取音频(无需重新编码):
ffmpeg.exe -i in.mp4 -vn -c:a copy out.m4a
提取音频和downmix to stereo(无需重新编码):
ffmpeg.exe -i in.mp4 -vn -c:a copy -ac 2 out.m4a
要生成 mp3 文件,您需要重新编码音频:
ffmpeg.exe -i in.mp4 -vn -ac 2 out.mp3
答案 3 :(得分:14)
这会将所有音频放入一个文件中
ffmpeg -i input.mov -map 0:a -c copy output.mov
-map 0:a
仅选择所有音频流。视频和字幕将被排除。-c copy
启用stream copy模式。这将复制音频,并且不会重新编码。如果您想重新编码音频,请删除-c copy
。提取音频流#4的示例:
ffmpeg -i input.mkv -map 0:a:3 -c copy output.m4a
-map 0:a:3
仅选择音频流#4(ffmpeg
从0开始计数。)-c copy
启用stream copy模式。这将复制音频,并且不会重新编码。如果您想重新编码音频,请删除-c copy
。类似于以上示例,但没有-c copy
。各种示例:
ffmpeg -i input.mp4 -map 0:a output.mp3
ffmpeg -i input.mkv -map 0:a output.m4a
ffmpeg -i input.avi -map 0:a -c:a aac output.mka
ffmpeg -i input.mp4 output.wav
在此示例中,此输入具有4个音频流。每个音频流将作为单个文件输出。
ffmpeg -i input.mov -map 0:a:0 output0.wav -map 0:a:1 output1.wav -map 0:a:2 output2.wav -map 0:a:3 output3.wav
(可选)在每个输出文件名之前添加-c copy
,以启用stream copy模式。
使用channelsplit filter。从立体声输入获取前右(FR)通道的示例:
ffmpeg -i stereo.wav -filter_complex "[0:a]channelsplit=channel_layout=stereo:channels=FR[right]" -map "[right]" front_right.wav
channel_layout
是输入的通道布局。不会自动检测到它,因此您必须提供布局名称。channels
列出了您要提取的频道。ffmpeg -layouts
)和通道名称(针对channel_layout
),请参见channels
。-c copy
),因此必须对音频进行重新编码。-map
和-vn
有什么区别? ffmpeg
具有默认的stream selection行为,它将为每种流类型选择1个流(1个视频,1个音频,1个字幕,1个数据)。
-vn
是旧的旧选项。它从默认的流选择行为中排除视频。因此,除非使用-an
,-sn
或-dn
来告知不要,否则音频,字幕和数据仍会自动选择。
-map
更复杂,但更灵活,更有用。 -map
禁用默认的流选择行为,并且ffmpeg
仅包含您使用-map
选项告诉它的内容。 -map
也可以用于排除某些流或流类型。例如,-map 0 -map -0:v
将包括所有流除外所有视频。
有关更多示例,请参见FFmpeg Wiki: Map。
MP3仅支持1个音频流。该错误表示您正在尝试将多个音频流放入MP3。这也可能意味着您正在尝试将非MP3音频放入MP3。
类似于以上。
您正在尝试将音频格式放入不支持的音频输出中,例如将PCM(WAV)插入MP4。
删除-c copy
,选择其他输出格式(更改文件扩展名),或手动选择编码器(例如-c:a aac
)。
请参见comparison of container formats。
这是一个无用的通用错误。实际的信息错误应在此一般错误消息之前。
答案 4 :(得分:11)
命令行是正确的,适用于有效的视频文件。我会确保你安装了正确的库来使用mp3,用另一个音频编解码器安装lame o probe。
一般
ffmpeg -formats
或
ffmpeg -codecs
会提供足够的信息,以便您了解更多信息。
答案 5 :(得分:10)
ffmpeg -i sample.avi
会为您提供文件的音频/视频格式信息。确保配置了正确的库以解析输入流。此外,请确保该文件没有损坏。
答案 6 :(得分:6)
编码mp3音频ffmpeg.org显示以下示例:
ffmpeg -i input.wav -codec:a libmp3lame -qscale:a 2 output.mp3
我只是将input.wav
替换为视频文件名,从视频中提取音频。 2
表示190 kb /秒。您可以在上面的链接中查看其他质量级别。
答案 7 :(得分:2)
只是一个猜测:
-ab 192
应该是
-ab 192k
似乎这可能是一个问题,但也许ffmpeg足够聪明来纠正它。
答案 8 :(得分:2)
如果包含在avi中的音频不是mp3格式,您可能需要指定-acodec mp3
作为附加参数。或者你的mp3编解码器是什么(在Linux系统上它可能是-acodec libmp3lame
)。您也可以通过指定-f mp3
将“格式”强制为mp3来获得与平台无关的相同效果,尽管并非所有版本的ffmpeg仍然支持该切换。你的里程可能会变化。
答案 9 :(得分:1)
使用-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:一
设置音频比特率
-f
格式
在github上查看this我的完整示例ffmpeg android项目。
答案 10 :(得分:1)
要在不进行转换的情况下提取,我使用上下文菜单条目 - 在Linux中作为文件管理器自定义操作 - 运行以下内容(在检查了视频包含的音频类型之后;包含ogg
音频的视频示例):< / p>
bash -c 'ffmpeg -i "$0" -map 0:a -c:a copy "${0%%.*}".ogg' %f
基于ffmpeg命令ffmpeg -i INPUT -map 0:a -c:a copy OUTPUT
。
我已经毫无问题地使用了-map 0:1
,但正如@LordNeckbeard在评论中所述,“流0:1
并不能保证始终是音频。使用{{1}而不是-map 0:a
将避免歧义。“
答案 11 :(得分:0)
这就是我刚刚使用的内容:
ffmpeg -i my.mkv -map 0:3 -vn -b:a 320k my.mp3
选项说明:
-map 0:3
表示我想要视频文件中的第三流。将N放在此处-视频文件通常具有多个音频流;您可以忽略它或使用-map 0:a
来获取默认音频流。运行ffprobe my.mkv
,查看视频文件有哪些流。答案 12 :(得分:0)
这就是我刚刚使用的内容:
ffmpeg -i input.mkv -ss 01:06:57 -to 01:21:07 -c:v copy -c:a copy output.mp4
答案 13 :(得分:-1)
对于正在寻找从视频文件中提取音频同时保留原始视频文件参数的更简单方法的人们,您可以使用:
ffmpeg -i <video_file_name.extension> <audio_file_name.extension>
例如,运行:
ffmpeg -i screencap.mov screencap.mp3
从mp3
视频文件中提取mov
音频文件。