2012-01-04 3 views
0

私は複数のmpeg2ビデオファイルを持っています。私がする必要があるのは、これらのmpeg2ビデオのいくつかに含まれているビデオのクリップを取得することです。私は、現時点ではやっていることは次のとおりです。MPEG2ビデオファイルの結合と切り取り

  • は、コマンドを使用して参加:

    copy /b file1.mpg + ... + fileN.mpg output.mpg 
    
  • ouput.mpg時間を、私はそれを修正するFFMPEGを使用していますので、間違っている:

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

私は-ss aに、私はそれを「修正」同時に、このoutput.mpgの一部分のみを抽出しようとすると問題があります私が言ったようにビデオの期間が間違っているので、nd -t FFMpegコマンド。

そこで質問です:

  • は期間が間違って得ることなくMPEG2ファイルを結合する方法はありますか?
  • Mpeg2ファイルの再生時間を修正し、同時に1つの部分を抽出する方法はありますか?

いずれかの提案をいただければ幸いです。 ffmpeg FAQから

+1

あなたはデコードの時間を無駄にしないようにするには、-vcodecコピー-acodecコピーを使用する必要がありますオーディオやビデオのストリームをエンコードします(画質の劣化はもちろんありません) – sashoalm

答えて

0

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猫intermediate1.mpg intermediate2.mpg> -same_quant出力intermediate_all.mpg -i をffmpegのintermediate_all.mpg。 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形式とrawビデオr awオーディオコーデックでも連結が可能です。 とトランスコードステップはほとんど無損失です。 yuv4mpegpipe(s)を複数使用する場合、最初のストリームは ファーストストリーム以外のすべてから破棄する必要があります。これは下記の のように尾を通ることで達成できます。末尾まで配管するときは、コマンド ({;}のグループ化)を正しく使用してバックグラウンドにする必要があります。

例えば、我々は output.flvファイルに2つの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 - 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; } &猫temp1.a temp2.​​a> all.a &猫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]すべて。[AV]

+0

私は「Windows下の同等の謙虚なコピー」は非常に謙虚ですが、この場合はあまり役に立ちませんが、ファイルを再生することはできますが、私はそれがファイルのヘッダと何か関係があると思う、それは最初のものだけを保持する。 –

+0

はい、そのため、ファイルを連結した後、再びffmpegでトランスコードします。 – sashoalm

+0

okだからアイデアは:コピー(コマンド) - >トランスコード(FFMpeg) - >抽出(FFMpeg)です。それは時間がかかりすぎるだろう! –

関連する問題