使用 ffmpeg 从容器中提取音频

使用 ffmpeg 从容器中提取音频

有没有办法-acodec copy使用-vn

  • 从容器中提取音频流,例如 mp4
  • 没有事先了解音频编解码器
  • 并将其保存为具有适当扩展名的音频文件

答案1

这在 ffmpeg 中不是一个简单的选项,因为您需要一种方法来决定使用什么容器进行输出。

如果您确定了每个编解码器使用的文件扩展名,并使用该扩展名命名文件,ffmpeg 会将输出文件写入正确的容器中。我能想到的最简单的方法是使用 Python 2 脚本:

import re
import subprocess
import sys

EXTENSIONS_BY_CODEC = {'mp3': '.mp3', 'aac': '.m4a'}
# Add more codecs as desired

_, infile, outfile = sys.argv
_, detect_data = subprocess.Popen(('ffmpeg', '-i', infile),
                                  stderr=subprocess.PIPE).communicate()
codec = re.search(r'Audio: ([^,]+),', detect_data).group(1)
if codec in EXTENSIONS_BY_CODEC:
    sys.exit(subprocess.call(('ffmpeg', '-i', infile, '-acodec', 'copy', '-vn',
                              outfile + EXTENSIONS_BY_CODEC[codec])))
else:
    print >>sys.stderr, 'Extension not found for codec:', codec
    sys.exit(2)

答案2

看一下 handbrake,带有命令行(和命令)输出的 ffmpeg 图形用户界面(如果您想将其移植到某种脚本)

相关内容