ffmpeg 연결로 인해 소리가 나지 않고 부분적으로 잘못된 속도로 지나치게 긴 결과가 발생합니다.

ffmpeg 연결로 인해 소리가 나지 않고 부분적으로 잘못된 속도로 지나치게 긴 결과가 발생합니다.

ffmpeg 4.2.4를 사용하고 있습니다.

두 개의 짧은 비디오가 있는데 둘 다 휴대폰으로 촬영했습니다. 첫 번째 섹션에서 섹션을 잘라냈습니다(18초에서 시작하고 길이도 18초입니다. 출력 길이는 18.02초인 것 같습니다).

ffmpeg -i VID_20201205_135951.mp4 -ss 00:18 -t 00:18 1.mp4

그리고 두 번째 전체 길이는 13.55초입니다.

cp VID_20201205_140804.mp4 2.mp4

concat.txt 파일을 작성했습니다.

file '1.mp4'
file '2.mp4'

그리고 concat 필터를 사용하여 이들을 결합했습니다.

ffmpeg -f concat -i concat.txt -c copy 12.mp4

결과 영상에는 소리가 없으며 길이는 3분 2.35초입니다! 내가 본다면 처음 18초가 맞고(소리는 없지만) 정지되어 1분 47초까지 첫 번째 부분의 마지막 프레임이 표시됩니다. 이 지점에서 두 번째 부분이 재생되기 시작하지만 아주 천천히 1:47까지 재생됩니다. 영상의 끝.

내가 뭘 잘못하고 있는지 아시나요? 아니면 어떻게 디버깅할 수 있나요?

ffmpeg가 첫 번째 입력에 대해 인쇄하는 정보는 다음과 같습니다.

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.29.100
  Duration: 00:00:18.02, start: 0.000000, bitrate: 17735 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 3840x2160 [SAR 1:1 DAR 16:9], 17678 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandle
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 69 kb/s (default)
    Metadata:
      handler_name    : SoundHandle

두 번째 입력:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2020-12-05T14:08:20.000000Z
    com.android.version: 11
  Duration: 00:00:13.55, start: 0.000000, bitrate: 40373 kb/s
    Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuvj420p(pc, smpte170m), 3840x2160, 42298 kb/s, SAR 1:1 DAR 16:9, 30.02 fps, 30 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      rotate          : 180
      creation_time   : 2020-12-05T14:08:20.000000Z
      handler_name    : VideoHandle
    Side data:
      displaymatrix: rotation of -180.00 degrees
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 96 kb/s (default)
    Metadata:
      creation_time   : 2020-12-05T14:08:20.000000Z
      handler_name    : SoundHandle

그리고 출력은 다음과 같습니다.

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '12.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.29.100
  Duration: 00:03:02.35, start: 0.000000, bitrate: 4734 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 3840x2160 [SAR 1:1 DAR 16:9], 4719 kb/s, 5.07 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandle
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 80 kb/s (default)
    Metadata:
      handler_name    : SoundHandle

답변1

모든 입력에는 동일한 속성이 있어야 합니다. 귀하의 H.264 프로필(기준선과 높음) 및 프레임 속도가 다릅니다.

한 비디오를 다른 비디오와 일치시키십시오.

ffmpeg -i 2.mp4 -c:v libx264 -r 30 -c:a copy 2b.mp4

기본적으로 High profile이 선택되므로 수동으로 추가할 필요는 없지만 Baseline을 원할 경우 대신 -profile:v baseline.

또는 입력 속성에 관계없이 모든 비디오를 속성의 댓글 세트로 변환합니다. 보다ffmpeg에서 비디오를 다른 속성으로 연결하는 방법은 무엇입니까?

관련 정보