我有多个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>
所以问题是:
任何建议都将不胜感激。
答案 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]