我尝试了以下命令从视频中提取音频: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
有人可以帮忙吗?
10 回答
要在不重新编码的情况下提取音频流:
-vn
不是视频 .-acodec copy
表示使用已经存在的相同音频流 .读取输出以查看它是什么编解码器,以设置正确的文件扩展名 .
要从AVI编码高质量MP3,最好使用 -q:a 获取可变比特率:
如果您想 extract a portion of audio from a video 使用 -ss 选项指定开始时间戳,使用 -t 选项指定编码持续时间,例如从3分钟和5秒进入45秒:
时间戳需要采用HH:MM:SS.xxx格式或以秒为单位 .
如果未指定 -t 选项,它将结束 .
命令行是正确的,适用于有效的视频文件 . 我会确保你安装了正确的库来使用mp3,用另一个音频编解码器安装lame o probe .
平时
要么
会提供足够的信息,以便您了解更多信息 .
ffmpeg -i sample.avi
将为您提供文件的音频/视频格式信息 . 确保配置了正确的库以解析输入流 . 此外,请确保该文件没有损坏 .编码mp3音频ffmpeg.org显示以下示例:
我只是通过用视频文件名替换
input.wav
从视频中提取音频 .2
表示190 kb / sec . 您可以在上面的链接中查看其他质量级别 .只是一个猜测:
应该
似乎这可能是一个问题,但也许ffmpeg足够聪明,可以纠正它 .
如果包含在avi中的音频不是以mp3格式开头,则可能需要指定
-acodec mp3
作为附加参数 . 或者你的mp3编解码器是什么(在Linux系统上它可能是-acodec libmp3lame
) . 您也可以获得与平台无关的相同效果,而是将-f mp3
指定为"force"格式为mp3,尽管并非所有版本的ffmpeg仍然支持该切换 . 你的旅费可能会改变 .使用
-b:a
而不是-ab
,因为-ab
现已过时 . 请确保您的输入文件路径正确无误 .要从视频中提取音频,我已使用下面的命令,并且其工作正常 .
这里,
-y
无需询问即可覆盖输出文件 .
-一世
ffmpeg从-i选项指定的任意数量的输入“文件”中读取
-vn
禁用视频录制
-ar
如果编码,则设置音频流的采样率
-ac
设置音频通道的数量 .
-b:一
设置音频比特率
-F
格式
在github上查看我的完整示例ffmpeg android项目的this .
要在不进行转换的情况下进行提取,我使用上下文菜单条目 - 在Linux中作为文件管理器自定义操作 - 运行以下内容(在检查了视频包含的音频类型之后;包含
ogg
音频的视频示例):它基于ffmpeg命令
ffmpeg -i INPUT -map 0:a -c:a copy OUTPUT
.我已经在没有问题的情况下使用了
-map 0:1
,但正如@LordNeckbeard在评论中所说的那样,“流0:1
并不能保证始终是音频 . 使用-map 0:a
而不是-map 0:1
将避免歧义 . ”对于寻找更简单的方法从视频文件中提取音频同时保留原始视频文件参数的人,您可以使用:
例如,运行:
从
mov
视频文件中提取mp3
音频文件 .