2012-01-04 5 views
0

여러 mpeg2 비디오 파일이 있습니다. 내가해야 할 일은 이러한 mpeg2 비디오에 포함 된 비디오 클립을 얻는 것입니다. 내가 지금하고 있어요 것은 : 그 문제를 해결하기는 FFmpeg을 사용하고 있으므로MPEG 2 비디오 파일 결합 및 자르기

copy /b file1.mpg + ... + fileN.mpg output.mpg 
  • ouput.mpg 기간이 잘못 :

    • 명령을 사용하여 가입

      나는 그것을 "해결"동시에,이 output.mpg의 한 부분을 추출 할 때
      ffmpeg -y -i output.mpeg -target pal-dvd outputFixed.mpg 
      

    문제는 -ss A를,이다 nd - FFMpeg 명령은 비디오 길이가 틀렸기 때문에 나에게 말한 것입니다.

    그래서 질문은 : 지속 시간이 잘못받지 않고 MPEG2 파일을 결합 할 수있는 방법은

    • 있습니까?
    • Mpeg2 파일의 재생 시간을 수정하고 동시에 한 부분을 추출 할 수있는 방법이 있습니까?

    의견을 보내 주시면 감사하겠습니다. ffmpeg FAQ에서

  • +1

    당신은 -vcodec 사본 -acodec 사본을 사용해야합니다 그리고 오디오 및 비디오 스트림 인코딩 (품질 저하는 말할 것도 없습니다) – sashoalm

    답변

    0

    :

    3.13가 어떻게 비디오 파일을 가입 할 수 있습니까?

    일부 멀티미디어 컨테이너 (MPEG-1, MPEG-2 PS, DV)는 비디오 파일을 연결하는 것만으로 개의 비디오 파일을 결합 할 수 있습니다.

    은 따라서 당신은 겸손한 cat 명령 (또는 Windows에서 똑같이 겸손 사본)를 사용하여, 마지막으로 다시 선택의 형식으로 을 트랜스 코딩, 이러한 특권 형식으로 먼저 변환 그들에 의해 멀티미디어 파일을 연결 할 수 있습니다. input2.avi -same_quant intermediate2.mpg 고양이 intermediate1.mpg intermediate2.mpg> intermediate_all.mpg -same_quant 출력 intermediate_all.mpg -i 을 FFMPEG -i

    는 FFmpeg -i input1.avi -same_quant intermediate1.mpg는 FFmpeg. avi 비디오 화질을 보존하려면 은 -same_quant를 사용하거나 중간 및 출력 파일에 대해 상당히 높은 비트 전송률을 설정해야합니다.

    또한, 명명 된 파이프의 을 활용하여 거대한 중간 파일을 피할 수 있음을주의해야 플랫폼 지원이 :

    에서는 mkfifo intermediate1.mpg에서는 mkfifo intermediate2.mpg는 FFmpeg -i input1.avi -same_quant - Y는 <을/dev/null &는 FFmpeg을 intermediate1.mpg -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 형식과 원본 비디오 r aw 오디오 코덱 또한 연결을 허용합니다. 및 트랜스 코딩 단계는 거의 무손실입니다. yuv4mpeg 파이프를 여러 개 사용하는 경우 첫 번째 줄은 첫 번째 스트림을 제외한 모든 스트림에서 삭제해야합니다. 이것은 아래 보이는 꼬리를 통해 배관하여 수행 할 수 있습니다. 꼬리를 통해 파이핑 할 때는 명령 ({;})을 적절하게 배경으로 사용해야합니다.

    에서는 mkfifo temp1.a에서는 mkfifo temp1.v에서는 mkfifo temp2.a에서는 mkfifo temp2.v에서는 mkfifo 전부다에서는 mkfifo : 예를 들어

    , 이제 우리가 output.flv 파일에 두 개의 FLV 파일을 가입하고 싶은 말은하자 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; } & 고양이 temp1.a temp2.a> 전부다 & 고양이 temp1.v temp2.v> all.v &는 FFmpeg -f u16le -acodec pcm_s16le -ac 2 -ar 44100 -i 전부다 \ -f yuv4mpegpipe -i all.v \ -same_quant -y output.flv RM 온도 [12]. 당신은 시간 디코딩을 낭비하지 않도록 [AV] 모든. [AV]

    +0

    "또는 Windows의 경우와 마찬가지로 겸손한 복사본"은 매우 겸손하지만이 경우 매우 유용하지는 않지만 파일을 재생성 할 수는 있지만 재생 시간은 잘못되었습니다. 파일 헤더와 관련이 있다고 생각합니다. 첫 번째 파일 만 유지합니다. –

    +0

    그렇기 때문에 파일을 연결 한 후에 다시 ffmpeg로 코드 변환해야합니다. – sashoalm

    +0

    좋습니다. 아이디어는 복사 (명령) -> 트랜스 코드 (FFMpeg) -> 추출 (FFMpeg)입니다. 너무 오래 걸릴거야! –

    관련 문제