我正在尝试制作一个小批处理文件,在将视频拖到该文件上时提取所有音频流。
ffmpeg.exe -i "%1" -map 0:a? -c:a copy "%1~extracted.aac"
但这似乎会覆盖它找到的每个音频流的同一个文件。
我不想指定音轨的数量,因为它可能会有所不同。
在此先感谢您的帮助!
答案1
没有直接的方法可以做到这一点。
有一种略显繁琐的解决方法,它依赖于 tee 复用器以及对您可能遇到的最大音频流数量的猜测。假设是 4。
因此,命令是
ffmpeg -i in.mp4 -c copy -map 0:a?
-f tee
"[select='a\:0':onfail=ignore]in-0.aac|[select='a\:1':onfail=ignore]in-1.aac|
[select='a\:2':onfail=ignore]in-2.aac|[select='a\:3':onfail=ignore]in-3.aac"
所有四个文件都会被创建,但如果大小为零,则表示流不存在。因此,一旦删除所有大小为零的输出,您就会获得所有提取的流。FFmpeg 不会自动选择输出格式,因此流必须是 AAC。使用最新的 ffmpeg 版本 4.0+