加入和剪切mpeg 2视频文件

时间:2012-01-04 12:21:57

标签: .net windows video ffmpeg

我有多个mpeg2视频文件。我需要做的是获取包含在其中几个mpeg2视频中的视频片段。我现在正在做的是:

  • 使用以下命令加入他们:

        copy /b file1.mpg + ... + fileN.mpg output.mpg
    
  • ouput.mpg持续时间错误,所以我使用FFMpeg来解决这个问题:

        ffmpeg -y -i output.mpeg -target pal-dvd outputFixed.mpg
    

问题是当我尝试仅提取此output.mpg的一部分时,同时我用“-ss和-t FFMpeg”命令“修复”它,因为视频持续时间错误,正如我所说。 / p>

所以问题是:

  • 有没有办法合并Mpeg2文件而不会导致持续时间错误?
  • 有没有办法修复Mpeg2文件的持续时间并同时提取一部分?

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

来自ffmpeg FAQ

  

3.13如何加入视频文件?

     

一些多媒体容器(MPEG-1,MPEG-2 PS,DV)允许加入   只是连接它们的视频文件。

     

因此,您可以通过首次转码来连接多媒体文件   他们使用这些特权格式,然后使用简单的cat命令   (或Windows下同样不起眼的副本),最后转码   回到你选择的格式。

     

ffmpeg -i input1.avi -same_quant intermediate1.mpg ffmpeg -i   input2.avi -same_quant intermediate2.mpg cat intermediate1.mpg   intermediate2.mpg> intermediate_all.mpg ffmpeg -i   intermediate_all.mpg -same_quant output.avi注意你应该   要么使用-same_quant,要么为你的比特设置一个相当高的比特率   中间和输出文件,如果你想保持视频质量。

     

另请注意,您可以通过拍摄来避免巨大的中间文件   命名管道的优势,如果您的平台支持它:

     

mkfifo intermediate1.mpg mkfifo intermediate2.mpg ffmpeg -i   input1.avi -same_quant -y intermediate1.mpg< / dev / null& ffmpeg -i   input2.avi -same_quant -y intermediate2.mpg< / dev / null&猫   intermediate1.mpg intermediate2.mpg | \ ffmpeg -f mpeg -i - -same_quant   -c:v mpeg4 -acodec libmp3lame output.avi同样,yuv4mpegpipe格式和原始视频原始音频编解码器也允许连接,   转码步骤几乎是无损的。使用多个时   yuv4mpegpipe(s),第一行需要从除了之外的所有行中丢弃   第一流。这可以通过看到的尾部管道来实现   下面。请注意,通过尾部管道时,必须使用命令   正确分组,{;},以适当的背景。

     

例如,假设我们要将两个FLV文件连接成一个   output.flv文件:

     

mkfifo temp1.a mkfifo temp1.v mkfifo temp2.​​a mkfifo temp2.​​v mkfifo   all.a mkfifo all.v ffmpeg -i input1.flv -vn -f u16le -acodec pcm_s16le   -ac 2 -ar 44100 - > temp1.a< / dev / null& ffmpeg -i input2.flv -vn -f u16le -acodec pcm_s16le -ac 2 -ar 44100 - > temp2.​​a< / dev / null&   ffmpeg -i input1.flv -an -f yuv4mpegpipe - > temp1.v< / dev / null& {   ffmpeg -i input2.flv -an -f yuv4mpegpipe - < / dev / null | tail -n +2>   temp2.​​v; }& cat temp1.a temp2.​​a> all.a& cat temp1.v temp2.​​v>   all.v& ffmpeg -f u16le -acodec pcm_s16le -ac 2 -ar 44100 -i all.a \          -f yuv4mpegpipe -i all.v \          -same_quant -y output.flv rm temp [12]。[av] all。[av]