首页 文章

ffmpeg从视频中提取音频

提问于
浏览
150

我尝试了以下命令从视频中提取音频:
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 回答

  • 276

    要在不重新编码的情况下提取音频流:

    ffmpeg -i input-video.avi -vn -acodec copy output-audio.aac
    
    • -vn 不是视频 .

    • -acodec copy 表示使用已经存在的相同音频流 .

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

  • 2

    要从AVI编码高质量MP3,最好使用 -q:a 获取可变比特率:

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

    如果您想 extract a portion of audio from a video 使用 -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 选项,它将结束 .

  • 11

    命令行是正确的,适用于有效的视频文件 . 我会确保你安装了正确的库来使用mp3,用另一个音频编解码器安装lame o probe .

    平时

    ffmpeg -formats
    

    要么

    ffmpeg -codecs
    

    会提供足够的信息,以便您了解更多信息 .

  • 6

    ffmpeg -i sample.avi 将为您提供文件的音频/视频格式信息 . 确保配置了正确的库以解析输入流 . 此外,请确保该文件没有损坏 .

  • 1

    编码mp3音频ffmpeg.org显示以下示例:

    ffmpeg -i input.wav -codec:a libmp3lame -qscale:a 2 output.mp3
    

    我只是通过用视频文件名替换 input.wav 从视频中提取音频 . 2 表示190 kb / sec . 您可以在上面的链接中查看其他质量级别 .

  • 0

    只是一个猜测:

    -ab 192
    

    应该

    -ab 192k
    

    似乎这可能是一个问题,但也许ffmpeg足够聪明,可以纠正它 .

  • 2

    如果包含在avi中的音频不是以mp3格式开头,则可能需要指定 -acodec mp3 作为附加参数 . 或者你的mp3编解码器是什么(在Linux系统上它可能是 -acodec libmp3lame ) . 您也可以获得与平台无关的相同效果,而是将 -f mp3 指定为"force"格式为mp3,尽管并非所有版本的ffmpeg仍然支持该切换 . 你的旅费可能会改变 .

  • 84

    使用 -b:a 而不是 -ab ,因为 -ab 现已过时 . 请确保您的输入文件路径正确无误 .

    要从视频中提取音频,我已使用下面的命令,并且其工作正常 .

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

    这里,

    -y

    无需询问即可覆盖输出文件 .

    -一世

    ffmpeg从-i选项指定的任意数量的输入“文件”中读取

    -vn

    禁用视频录制

    -ar

    如果编码,则设置音频流的采样率

    -ac

    设置音频通道的数量 .

    -b:一

    设置音频比特率

    -F

    格式

    在github上查看我的完整示例ffmpeg android项目的this .

  • 9

    要在不进行转换的情况下进行提取,我使用上下文菜单条目 - 在Linux中作为文件管理器自定义操作 - 运行以下内容(在检查了视频包含的音频类型之后;包含 ogg 音频的视频示例):

    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 并不能保证始终是音频 . 使用 -map 0:a 而不是 -map 0:1 将避免歧义 . ”

  • -2

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

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

    例如,运行:

    ffmpeg -i screencap.mov screencap.mp3
    

    mov 视频文件中提取 mp3 音频文件 .

相关问题