查看: 15472|回复: 10
上一主题 下一主题 跳转到指定楼层

嗯,有办法通过FFMPEG或者AVS选择音轨么?

162

主题

256

存在感

134

活跃日
 4 

SOS团一星级★

发帖: 739
SOS币: 3791
注册: 2009-09-23
访问: 2013-11-18

楼主
发表于 2011/03/07 | 编辑

猜你喜欢: mp4, ffmpeg, ffmpeg 选择音轨


MMG我知道可以,并且图形界面易懂是个简单可行的方案。可是我希望精简点,手头上的工具能解决的话,最好还是不要去再找个MMG来了。

25

主题

122

存在感

271

活跃日
帅哥离线 zj262144
 4 

SOS团一星级★

1楼
发表于 2011/03/07 | 编辑
你具体是要做什么?

ffmpeg应该可以用-track <int>,不过我没用过

另direct264里面的dshow2wav和jeeb版的x264也都可以选择音轨

162

主题

256

存在感

134

活跃日
 4 

SOS团一星级★

2楼
发表于 2011/03/07 | 编辑
也不是什么特别的要求啊。只是比如说一些双语的视频,我不想用默认的语种,不知道怎么选择另外的那条音轨。

direct264里面要怎么操作呢?

25

主题

122

存在感

271

活跃日
帅哥离线 zj262144
 4 

SOS团一星级★

3楼
发表于 2011/03/07 | 编辑
我想你应该不需要重编码,撤回1楼的话

如果就是播放的话
使用Haali分离器就能很好解决

如果是指重封装的话
用mmg就行了吧,ffmpeg对多音轨视频处理并不怎么好

162

主题

256

存在感

134

活跃日
 4 

SOS团一星级★

4楼
发表于 2011/03/07 | 编辑
情况其实是这样的,素材导入到非编,需要封装成MP4格式,直接MKV的话是不支持的。而MKV里头的默认音轨不是我想要的那个,而平时都是用FFMEPG在封装的,所以才会提出这个问题来。

25

主题

122

存在感

271

活跃日
帅哥离线 zj262144
 4 

SOS团一星级★

5楼
发表于 2011/03/07 | 编辑
你早这么说啊。。。

ffmpeg -i <input.mkv> -map 0:<trackID> <output.wav>
可以把音轨提出来,但mp4只支持alac无损音频,不支持wav,我也试了转avi/flv也有不同程度的问题(如果mkv是AVC+48kHz的AAC)
貌似ffmpeg没法指定轨道直接提取媒体流

但用mkvextract+ffmpeg可以实现

一个示例
CODE:
CD /D "%~dp0"

mkvextract tracks "%~1" 2:"%~dpn1.aac"
ffmpeg -i "%~1" -vcodec copy -i "%~dpn1.aac" -acodec copy -y "%~dpn1_.mp4"

pause

mkvextract行的2代表TrackID=2,这个可以从mediainfo看到;后缀名就自行更改了


[ 此贴被upyzl在2011-03-07 18:26重新编辑 ]

162

主题

256

存在感

134

活跃日
 4 

SOS团一星级★

6楼
发表于 2011/03/07 | 编辑
查资料的时候看到这里的文章,可是我没看懂。他这个利用FFMPEG的方法可行么?
http://willzh.javaeye.com/blog/465633

25

主题

122

存在感

271

活跃日
帅哥离线 zj262144
 4 

SOS团一星级★

7楼
发表于 2011/03/07 | 编辑
Re 6L

这不就是我在5L前半说的

如果只想用ffmpeg可以先-vcodec copy弄出视频流,再那样弄出音频流(wav),最后导入
但注意如果输出的wav大于4GB,会出问题

31

主题

125

存在感

123

活跃日
 4 

SOS团一星级★

8楼
发表于 2011/03/09 | 编辑
1.avs很简单,使用haali分离器,因为haali运行时会在系统栏有图标,用来选音轨。。不过如果你是为了封装的话,用avs也帮不上忙。。

2.ffmpeg的-map就是用来选track的,
比如一个文件,有多个轨,那么用 ffmpeg -i 文件.mkv 来查看的话,他会把几个轨按顺序显示出来,
比如stream 0.0是视频,stream 0.1是什么音频,stream 0.2是什么音频,诸如此类。
你想要挑出其中的0.0轨和0.2轨,就用
ffmpeg -i 文件.mkv -map 0:0 -map 0:2 -acodec copy -vcodec copy 输出.mkv

如果是要两个文件混合,也可以先用ffmpeg -i 文件一.mkv -i 文件二.mkv 查看顺序
然后 ffmpeg -i 文件一.mkv -i 文件二.mkv -map 0:0 -map 1:1 -acodec copy -vcodec copy 输出.mkv 这样。0:0就是文件一的第一个轨,1:1就是文件二的第二个轨。以此类推。

但ffmpeg 对mkv支持还是不太好,有些源文件就会出现“Number of stream maps must match number of output streams”而拒绝封装的情况,而其实参数较可以封装的文件并没有变化。。。无法理解他凭什么报错。。。
遇到这种情况,可以尝试封装成mp4,而不是mkv,问题可以缓解。无法理解为什么能缓解。。。
但如果是mp4不支持的编码就没辙了。。。还不如直接用mkvmerge了。。。。

162

主题

256

存在感

134

活跃日
 4 

SOS团一星级★

9楼
发表于 2011/03/10 | 编辑
引用第8楼mr_anderson2011-03-09 02:47发表的“”:
1.avs很简单,使用haali分离器,因为haali运行时会在系统栏有图标,用来选音轨。。不过如果你是为了封装的话,用avs也帮不上忙。。

2.ffmpeg的-map就是用来选track的,
比如一个文件,有多个轨,那么用 ffmpeg -i 文件.mkv 来查看的话,他会把几个轨按顺序显示出来,
比如stream 0.0是视频,stream 0.1是什么音频,stream 0.2是什么音频,诸如此类。
.......




嗯,我还得慢慢实践下才行,谢过两位。

关于我们|无图版|SOSG WIKI

Copyright © 2006-2024 SosG.Net
Total 0.023119(s) query 8, Gzip enabled,  沪ICP备07006640号-3