1
watara OP 我有一个思路,不过不知道怎实现。。。。就是用循环,比如要合并001、002、003、004、005这4个文件,第一次先合并001和002,产生一个out.ts,第二次再让out.ts和003合并,再产生一个out.ts,如此循环,我不是程序猿,不知道这思路对吗。。。。
|
2
Lelouchcr 2014-11-09 20:18:07 +08:00 1
我也干过这事情,用来合并hls流,差不多500+个。其实就是你上面的思路,只不过concat部分用代码写个循环就行啦。
比如 python 写 cmd = "ffmpeg -i \"concat:" for i in xrange(1): cmd += 'file%03d'%3 cmd += '... out.mp4' print cmd |
3
Lelouchcr 2014-11-09 20:19:06 +08:00 1
代码写错了,改不了。。。再发次
cmd = "ffmpeg -i \"concat:" for i in xrange(1): cmd += 'file%03d'%i cmd += '... out.mp4' print cmd |
4
ysjdx 2014-11-09 20:21:22 +08:00 1
ffmpeg -i `for i in {1..1000};do echo -e "file$i.ts|\c"` ;done
`" -acodec copy -vcodec copy -absf aac_adtstoasc out.mp4 |
5
seki 2014-11-09 20:22:44 +08:00 1
-i 还支持文件列表,剩下的事情就是怎么生成文件列表了
|
6
old9 2014-11-09 20:29:35 +08:00 via Android 1
ffmpeg -f concat -i filelist.txt -c copy......
filelist 格式类似 file 'path/to/file001.ts' file 'path/to/file002.ts' ... 生成这样的 filelist.txt 应该不难吧 另外,Windows 下也有 ffmpeg |
7
em70 2014-11-09 20:54:20 +08:00
ts合并不需要ffempg,直接copy拼接就可以了
|
8
SoloCompany 2014-11-09 20:57:52 +08:00 1
* 是 shell 解释的,你不能加 ""
如果一定需要要加,可以用 “`echo *`" 代替 |
9
sycsycsyc378 2014-11-09 21:40:56 +08:00
MPEG2 的还是 h264?前者直接合并播放会出错吧。
|
10
watara OP @seki
@old9 感谢,我已经解决了,用的下面的命令,某位大神教的 ls * | perl -nale 'chomp;push @a, $_;END{printf "ffmpeg -i \"concat:%s\" -acodec copy -vcodec copy -absf aac_adtstoasc out.mp4\n", join("|",@a)}' @sycsycsyc378 我的是h264的,接触ffmpeg不久,很多都是现找现用的,原来里面有这么多门道呢,谢谢哈 @em70 嗯嗯,感谢,涨姿势了 |
11
watara OP 谢谢楼上各位,问题已经解决了,我得继续学习学习了。
|