먼저 사용해 보세요.-copyts

먼저 사용해 보세요.-copyts

시작 시간이 다른 두 개의 비디오를 오버레이하고 오디오 트랙을 함께 믹싱하려고 합니다.

이러한 입력 파일은 WebRTC 녹음이며 각각 단일 오디오 또는 비디오 트랙을 포함합니다.

입력:

  • RTc0.webm: 오디오, Opus 40k, 시작 시간 9.078초
  • RT5f.webm: 오디오, Opus 40k, 시작 시간 1.262초
  • RT8c.mkv: 비디오, H.264, 시작 시간 9.078초
  • RTf7.mkv: 비디오, H.264, 시작 시간 1.298초

저는 이 비디오들을 나란히 그리고 오디오를 함께 믹싱하고 싶습니다.

먼저 사용해 보세요.-copyts

내 초기 생각은 다음을 사용하는 것이 었습니다.-copyts공유된 공통 타임코드를 사용하여 모든 것이 정렬되도록 허용하면 됩니다.

내 명령줄은 다음과 같습니다.

ffmpeg \
    -copyts \
    -ss 224.1 -i RTc0.webm -t 60 \
    -ss 224.1 -i RT5f.webm -t 60 \
    -ss 224.1 -i RTf7.mkv -t 60 \
    -ss 224.1 -i RT8c.mkv -t 60 \
    -filter_complex "

        color=c=black:s=1280x480 [background]; 
        [2:v] scale=640x480 [left]; 
        [3:v] scale=640x480 [right]; 
        [background][left]       overlay       [background+left]; 
        [background+left][right] overlay=x=640 [vout]; 

        [1:a][0:a] amix [aout]

    "  -c:v libx264 -preset veryfast -crf 28 -c:a aac -map "[vout]" -map "[aout]" -y \
    -f matroska combined.mkv

이것을 실행하면 비디오가 올바른 출력을 얻지만(한 비디오는 0초에 시작하고 다른 비디오는 7초 후에 시작함) 두 오디오 트랙 모두 0초에 시작합니다. 예상되는 동작은 하나의 오디오 트랙이 0초에 시작되고 다른 오디오 트랙은 두 번째 비디오 트랙과 동기화되어 7초 후에 시작되는 것입니다.

두 번째 시도, 사용 -itsoffsetasetpts

-itsoffset또한 비디오 트랙을 이동하는 데 사용해 보았습니다 . 이것은 효과가 있었지만 -itsoffset내 오디오 트랙에는 아무 것도 수행하지 못했습니다. 그것은 이상한 효과를 가져왔고 때로는 두 가지를 모두 시간에 맞춰 이동시켰습니다.

ffmpeg \
    -ss 0.00000000 -itsoffset 0 -i RTf7.mkv -t 60 \
    -ss 0.00000000 -itsoffset 7.781 -i RT8c.mkv -t 60 \
    -ss 0.00000000 -itsoffset 7.816 -i RT5f.webm -t 60 \
    -ss 0.00000000 -itsoffset 0 -i RTc0.webm -t 60 \
    -filter_complex "

        color=c=black:s=1280x480 [background]; 
        [0:v] scale=640x480 [left]; 
        [1:v] scale=640x480 [right]; 
        [background][left]       overlay=shortest=1       [background+left]; 
        [background+left][right] overlay=shortest=1:x=640 [vout]; 
        [2:a][3:a] amix=inputs=2:duration=longest [aout]

    "  -c:v libx264 -preset veryfast -crf 28 -c:a aac -map "[vout]" -map "[aout]" -y \
    -f matroska combined.mkv

그런 다음asetpts필터정렬을 유지하기 위해 오디오 트랙을 이동했지만 작동하지 않았습니다. 명령이 asetpts=PTS+(7.816/TB)무시되었습니다.

ffmpeg \
    -copyts \
    -ss 0 -i RTc0.webm -t 60 \
    -ss 0 -i RT5f.webm -t 60 \
    -ss 0 -itsoffset 0 -i RTf7.mkv -t 60 \
    -ss 0 -itsoffset 7.781 -i RT8c.mkv -t 60 \
    -filter_complex "

        color=c=black:s=1280x480 [background]; 
        [2:v] scale=640x480 [left]; 
        [3:v] scale=640x480 [right]; 
        [background][left]       overlay       [background+left]; 
        [background+left][right] overlay=x=640 [vout]; 

        [1:a] asetpts=PTS+(7.816/TB), [0:a] amix [aout]

    "  -c:v libx264 -preset veryfast -crf 28 -c:a aac -map "[vout]" -map "[aout]" -y \
    -f matroska segment_0.mkv

내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변1

amix 필터는 모든 입력을 동시에 시작하도록 동기화합니다. 방법은 -ss오디오 입력에 대해 건너뛰고 aresample=async=1,atrim=225.398각 오디오 입력에 적용한 다음 필터링된 스트림을 믹싱하는 것입니다.

225.398is 224.1+1.298- 귀하의 ss값 + 이전에 시작하는 비디오 스트림의 시작 시간입니다. 해당 오디오가 더 일찍 시작되므로 비디오 스트림 값을 사용했기 때문에 해당 값을 사용하면 동기화가 끊어질 수 있습니다.

관련 정보