ffmpeg -hwaccel cuda -hwaccel_output_format cuda \
-i "input_1080p.mp4" \
-vf "scale_npp=3840:2160:format=nv12,hwdownload,format=nv12" \
-c:v hevc_nvenc \
-preset slow \
-rc vbr \
-cq 22 \
-b:v 30000k \
-maxrate 60000k \
-bufsize 80000k \
-c:a copy \
"output_4k.mp4"
-hwaccel cuda -hwaccel_output_format cuda
: CUDA 하드웨어 가속을 활성화하고, 디코딩된 비디오 프레임이 GPU 메모리에서 CUDA 포맷으로 처리되도록 설정합니다.-vf "scale_npp=3840:2160:format=nv12,hwdownload,format=nv12"
:
scale_npp=3840:2160:format=nv12
: 비디오를 nv12 포맷으로 4K로 스케일링합니다. 이 작업은 GPU에서 수행됩니다.hwdownload
: GPU 메모리에서 CPU 메모리로 프레임을 다시 다운로드합니다. 이 단계가 필요하지 않으면 생략할 수도 있지만, 일부 시스템에서는 호환성을 위해 필요할 수 있습니다.format=nv12
: CPU 메모리에서 nv12 포맷으로 데이터를 유지하여 인코딩할 때의 호환성을 높입니다.ffmpeg -i input.mp4 -vn -acodec libmp3lame -q:a 4 output.mp3
만약 오디오 퀄리티를 좀 더 원본에 가깝게 가져가고 싶다면 -q:a
옵션을 낮춰가면서 시도해볼 수 있음 (낮을 수록 좋음. 0~9)
ffmpeg -loop 1 -i image.jpeg -i "input.mp3" -c:v libx264 -tune stillimage -c:a copy -shortest "output.mp4"
-loop 1
: 이미지를 무한 반복하여 사용합니다. 즉, 이미지를 동영상으로 변환할 때 한 프레임의 이미지만 사용하더라도 반복 재생됩니다.-i image.jpeg
: 입력으로 사용할 이미지 파일의 경로와 이름을 지정합니다. 예시에서는 "image.jpeg"로 설정되어 있습니다. 즉, image.jpeg 파일이 이미지 입력으로 사용됩니다.-i "input.mp3"
: 입력으로 사용할 오디오 파일의 경로와 이름을 지정합니다. 예시에서는 "input.mp3"로 설정되어 있습니다. 즉, input.mp3 파일이 오디오 입력으로 사용됩니다.-c:v libx264
: 비디오 코덱을 libx264로 설정합니다. libx264는 H.264 비디오 코덱을 사용하여 동영상을 압축합니다.-tune stillimage
: 이미지를 대상으로 최적화된 설정을 사용합니다. 이 설정은 정적인 이미지에 적합합니다.-c:a copy
: 오디오 스트림을 원본과 동일하게 복사합니다. 따라서 오디오는 재인코딩되지 않고 그대로 복사됩니다.-shortest
: 더 짧은 입력 파일(이미지 또는 오디오)에 맞추어 동영상의 길이를 제한합니다."output.mp4"
: 출력 파일의 경로와 이름을 지정합니다. 예시에서는 "output.mp4"로 설정되어 있습니다. 즉, output.mp4 파일이 결과 동영상으로 생성됩니다.위 명령어는 image.jpeg 파일과 input.mp3 파일을 결합하여 H.264 비디오 코덱으로 압축된 MP4 동영상 파일인 output.mp4을 생성합니다. 이미지는 반복 재생되며, 오디오는 원본 파일을 그대로 사용합니다. 최종적으로 생성된 동영상은 이미지를 보여주는 동안 배경음악이 재생됩니다.
libaom-dev
패키지가 필요할 수 있음. 그리고 ffmpeg에서 --enable-libaom
configure 설정을 포함하여 다시 컴파일 해야함ffmpeg -hwaccel auto -c:v h264_cuvid -i "input.mp4" \
-c:v hevc_nvenc -preset:v p7 -tune:v hq -rc:v vbr -cq:v 24 -b:v 0 -c:a copy \
"output.mp4"
# av1의 경우 hevc_nvenc가 아닌 av1_nvenc를 사용
-c:v h264_nvenc
: 이 옵션은 비디오 코덱을 선택하는데 사용됩니다. 여기서 h264_nvenc는 NVIDIA 그래픽 카드의 NVENC 하드웨어 가속을 사용하여 H.264 비디오 코덱을 선택합니다. 이렇게 하면 비디오 인코딩 작업이 GPU를 활용하여 더 빠르게 수행됩니다.-preset:v p7
: 이 옵션은 인코딩 프리셋을 설정합니다. 여기서 p7은 NVIDIA NVENC의 프리셋 중 하나로, 높은 품질을 제공하는 것으로 알려져 있습니다. 높은 품질을 원한다면 이 옵션을 선택하는 것이 좋습니다.-tune:v hq
: 이 옵션은 비디오 튜닝 옵션으로, 인코딩 프로세스를 조정하여 더 나은 품질을 얻을 수 있도록 도와줍니다. 여기서 hq는 "High Quality"를 나타내며, 높은 품질의 비디오를 생성하기 위해 사용됩니다.-rc:v vbr
: 이 옵션은 비디오 비트레이트 제어 방법을 선택합니다. vbr은 가변 비트레이트를 나타내며, 시각적 품질을 유지하면서 파일 크기를 줄이는 데 사용됩니다.-cq:v 19
: 이 옵션은 비디오 품질을 제어하는데 사용됩니다. -cq:v 다음의 값인 19는 품질 조절을 나타내며, 값이 낮을수록 더 높은 품질을 가집니다. 여기서 19는 상당히 높은 품질을 의미합니다.
-cq:v
옵션은 FFmpeg에서 사용되는 비디오 품질을 제어하는 옵션 중 하나입니다. 이 옵션은 주로 가변 비트레이트 (VBR) 모드에서 사용되며, 비디오 인코딩 중에 시각적 품질과 파일 크기 간의 균형을 조절하는 데 사용됩니다.
-cq:v
다음에 오는 값은 품질 팩터(quality factor) 또는 비디오 품질 레벨을 나타냅니다. 이 값은 일반적으로 0부터 51까지의 범위에서 설정됩니다. 값이 낮을수록 더 높은 품질을 가집니다.일반적으로 사용되는 값:
- 낮은 값 (예: 18, 19)은 높은 품질을 나타냅니다. 높은 품질을 원할 때 사용됩니다.
- 중간 값 (예: 23, 24)은 보통 품질을 나타냅니다. 품질과 파일 크기 간의 균형을 찾을 때 사용됩니다.
- 높은 값 (예: 28, 29)은 낮은 품질을 나타냅니다. 작은 파일 크기를 원할 때 사용됩니다.
-cq:v
값이 낮을수록 비트레이트가 증가하고, 더 높은 품질의 비디오가 생성됩니다. 하지만 파일 크기도 증가할 수 있습니다. 반대로 값이 높을수록 비트레이트가 감소하고 파일 크기가 작아지지만, 시각적 품질은 저하될 수 있습니다.
-b:v 0
: 이 옵션은 비트레이트를 설정하는데 사용됩니다. -b:v 0은 비트레이트를 무제한으로 설정한다는 것을 의미합니다. 이것은 가변 비트레이트 (-rc:v vbr) 모드에서 사용됩니다.ffmpeg -stream_loop -1 -i input.mp4 -c:v copy -c:a copy -t 7200 input-2hours.mp4
-t
: 추출 길이 (seconds, 여기서는 반복 재생으로 생성될 영상의 길이)ffmpeg -ss 889 \
-i "input.mp4" \
-t 60 \
-c copy \
"ouput.mp4"
ss
: 시작점 (seconds)-t
: 추출 길이 (seconds)-c copy
: 비디오/오디오 코덱 유지ffmpeg -i input.mp4 \
-vf "transpose=1" \
-c:a copy \
output.mp4
-vf "transpose=1"
은 값 1
과 함께 transpose 필터를 적용하여 동영상을 시계 방향으로 90도 회전합니다. 180도 회전을 위해서는 2
, 270도 회전을 위해서는 3
을 사용할 수 있으며, 원래 방향을 유지하려면 0
을 사용할 수 있습니다.ffmpeg -i "input.mp4" \
-vf "pad=w=max(iw\,(ih*9/16)):h=max(ih\,(iw*16/9)):(ow-iw)/2:(oh-ih)/2:black" \
-c:a copy \
"output.mp4"
-vf
는 비디오 필터를 지정하는 옵션입니다.pad=w=max(iw\,(ih*9/16)):h=max(ih\,(iw*16/9)):(ow-iw)/2:(oh-ih)/2:black
는 입력 영상의 캔버스를 9:16 비율로 변경하고 검은색 (black)으로 여백을 채웁니다.
w=max(iw\,(ih*9/16))
는 캔버스의 가로 너비를 입력 영상의 가로 너비와 세로 너비를 기반으로 계산합니다. iw
는 입력 영상의 가로 너비를, ih*9/16
은 9:16 비율의 세로 너비를 의미합니다. max()
함수를 사용하여 입력 영상의 가로 너비와 계산된 너비 중 더 큰 값을 선택합니다.h=max(ih\,(iw*16/9))
는 캔버스의 세로 너비를 입력 영상의 세로 너비와 가로 너비를 기반으로 계산합니다. ih는 입력 영상의 세로 너비를, iw*16/9
은 9:16
비율의 가로 너비를 의미합니다. max()
함수를 사용하여 입력 영상의 세로 너비와 계산된 너비 중 더 큰 값을 선택합니다.(ow-iw)/2:(oh-ih)/2
는 입력 영상의 캔버스를 중앙에 배치합니다. (ow-iw)/2
는 가로 여백의 크기를 계산하고, (oh-ih)/2
는 세로 여백의 크기를 계산합니다.black
은 여백을 검은색으로 채우도록 지정합니다.c:a copy
는 오디오 스트림을 원본과 동일하게 유지하도록 설정합니다.