동영상편집/변환툴

FFMPEG 명령어로 2개 이상의 영상을 합치는 방법

RioRex 2020. 5. 9.

예전에 동영상의 일부분을 자르고 쉽게 저장하는 방법을 안내 했다.

이번엔 ffmpeg 라는 프로그램을 가지고 동일한 코덱의 영상 2개를 쉽게 합치는 방법입니다.

ffmpeg는 그 프로그램의 깊이가 너무 심오해서, 한번 깊이 있게 들어가면 빠져나오기 어렵습니다 ㅎㅎ


2개 이상의 영상을 합치는 방법

1. ffmpeg 다운로드 및 압축 해제

2. 고급 시스템 설정 > 환경 변수에 ffmpeg 등록

3. ffmpeg 명령으로 영상 합치기


1. ffmpeg 다운로드 및 압축해제

다운로드 클릭

ffmpeg 다운로드 방법: 1. 버전 선택 > 2. 윈도/맥 비트 선택 > 3. Static 선택 > 4. Download Build 클릭

 

압축을 해제하고 폴더명이 보기 쉽게 변경하고, 설치 없이 바로 실행될 것이기때문에 적절한 곳으로 이동한다.

1 D:\ 에 ffmpeg 라는 폴더로 변경해서 압축을 해제했다.

 

2. 고급 시스템 설정 > 환경 변수에 ffmpeg 등록

① 윈도우키 + x y 클릭 -->  (관련 설정) 시스템 정보 클릭 --> 고급 시스템 설정 클릭 --> [고급] 환경 변수 클릭 --> 새로 만들기 클릭 --> 변수 이름에 FFMPEG, 변수 값에 앞의 경로+\bin 적용, 예: d:\ffmpeg\bin\

Windows 키 누르고 x, y를 순서대로 누르면 시스템 정보 창을 호출한다.
시스템(Y) 창에서 우측 관련 설정 1 시스템 정보를 클릭한다.
1. 고급 시스템 설정을 클릭한다.
1 환경변수 클릭, 사용자 계정의 2. path 클릭 후 3. 편집,
4. 찾아보기 클릭, 5, ffmpeg bin 폴더 선택 후 6 확인 7 목록에 ffmpeg bin 폴더 추가 확인 후 8 확인클릭, 위에 떠있는 창 다 확인해서 닫기 9, 10

 

3. ffmpeg 명령으로 영상 합치기

Windows 키 클릭 후, cmd 입력 엔터

명령 프롬프트 창에서 미디어 파일이 있는 폴더로 이동한다.

cd 입력 후 폴더 주소창을 드래그 드롭하면 쉽게 이동할 수 있다.

(단, C 드라이브가 아닌 D 드라이브 같은 경우 d:를 입력해줘야 한다.)

1 cd 입력 2 폴더 주소창 클릭 3 명령프롬프트 창에 4 드래그 드롭

1 폴더 이동 했는데 드라이브 안 바뀌었으면 2 드라이브 이동 3 dir /b 하여 파일을 조회해보고 4 dir /b > file.txt 라고 입력하여 조회한 내용을 file.txt로 저장함 5. 메모장으로 file.txt를 열고 6. file.txt 파일 내부에 파일명 앞에 file 을 붙여 주고 영상 순서를 정해준다. 7. ffmpeg 합치는 명령어를  예: ffmpeg -f concat -i file.txt -c copy 08_all.mp4 를 사용하면 다음과 같이 영상이 합쳐진다.

1 폴더 이동 했는데 드라이브 안 바뀌었으면 2 드라이브 이동 3 dir /b 하여 파일을 조회해보고 4 dir /b > file.txt 라고 입력하여 조회한 내용을 file.txt로 저장함 5. 메모장으로 file.txt를 열고 6. file.txt 파일 내부에 파일명 앞에 file 을 붙여 주고 영상 순서를 정해준다. 7. ffmpeg 합치는 명령어를 사용하면 다음과 같이 영상이 합쳐진다.

d:\media_files>ffmpeg -f concat -i file.txt -c copy 08_all.mp4
ffmpeg version git-2020-04-26-1128aa8 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 9.3.1 (GCC) 20200328
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
  libavutil      56. 43.100 / 56. 43.100
  libavcodec     58. 82.100 / 58. 82.100
  libavformat    58. 42.101 / 58. 42.101
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 79.100 /  7. 79.100
  libswscale      5.  6.101 /  5.  6.101
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000023b2bad4f80] st: 0 edit list: 1 Missing key frame while searching for timestamp: 0
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000023b2bad4f80] st: 0 edit list 1 Cannot find an index entry before timestamp: 0.
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000023b2bad4f80] Auto-inserting h264_mp4toannexb bitstream filter
Input #0, concat, from 'file.txt':
  Duration: N/A, start: 0.000000, bitrate: 906 kb/s
    Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv), 800x450 [SAR 1:1 DAR 16:9], 781 kb/s, 29.97 fps, 29.97 tbr, 29970 tbn, 59.94 tbc
    Metadata:
      creation_time   : 2016-08-29T15:41:20.000000Z
      handler_name    : Mainconcept MP4 Video Media Handler
      encoder         : AVC Coding
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 125 kb/s
    Metadata:
      creation_time   : 2016-08-29T15:41:20.000000Z
      handler_name    : Mainconcept MP4 Sound Media Handler
Output #0, mp4, to '08_all.mp4':
  Metadata:
    encoder         : Lavf58.42.101
    Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv), 800x450 [SAR 1:1 DAR 16:9], q=2-31, 781 kb/s, 29.97 fps, 29.97 tbr, 29970 tbn, 29970 tbc
    Metadata:
      creation_time   : 2016-08-29T15:41:20.000000Z
      handler_name    : Mainconcept MP4 Video Media Handler
      encoder         : AVC Coding
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 125 kb/s
    Metadata:
      creation_time   : 2016-08-29T15:41:20.000000Z
      handler_name    : Mainconcept MP4 Sound Media Handler
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000023b2badd800] st: 0 edit list: 1 Missing key frame while searching for timestamp: 0
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000023b2badd800] st: 0 edit list 1 Cannot find an index entry before timestamp: 0.
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000023b2badd800] Auto-inserting h264_mp4toannexb bitstream filter
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000023b2c057400] st: 0 edit list: 1 Missing key frame while searching for timestamp: 0
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000023b2c057400] st: 0 edit list 1 Cannot find an index entry before timestamp: 0.
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000023b2c057400] Auto-inserting h264_mp4toannexb bitstream filter
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000023b2c057400] st: 0 edit list: 1 Missing key frame while searching for timestamp: 0
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000023b2c057400] st: 0 edit list 1 Cannot find an index entry before timestamp: 0.
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000023b2c057400] Auto-inserting h264_mp4toannexb bitstream filter
frame=113941 fps=13711 q=-1.0 Lsize=  427128kB time=01:03:21.96 bitrate= 920.3kbits/s speed= 458x
video:365110kB audio:58285kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.881734%

d:\media_files>

완료 입니다.

 


이상입니다.

퍼가기 하실때는 출처 꼭 같이 남겨주시면 감사하겠습니다.


출처: 코카티비, http://cocatv.tistory.com/262

반응형

댓글