有没有办法-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 图形用户界面(如果您想将其移植到某种脚本)