FFmpeg를 사용하여 미디어 파일을 변환하는 빠른 가이드 - 멀티미디어를 편집, 조정, 원하는 형태로 변환할 수 있는 오픈 소스 도구는 시중에 많이 나와 있습니다. Audacity나 Handbrake와 같은 도구는 훌륭하지만, 때로는 파일을 한 형식에서 다른 형식으로 빠르게 변경하고 싶을 때가 있습니다. FFmpeg를 입력하세요.
FFmpeg는 멀티미디어 파일 처리를 위한 다양한 프로젝트 모음입니다. 다른 많은 미디어 관련 프로젝트의 이면에서 자주 사용됩니다. 이름과는 달리, 동영상 전문가 그룹이나 이 그룹이 만든 수많은 멀티미디어 포맷과는 아무런 관련이 없습니다.
이 글에서는 FFmpeg 프로젝트의 작은 부분일 뿐인 명령줄 도구 ffmpeg를 통해 FFmpeg를 사용하겠습니다. 이 도구는 다양한 운영 체제에서 사용할 수 있으며 일부 운영 체제에는 기본적으로 포함되어 있습니다. FFmpeg 웹사이트 또는 대부분의 패키지 관리자를 통해 다운로드할 수 있습니다.
FFmpeg는 멀티미디어 파일로 상상할 수 있는 거의 모든 작업을 수행할 수 있는 강력한 도구입니다. 이 글에서는 파일을 변환하는 데 사용하는 데 관심이 있으므로 전체 기능에 대해 자세히 살펴보지는 않겠습니다. FFmpeg 사용법을 살펴보기 전에 먼저 미디어 파일이 정확히 무엇인지 간단히 살펴볼 필요가 있습니다.
미디어 파일
매우 높은 수준에서 보면 미디어 파일은 컨테이너와 해당 스트림으로 나뉩니다. 스트림에는 영화의 오디오 또는 비디오와 같은 실제 AV 구성 요소가 포함되며 특정 미디어 인코딩 또는 코덱을 사용하여 인코딩됩니다. 각 코덱에는 고유한 속성, 장단점이 있습니다. 예를 들어, FLAC 코덱은 고품질 무손실 오디오에 적합한 반면, Vorbis는 파일 크기에서 MP3와 경쟁하면서 더 나은 오디오 품질을 제공하도록 설계되었습니다. 즉, FLAC 형식의 파일은 Vorbis 오디오 스트림보다 훨씬 크지만 음질은 더 좋아야 합니다. 각기 다른 목적을 가지고 있기 때문에 본질적으로 어느 쪽이 다른 쪽보다 낫다고 할 수는 없습니다.
컨테이너는 스트림의 래퍼입니다. 컨테이너는 미디어 플레이어와 도구가 상호 작용할 수 있는 단일 인터페이스를 제공합니다. 일부 컨테이너는 고도로 발전하여 단일 컨테이너 안에 여러 개의 비디오 및 오디오 스트림을 포함하여 모든 종류의 스트림을 허용합니다. 하지만 컨테이너의 스트림이 오디오나 비디오일 필요는 없습니다. 컨테이너에 따라 자막, 챕터 정보 또는 기타 메타데이터 등 다양한 스트림이 허용될 수 있습니다. 이는 모두 컨테이너가 허용하도록 설정된 내용에 따라 달라집니다.
이것은 미디어 파일을 추상적으로 표현한 것으로 컨테이너 간의 많은 차이점을 건너뛰고 있습니다. 대부분의 컨테이너는 특정 스트림과 메타데이터를 요구하거나 허용되는 코덱 또는 콘텐츠에 제한을 두는 경우가 많습니다. 이 설명만으로도 이 글을 충분히 이해할 수 있습니다. 자세한 내용을 알아보려면 위의 링크를 클릭하세요.
동영상 및 오디오 인코딩은 실행하는 데 시간이 오래 걸릴 수 있다는 점에 유의하세요. FFmpeg를 사용할 때는 한동안 적응할 준비를 해야 합니다.
기본 변환
오디오와 비디오를 변환할 때 대부분의 사람들이 어려움을 겪는 것은 올바른 형식과 컨테이너를 선택하는 것입니다. 다행히도 FFmpeg는 기본 설정이 매우 영리합니다. 일반적으로 복잡한 설정 없이도 올바른 코덱과 컨테이너를 자동으로 선택합니다.
예를 들어 MP3 파일이 있는데 이를 OGG 파일로 변환하고 싶다고 가정해 보겠습니다:
ffmpeg -i input.mp3 output.ogg
이 명령은 input.mp3라는 MP3 파일을 출력.ogg라는 OGG 파일로 변환합니다. FFmpeg의 관점에서 볼 때, 이는 MP3 오디오 스트림을 Vorbis 오디오 스트림으로 변환하고 이 스트림을 OGG 컨테이너로 래핑하는 것을 의미합니다. 스트림이나 컨테이너 유형을 지정할 필요가 없는데, FFmpeg가 이를 알아서 처리하기 때문입니다.
이 기능은 동영상에서도 작동합니다:
ffmpeg -i input.mp4 output.webm
WebM은 잘 정의된 형식이기 때문에 FFmpeg는 지원할 수 있는 비디오와 오디오를 자동으로 파악하여 스트림을 유효한 WebM 파일로 변환합니다.
선택한 컨테이너에 따라 이 기능이 항상 작동하는 것은 아닙니다. 예를 들어 Matroska와 같은 컨테이너는 스트림의 유효성 여부와 관계없이 거의 모든 스트림을 처리하도록 설계되었습니다. 이것은 명령을 의미합니다:
ffmpeg -i input.mp4 output.mkv
를 사용하면 input.mp4와 동일한 코덱을 가진 파일이 생성될 수 있으며, 이는 사용자가 원하는 파일이 아닐 수도 있습니다.
코덱 선택하기
그렇다면 거의 모든 스트림을 처리할 수 있는 Matroska와 같은 컨테이너를 사용하면서도 출력에 어떤 코덱이 포함되는지에 영향을 미치고 싶을 때는 어떻게 해야 할까요? FFmpeg가 도와드립니다! c 플래그를 사용하여 필요한 코덱을 선택할 수 있습니다.
이 플래그를 사용하면 각 스트림에 사용할 코덱을 다르게 설정할 수 있습니다. 예를 들어 오디오 스트림을 Vorbis로 설정하려면 다음 명령을 사용합니다:
ffmpeg -i input.mp3 -c:a libvorbis output.ogg
오디오 스트림뿐만 아니라 비디오도 동일하게 변경할 수 있습니다:
ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.mkv
이렇게 하면 앞서 만든 WebM과 본질적으로 동일한 VP9 비디오 스트림과 Vorbis 오디오 스트림이 있는 Matroska 컨테이너가 만들어집니다.
ffmpeg -codecs 명령은 FFmpeg가 알고 있는 모든 코덱을 인쇄합니다. 이 명령의 출력은 설치한 FFmpeg 버전에 따라 달라집니다.
단일 스트림 변경
보유하고 있는 파일이 부분적으로 올바른데 잘못된 형식의 단일 스트림만 있는 경우가 종종 있습니다. 올바른 스트림을 다시 인코딩하려면 시간이 많이 소요될 수 있습니다. 이 경우 FFmpeg가 도움이 될 수 있습니다:
ffmpeg -i input.webm -c:v copy -c:a flac output.mkv
이 명령은 input.webm에서 출력.mkv로 비디오 스트림을 복사하고 Vorbis 오디오 스트림을 FLAC로 인코딩합니다. c 플래그는 정말 강력합니다.
컨테이너 변경하기
앞의 예제는 오디오 및 비디오 스트림 모두에 적용할 수 있으므로 추가 스트림 인코딩을 수행하지 않고도 한 컨테이너 형식에서 다른 컨테이너 형식으로 변환할 수 있습니다:
ffmpeg -i input.webm -c:av copy output.mkv
화질에 영향을 미치기
이제 코덱에 대해 알아봤으니 다음 질문은 각 스트림의 품질을 어떻게 설정할까요?
가장 간단한 방법은 비트 전송률을 변경하는 것인데, 이 경우 화질이 달라질 수도 있고 달라지지 않을 수도 있습니다. 인간의 시각과 청각 능력은 우리가 생각하는 것만큼 깨끗하고 선명하지 않습니다. 때로는 비트레이트를 변경하면 주관적인 화질에 큰 차이가 생길 수 있습니다. 때로는 파일 크기만 변경하는 데 그칠 수도 있습니다. 때로는 시도해 보지 않고는 어떤 일이 일어날지 알기가 매우 어렵습니다.
각 스트림의 비트 전송률을 설정하려면 코덱 옵션 대신 비트 전송률을 설정한다는 점을 제외하면 -c 플래그와 유사한 방식으로 작동하는 -b 플래그를 사용합니다.
예를 들어, 비디오의 비트 전송률을 변경하려면 다음과 같이 사용합니다:
ffmpeg -i input.webm -c:a copy -c:v vp9 -b:v 1M output.mkv
이렇게 하면 input.webm에서 오디오를 복사하고(-c:a copy) 비디오를 비트 전송률 1M/s의 VP9 코덱(-c:v vp9)으로 변환하여(-b:v) 모두 Matroska 컨테이너(output.mkv)에 번들로 묶어줍니다.
품질에 영향을 줄 수 있는 또 다른 방법은 -r 옵션을 사용하여 비디오의 프레임 속도를 조정하는 것입니다:
ffmpeg -i input.webm -c:a copy -c:v vp9 -r 30 output.mkv
이렇게 하면 오디오 스트림이 복사되고 비디오 스트림의 프레임 속도가 입력의 프레임 속도(-r 30)가 아닌 초당 30프레임으로 강제 설정된 새로운 마트로스카가 생성됩니다.
FFmpeg를 사용하여 비디오의 크기를 조정할 수도 있습니다. 가장 간단한 방법은 미리 정해진 동영상 크기를 사용하는 것입니다:
ffmpeg -i input.mkv -c:a copy -s hd720 output.mkv
이렇게 하면 출력에서 비디오가 1280x720으로 수정되지만 원하는 경우 너비와 높이를 수동으로 설정할 수 있습니다:
ffmpeg -i input.mkv -c:a copy -s 1280x720 output.mkv
이렇게 하면 이전 명령과 똑같은 출력이 생성됩니다. FFmpeg에서 사용자 지정 크기를 설정하려면 너비 매개변수(1280)가 높이(720) 앞에 온다는 점을 기억하세요.
프레임 속도와 비트 전송률을 조정하는 것은 미디어 품질에 영향을 미치는 조잡하지만 효과적인 두 가지 기술입니다. 기존 소스의 품질이 이미 낮은 경우 이 값을 매우 높게 설정해도 품질을 개선할 수 없습니다.
이러한 설정을 변경하는 것은 고품질 스트림을 빠르게 줄여 파일 크기를 작게 만드는 데 가장 효과적입니다. 동영상 크기를 조정해도 화질은 개선되지 않지만, TV 대신 태블릿에 더 잘 맞도록 만들 수 있습니다. 640x480 동영상의 크기를 4K로 변경해도 화질은 개선되지 않습니다.
파일의 품질을 변경하는 것은 매우 주관적인 문제이므로 매번 효과가 있는 한 가지 방법은 없습니다. 가장 좋은 방법은 몇 가지 변경 사항을 적용하여 보기에 더 좋은지 또는 소리가 더 좋은지 테스트하는 것입니다.
스트림 수정하기
거의 완벽한 파일을 가지고 있는데 몇 부분만 잘라내기만 하면 되는 경우가 종종 있습니다. 이 작업은 변경할 부분을 표시해주는 도구를 사용하면 더 쉽게 할 수 있지만, 자르고 싶은 부분을 정확히 알고 있다면 FFmpeg에서 매우 쉽게 할 수 있습니다:
ffmpeg -i input.mkv -c:av copy -ss 00:01:00 -t 10 output.mkv
이렇게 하면 비디오 및 오디오 스트림이 복사되지만(-c:av copy) 비디오가 잘립니다. t 옵션은 잘라내기 길이를 10초로 설정하고 -ss 옵션은 트리밍할 동영상의 시작점(이 경우 1분(00:01:00))을 설정합니다. 필요한 경우 시, 분, 초 단위보다 더 정확하게 밀리초 단위까지 설정할 수 있습니다.
오디오 추출
때로는 비디오는 신경 쓰지 않고 오디오만 원하는 경우가 있습니다. 다행히도 FFmpeg에서는 -vn 플래그를 사용하면 매우 간단합니다:
ffmpeg -i input.mkv -vn audio_only.ogg
이 명령은 입력에서 오디오만 추출하여 Vorbis로 인코딩한 후 audio_only.ogg에 저장합니다. 이제 분리된 오디오 스트림이 생겼습니다. 같은 방법으로 -an 및 -sn 플래그를 사용하여 오디오 및 자막 스트림을 제거할 수도 있습니다.
GIF로 만들기
최근 애니메이션 GIF(나는 괴물이 아니기 때문에 하드 g를 붙임)가 다시 유행하고 있습니다. 개인적으로 GIF는 동영상용으로 선택할 수 있는 최악의 형식이라고 생각합니다. 압축 품질과 크기가 형편없고, 색상, 프레임 속도, 컨테이너 메타데이터에 대한 제한이 매우 엄격하며, 오디오를 지원하지 못하기 때문입니다. 그럼에도 불구하고 꽤 인기가 있습니다. 그렇다면 동영상 클립을 애니메이션 GIF로 만들려면 어떻게 해야 할까요?
오디오 없이 동영상을 만들고 싶다면 위에서 한 것과 유사하게 -an 플래그를 사용하는 것이 애니메이션 GIF를 만드는 것보다 낫지만, 다른 동영상 형식을 지원하지 않는 GIF를 지원하는 곳이 많이 있습니다. 이러한 경우
ffmpeg -i input.mkv output.gif
이 명령은 입력 파일과 동일한 크기의 GIF를 만듭니다. GIF는 다른 동영상 형식에 비해 압축이 잘 되지 않기 때문에 이 방법은 좋지 않은 경우가 많습니다(제 경험상 GIF는 원본 동영상보다 약 8배 더 큽니다). 특히 HD 동영상과 같이 입력 소스가 상당히 큰 경우 -s 옵션을 사용하여 GIF의 크기를 조금 작게 조정하는 것이 도움이 될 수 있습니다.
기타 도구
FFmpeg는 대부분의 AV 작업에 가장 많이 사용되는 도구이지만, 모든 작업에 완벽하지는 않습니다. FFmpeg와 함께 사용하면 모든 작업을 조금 더 쉽게 할 수 있는 몇 가지 도구가 있습니다.
YouTube에서 동영상 가져오기
YouTube에 무언가를 업로드했다가 원본 소스 동영상을 잃어버리고 YouTube 버전만 남게 되는 경우가 매우 쉽게 발생할 수 있습니다. YouTube 동영상 사본을 검색하는 가장 쉬운 방법은 무엇일까요?
Youtube-dl은 YouTube 및 기타 여러 동영상 스트리밍 서비스에서 동영상을 가져오는 데 사용할 수 있는 멋진 도구입니다. 사용법이 매우 간단합니다:
youtube-dl https://www.youtube.com/watch?v=2m5nW9CQLJ0
이 명령은 표시된 URL에서 동영상을 다운로드하여 로컬에 저장합니다.
Youtube-dl에는 다운로드한 동영상의 품질과 형식을 제어할 수 있는 몇 가지 옵션이 있지만, 저는 위의 명령어를 사용하는 것이 더 쉽습니다. 이 명령은 최고 품질의 오디오와 비디오를 단일 파일로 다운로드한 다음 FFmpeg를 사용하여 원하는 형식으로 변환합니다.
미디어에 대한 정보 얻기
때로는 미디어 컨테이너 안에 무엇이 들어있는지 알아야 할 때가 있습니다. 이 작업을 수행할 수 있는 도구는 여러 가지가 있지만, 제가 가장 선호하는 도구는 MediaInfo입니다. MediaInfo는 입력 파일의 메타데이터뿐만 아니라 각 스트림에 대한 미디어 컨테이너 내부의 모든 정보를 표시합니다. 이를 통해 알고 싶은 모든 정보를 얻을 수 있으며, 모르는 정보도 많을 수 있습니다.
mediainfo inputFile.mkv 명령을 실행하면 입력 파일에 대한 정보 목록이 사람이 읽을 수 있는 형식으로 출력됩니다.
그리고 더...
이것은 FFmpeg가 할 수 있는 일의 표면을 긁어낸 것에 불과합니다. 다행히도 FFmpeg와 프로젝트의 다른 도구에 대한 문서는 매우 훌륭하며 확인해 볼 가치가 있습니다. 이 개가 할 수 있는 다양한 트릭에 대해 모두 알려줄 것입니다.
멀티미디어 변환을 위한 그래픽 인터페이스를 갖춘 도구를 찾고 있다면, 리눅스, 맥 OS X, 윈도우에서 사용할 수 있는 핸드브레이크는 매우 훌륭한 도구입니다. Handbrake는 내부적으로 FFmpeg(다른 도구 중에서도)를 사용합니다.
댓글