«

»

5月 12

和猫打交道——所有关于视频无损合并(主要是H.264)的问题(Jul.5更新:更新Win下的办法以及核心问题)

这个问题小白么?的确是,但是问的人还很多很多。

这里把我知道的所有的常见不常见问题和使用场景都罗列一下,以及我感觉的优缺点,一并列出。

我们只讨论无损合并。

有损合并永远可以先转换成MPG然后合并,最终转码。这就失去意义了。

1.Win下怎么无脑合并H.264视频?

我不知道为什么大量的所谓合并软件还在使用有损合并,虽然无损合并其实特别简单。 

当然不能忘记这货: 

下载地址自寻。这俩东西都好找。

更新:

硕鼠的技术人员友好的告诉了我硕鼠合并的核心。

核心是flvbind+MP4Box,而不是ffmpeg。因为ffmpeg太大。(Linux下一个ffmpeg的binary就26M左右)

用法:

 

2.Linux呢?

1)FFmpeg。

我估计http://www.ffmpeg.org/faq.html#How-can-I-concatenate-video-files_003f  已经吓尿了大部分人,http://trac.ffmpeg.org/wiki/How%20to%20concatenate%20(join,%20merge)%20media%20files 又有些误导,让大家以为FFmpeg只能合并avi。甚至有提出先mux成ts流然后再concat的Hentai存在。。

非也。

对于MPG文件:

 

清晰简单。

官方没直接写怎么处理H.264,只给了这个不明不白的例子:

 

估计这就是TS说的来历。

其实这事根本不用那么复杂:

看Biligrab的代码:

  

 

换成人话:

例如,你有这几个flv文件要连在一起:

1.flv 2.flv 3.flv

你要做的是:

建立一个文本文件,例如ff.txt:

在里面写:

 

然后去shell里面运行:

 

(-i:设定输入文件 -f:设定编码器,这里使用concat,无损合并方法 -c 流选择器,这里选择所有流 最后可以选择任何可以封装的格式,不一定是MP4)

[notice]参数顺序不能错,否则会拉肚子![/notice]

速度几乎是你硬盘的IO速度。

优点:几乎不拉肚子

缺点:需要建立一个文件

2)MP4Box法:

 

m4v文件也可以。

优点:简单明了可靠

缺点:不支持flv,呵呵呵呵。。。

3.歪门邪道有没有?

有啊。

4)Mencoder法

 

不保证不拉肚子啊。

MPEG1,MPEG2用这个会很不错。

5)FLVCopyCat

https://github.com/shinohane/FLVCopyCat

本来想用,但是这个东西的timestamp貌似会拉肚子。

风险自担。

参考资料:

http://forum.doom9.org/archive/index.php/t-93240.html

http://www.flvcd.com/teacher2.htm

http://www.onlinedown.net/soft/65496.htm

http://trac.ffmpeg.org/wiki/How%20to%20concatenate%20(join,%20merge)%20media%20files

http://www.ffmpeg.org/faq.html#How-can-I-concatenate-video-files_003f

7 comments

Skip to comment form

  1. dant

    还有 mkvmerge,怕麻烦可以直接拖到 mmg 里。
    不过合并 H.264 好像要求参数相同,否则其他解码器不认,ffmpeg 也会各种崩([email protected][email protected] 也是如此)

    1. Beining

      +1
      只有在特殊情况下才建议使用无损合并。
      但是这种需要合并的情况最常出现是视频网站的分段,正好符合这个要求。所以就放心大胆的做吧。。。

  2. nuomi

    @Echo Off
    Cd /d “%~dp0”
    :Start
    Echo File “%~f1” >> “Temp.txt”
    Shift
    If Not “%~1″==”” Goto Start
    “RipTool\ffmpeg.exe” -i “Temp.txt” -f concat -c copy “%~n1.mp4”
    Del “Temp.txt”
    Pause
    ——————————
    输出错误:
    [NULL @ 003ee6c0] Requested output format ‘concat’ is not a suitable output format
    .mp4: Invalid argument
    悲剧……

    1. Beining

      how…你看Biligrab一直没啥问题啊。。

  3. nuomi

    重新来一发。
    ——————————
    @Echo
    Cd /d “%~dp0”
    :Start
    Echo file ‘%~f1’ >> “FileList.txt”
    Shift
    If Not “%~1″==”” Goto Start
    “ffmpeg.exe” -f concat -i “FileList.txt” -c copy “%~n0.muxed.mp4”
    Del “FileList.txt”
    Pause
    ——————————
    ↑拖拽文件到BAT,鼠标选择的文件必须为序号第一的。输出文件是最后一个文件的文件名。TimeBase 可能有问题。

    1. nuomi

      实在没力气再搞 timecode 了,VFR 就 VFR 吧。

  4. gyubw

    学习了

发表评论

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">