关于 Linux 下使用 ffmpeg 大批量合并 ts 文件,求助下各位 V 友

2014-11-09 19:51:13 +08:00
 watara
我需要把一个目录下的大量文件(名字非常规律的,都是 file001.ts,file002.ts,file003.ts.......有一千多个文件)合并成一个文件,我原来想导出到windows里用windows工具合并,但发现非常不完美,有的工具在衔接出会花屏,一秒的样子(每个ts片段大概10秒的样子。。。1000多个文件合并,差不多十分之一的时间花屏。。。),有点工具不花屏,但会有轻微的停顿,有的工具到后面会导致声音视频不同步。。。。
最后想想还是用linux好了,用的ffmpeg来合并的,用了十个文件做测试,发现很流畅,完全符合要求,当时现在的问题在于。。。。我怎么批量导入这1000多个文件呢。。。我做测试的时候用的下面的命令:

ffmpeg -i "concat:file001.tsfile002.ts|file003.ts|file004.ts" -acodec copy -vcodec copy -absf aac_adtstoasc out.mp4

我试着使用 * 通配符,不过提示找不到*.ts。。。。。加前缀也是不行,用绝对地址也不行。。。我估计是不是得用正则啥的了?不过我shell基本上不会。。。正则也是。。。所以求助下各位了,谢谢
25108 次点击
所在节点    FFmpeg
12 条回复
watara
2014-11-09 19:59:09 +08:00
我有一个思路,不过不知道怎实现。。。。就是用循环,比如要合并001、002、003、004、005这4个文件,第一次先合并001和002,产生一个out.ts,第二次再让out.ts和003合并,再产生一个out.ts,如此循环,我不是程序猿,不知道这思路对吗。。。。
Lelouchcr
2014-11-09 20:18:07 +08:00
我也干过这事情,用来合并hls流,差不多500+个。其实就是你上面的思路,只不过concat部分用代码写个循环就行啦。

比如

python 写

cmd = "ffmpeg -i \"concat:"

for i in xrange(1):
cmd += 'file%03d'%3

cmd += '... out.mp4'

print cmd
Lelouchcr
2014-11-09 20:19:06 +08:00
代码写错了,改不了。。。再发次
cmd = "ffmpeg -i \"concat:"

for i in xrange(1):
cmd += 'file%03d'%i

cmd += '... out.mp4'

print cmd
ysjdx
2014-11-09 20:21:22 +08:00
ffmpeg -i `for i in {1..1000};do echo -e "file$i.ts|\c"` ;done
`" -acodec copy -vcodec copy -absf aac_adtstoasc out.mp4
seki
2014-11-09 20:22:44 +08:00
-i 还支持文件列表,剩下的事情就是怎么生成文件列表了
old9
2014-11-09 20:29:35 +08:00
ffmpeg -f concat -i filelist.txt -c copy......

filelist 格式类似
file 'path/to/file001.ts'
file 'path/to/file002.ts'
...

生成这样的 filelist.txt 应该不难吧

另外,Windows 下也有 ffmpeg
em70
2014-11-09 20:54:20 +08:00
ts合并不需要ffempg,直接copy拼接就可以了
SoloCompany
2014-11-09 20:57:52 +08:00
* 是 shell 解释的,你不能加 ""
如果一定需要要加,可以用 “`echo *`" 代替
sycsycsyc378
2014-11-09 21:40:56 +08:00
MPEG2 的还是 h264?前者直接合并播放会出错吧。
watara
2014-11-09 21:58:28 +08:00
@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 嗯嗯,感谢,涨姿势了
watara
2014-11-09 22:00:57 +08:00
谢谢楼上各位,问题已经解决了,我得继续学习学习了。
watara
2014-11-09 22:02:21 +08:00
@old9 我之前也查到过这个方式,我也自己写了list文件,不过不知道为啥,出错了,有空我再看看

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/145166

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX