关于 Linux 下使用 ffmpeg 大批量合并 ts 文件,求助下各位 V 友 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
watara
V2EX    FFmpeg

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

  •  
  •   watara 2014 年 11 月 9 日 25539 次点击
    这是一个创建于 4104 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我需要把一个目录下的大量文件(名字非常规律的,都是 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基本上不会。。。正则也是。。。所以求助下各位了,谢谢
    12 条回复    2014-11-09 22:02:21 +08:00
    watara
        1
    watara  
    OP
       2014 年 11 月 9 日
    我有一个思路,不过不知道怎实现。。。。就是用循环,比如要合并001、002、003、004、005这4个文件,第一次先合并001和002,产生一个out.ts,第二次再让out.ts和003合并,再产生一个out.ts,如此循环,我不是程序猿,不知道这思路对吗。。。。
    Lelouchcr
        2
    Lelouchcr  
       2014 年 11 月 9 日   1
    我也干过这事情,用来合并hls流,差不多500+个。其实就是你上面的思路,只不过concat部分用代码写个循环就行啦。

    比如

    python 写

    cmd = "ffmpeg -i \"concat:"

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

    cmd += '... out.mp4'

    print cmd
    Lelouchcr
        3
    Lelouchcr  
       2014 年 11 月 9 日   1
    代码写错了,改不了。。。再发次
    cmd = "ffmpeg -i \"concat:"

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

    cmd += '... out.mp4'

    print cmd
    ysjdx
        4
    ysjdx  
       2014 年 11 月 9 日   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
    seki
        5
    seki  
       2014 年 11 月 9 日   1
    -i 还支持文件列表,剩下的事情就是怎么生成文件列表了
    old9
        6
    old9  
       2014 年 11 月 9 日 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
    em70
        7
    em70  
       2014 年 11 月 9 日
    ts合并不需要ffempg,直接copy拼接就可以了
    SoloCompany
        8
    SoloCompany  
       2014 年 11 月 9 日   1
    * 是 shell 解释的,你不能加 ""
    如果一定需要要加,可以用 “`echo *`" 代替
    sycsycsyc378
        9
    sycsycsyc378  
       2014 年 11 月 9 日
    MPEG2 的还是 h264?前者直接合并播放会出错吧。
    watara
        10
    watara  
    OP
       2014 年 11 月 9 日
    @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
        11
    watara  
    OP
       2014 年 11 月 9 日
    谢谢楼上各位,问题已经解决了,我得继续学习学习了。
    watara
        12
    watara  
    OP
       2014 年 11 月 9 日
    @old9 我之前也查到过这个方式,我也自己写了list文件,不过不知道为啥,出错了,有空我再看看
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4401 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 03:45 PVG 11:45 LAX 19:45 JFK 22:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86