태그 보관물: ffmpeg

ffmpeg

FFmpeg를 사용할 때 비디오를 10 초 미만의 여러 부분으로 나누는 문제 -vcodec copy -reset_timestamps 1

비디오를 여러 부분으로 나누려고하지만 세그먼트 크기를 10 초 미만으로 설정하면 10 초의 세그먼트가 생성됩니다. 세그먼트 크기가 10 초보다 큰 경우 작동합니다. 이것이 내가 사용하는 명령입니다.

ffmpeg -i HVC656729.mp4 -acodec copy -f segment -segment_time 5 -vcodec copy -reset_timestamps 1 -map 0 -an fff%d.mp4

나는 또 다른 옵션을 시도했다.

ffmpeg -i 'HVC656729.mp4'  -strict -2 -vcodec copy -ss 0 -t 5 '0.mp4'
ffmpeg -i ’HVC656729.mp4'  -strict -2 -vcodec copy -ss 5 -t 5 '1.mp4'
ffmpeg -i 'HVC656729.mp4'  -strict -2 -vcodec copy -ss 10 -t 5 '2.mp4'
ffmpeg -i 'HVC656729.mp4'  -strict -2 -vcodec copy -ss 15 -t 5 '3.mp4'
ffmpeg -i 'HVC656729.mp4'  -strict -2 -vcodec copy -ss 20 -t 5 '4.mp4'
ffmpeg -i 'HVC656729.mp4'  -strict -2 -vcodec copy -ss 25 -t 5 '5.mp4'
ffmpeg -i 'HVC656729.mp4'  -strict -2 -vcodec copy -ss 30 -t 5 '6.mp4'
ffmpeg -i 'HVC656729.mp4'  -strict -2 -vcodec copy -ss 35 -t 5 '7.mp4'
ffmpeg -i 'HVC656729.mp4'  -strict -2 -vcodec copy -ss 40 -t 5 '8.mp4'
ffmpeg -i 'HVC656729.mp4'  -strict -2 -vcodec copy -ss 45 -t 5 '9.mp4'
ffmpeg -i 'HVC656729.mp4'  -strict -2 -vcodec copy -ss 50 -t 5 '10.mp4’

그러나 비디오 길이까지는이 경우 홀수 비디오에는 오디오 만 포함되고 비디오는 포함되지 않으며 짝수 비디오에는 비디오가 포함됩니다. 지속 시간을 10 초로 설정하면이 작업조차 시작됩니다. ffmpeg 문서에 기본 segment_size가 2 초 ffmpeg link 라고 표시되어 있기 때문에 내부에 무슨 일이 있는지 잘 모르겠습니다 . 왜 이런 일이 일어나고 있는지 전혀 알지 못했습니다.

참조가 필요한 경우 비디오 를 여기에서 볼 수 있습니다 .

첫 번째 명령의 출력은 다음과 같습니다.

ffmpeg -i /lustre/bharat/devo/HVC656729.mp4 -acodec copy -f segment -segment_time 5 -vcodec copy -reset_timestamps 1 -map 0 -an fff%d.mp4
ffmpeg version 2.0.2 Copyright (c) 2000-2013 the FFmpeg developers
  built on Oct 23 2013 08:49:53 with gcc 4.6.1 (GCC)
  configuration: --prefix=/usr/local/ffmpeg/2.0.2 --libdir=/usr/local/ffmpeg/lib
  libavutil      52. 38.100 / 52. 38.100
  libavcodec     55. 18.102 / 55. 18.102
  libavformat    55. 12.100 / 55. 12.100
  libavdevice    55.  3.100 / 55.  3.100
  libavfilter     3. 79.101 /  3. 79.101
  libswscale      2.  3.100 /  2.  3.100
  libswresample   0. 17.102 /  0. 17.102
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/lustre/bharat/devo/HVC656729.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf52.68.0
  Duration: 00:02:57.39, start: 0.000000, bitrate: 637 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 320x240, 504 kb/s, 23.96 fps, 23.98 tbr, 24k tbn, 47.95 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : SoundHandler
Output #0, segment, to 'fff%d.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.12.100
    Stream #0:0(und): Video: h264 (avc1 / 0x31637661), yuv420p, 320x240, q=2-31, 504 kb/s, 23.96 fps, 90k tbn, 23.98 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
frame= 4250 fps=0.0 q=-1.0 Lsize=N/A time=00:02:57.34 bitrate=N/A
video:10934kB audio:0kB subtitle:0 global headers:0kB muxing overhead -100.000196%

홀수 버전의 출력 (두 번째 명령) :

ffmpeg -i '/lustre/bharat/devo/HVC656729.mp4' -strict -2 -vcodec copy -ss 5 -t 5 '1.mp4'
ffmpeg version 2.0.2 Copyright (c) 2000-2013 the FFmpeg developers
  built on Oct 23 2013 08:49:53 with gcc 4.6.1 (GCC)
  configuration: --prefix=/usr/local/ffmpeg/2.0.2 --libdir=/usr/local/ffmpeg/lib
  libavutil      52. 38.100 / 52. 38.100
  libavcodec     55. 18.102 / 55. 18.102
  libavformat    55. 12.100 / 55. 12.100
  libavdevice    55.  3.100 / 55.  3.100
  libavfilter     3. 79.101 /  3. 79.101
  libswscale      2.  3.100 /  2.  3.100
  libswresample   0. 17.102 /  0. 17.102
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/lustre/bharat/devo/HVC656729.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf52.68.0
  Duration: 00:02:57.39, start: 0.000000, bitrate: 637 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 320x240, 504 kb/s, 23.96 fps, 23.98 tbr, 24k tbn, 47.95 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : SoundHandler
Output #0, mp4, to '1.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.12.100
    Stream #0:0(und): Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 320x240, q=2-31, 504 kb/s, 23.96 fps, 24k tbn, 24k tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, 128 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (aac -> aac)
Press [q] to stop, [?] for help
frame=    0 fps=0.0 q=-1.0 Lsize=      80kB time=00:00:05.01 bitrate= 130.8kbits/s
video:0kB audio:78kB subtitle:0 global headers:0kB muxing overhead 2.015301%

짝수 버전의 출력 :

ffmpeg -i '/lustre/bharat/devo/HVC656729.mp4' -strict -2 -vcodec copy -ss 0 -t 5 '0.mp4'
ffmpeg version 2.0.2 Copyright (c) 2000-2013 the FFmpeg developers
  built on Oct 23 2013 08:49:53 with gcc 4.6.1 (GCC)
  configuration: --prefix=/usr/local/ffmpeg/2.0.2 --libdir=/usr/local/ffmpeg/lib
  libavutil      52. 38.100 / 52. 38.100
  libavcodec     55. 18.102 / 55. 18.102
  libavformat    55. 12.100 / 55. 12.100
  libavdevice    55.  3.100 / 55.  3.100
  libavfilter     3. 79.101 /  3. 79.101
  libswscale      2.  3.100 /  2.  3.100
  libswresample   0. 17.102 /  0. 17.102
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/lustre/bharat/devo/HVC656729.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf52.68.0
  Duration: 00:02:57.39, start: 0.000000, bitrate: 637 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 320x240, 504 kb/s, 23.96 fps, 23.98 tbr, 24k tbn, 47.95 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : SoundHandler
Output #0, mp4, to '0.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.12.100
    Stream #0:0(und): Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 320x240, q=2-31, 504 kb/s, 23.96 fps, 24k tbn, 24k tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, 128 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (aac -> aac)
Press [q] to stop, [?] for help
frame=  119 fps=0.0 q=-1.0 Lsize=     386kB time=00:00:05.01 bitrate= 630.4kbits/s
video:302kB audio:80kB subtitle:0 global headers:0kB muxing overhead 1.218538%


답변

동영상의 GOP 길이는 10 초 이상입니다. 다시 말해, 10 초마다 IDR 프레임 (디코더가 다른 프레임과 독립적으로 시작할 수있는 I 프레임)이 있습니다.

이는 세그먼트가 IDR 프레임으로 시작해야하기 때문에 ffmpeg가 비디오를 더 짧은 세그먼트로 분할 할 수 없음을 의미합니다.

이를 극복하려면 비디오 스트림을 다시 인코딩하여 24fps 비디오에 대해 고정 GOP 길이 (예 : 1 초마다)를 설정해야합니다.

ffmpeg -i input -c:v libx264 \
-r 24 -x264opts keyint=24:min-keyint=24 -crf 19 \
out.mp4

물론에 출력하는 대신 직접 분할을 수행 할 수도 있습니다 out.mp4.

품질을 제어하도록 CRF를 설정하십시오 . 자세한 내용은 H.264 인코딩 안내서 를 확인하십시오 .


답변