ffmpeg를 사용하여 비디오에서 오디오를 추출하려면 어떻게해야합니까?


227

비디오에서 오디오를 추출하기 위해 다음 명령을 시도했습니다.

ffmpeg -i Sample.avi -vn -ar 44100 -ac 2 -ab 192k -f mp3 Sample.mp3

그러나 나는 다음과 같은 결과를 얻는다

libavutil     50.15. 1 / 50.15. 1
libavcodec    52.72. 2 / 52.72. 2
libavformat   52.64. 2 / 52.64. 2
libavdevice   52. 2. 0 / 52. 2. 0
libavfilter    1.19. 0 /  1.19. 0
libswscale     0.11. 0 /  0.11. 0
libpostproc   51. 2. 0 / 51. 2. 0
SamplE.avi: Invalid data found when processing input

누구든지 도와 줄 수 있습니까?

답변:


406

다시 인코딩하지 않고 오디오 스트림을 추출하려면

ffmpeg -i input-video.avi -vn -acodec copy output-audio.aac
  • -vn 비디오가 없습니다.
  • -acodec copy 이미 존재하는 동일한 오디오 스트림을 사용한다고 말합니다.

올바른 파일 이름 확장자를 설정하려면 출력을 읽고 어떤 코덱인지 확인하십시오.


54
어떤 오디오 스트림인지 확인하기 위해 ffmpeg를 처음 실행하는 대신 ffprobe input-video.avi
FlorianB

15
비디오 스트림에서 오디오 만 추출하면 오디오 길이가 비디오 길이보다 짧을 수 있습니다. 이런 일이 발생하지 않도록하려면 ffmpeg를 호출하여 오디오와 비디오를 모두 추출하십시오 (예 : "ffmpeg -i vid.avi -map 0 : a audio.wav -map 0 : v onlyvideo.avi
BlenderBender

2
원시 AAC를 M4A 컨테이너로 캡슐화하는 명령으로이 답변을 확장하는 것이 좋습니다.
Gras Double

8
이 정확한 경우 대상 경로에서 ".aac"를 ".m4a"로 바꾸십시오. ffmpeg는 당신의 의도를 추측하기에 충분히 영리하며 결과를 M4A 컨테이너에 캡슐화합니다 :)
Gras Double

1
FWIW, 나는 단지 입력 비디오 파일을 지정하기 위해 PHP 스크립트를 만들었고 출력 오디오 파일의 확장자를 자동으로 결정합니다. superuser.com/questions/1301901/…
Gras Double

117

AVI에서 고품질 MP3를 인코딩하려면 가변 비트 전송률에 -q : a 를 사용하십시오 .

ffmpeg -i sample.avi -q:a 0 -map a sample.mp3

비디오에서 오디오의 일부추출 하려면 -ss 옵션을 사용하여 시작 타임 스탬프 를 지정하고 -t 옵션을 사용하여 인코딩 지속 시간을 지정하십시오 (예 : 45 분 동안 3 분 및 5 초) :

ffmpeg -i sample.avi -ss 00:03:05 -t 00:00:45.0 -q:a 0 -map a sample.mp3
  • 타임 스탬프는 HH : MM : SS.xxx 형식이거나 초 단위 여야합니다.

  • -t 옵션을 지정하지 않으면 끝으로 이동합니다.

작업 예 :

  1. ffmpeg 다운로드
  2. 명령 프롬프트 열기 (시작> 실행> CMD) 또는 Linux / Mac에서 터미널 열기
  3. ffmeg.exe가있는 디렉토리로 cd
  4. 명령을 실행하고 출력 파일을 기다리십시오 (또는 오류 문제 해결).

여기에 이미지 설명을 입력하십시오


3
여기서위한 가이드의 -q:a값 : trac.ffmpeg.org/wiki/Encode/MP3 320 Kbit에서가 / S 여기서 제로는 일반적으로 온전한 CBR의 영역의 상부에 평균 비트율 결과 최고 품질 VBR 설정한다 (는 IS 최대, 아마도 무손실 압축이 더 적합한 지점을 약간 넘어 섭니다).
Evgeni Sergeev

3
그리고 무엇을 -map a합니까?
Iulian Onofrei

주의 사항 : 손실 압축으로 오디오를 다시 인코딩하므로 품질이 약간 저하됩니다. 원본이 이미 압축 된 경우 품질이 두 배 저하되어 눈에 띄거나 눈에 띄지 않을 수 있습니다.
Davidmh

이 명령은 위의 명령이 -vn그렇지 않은 경우 나를 위해 작동합니다 .

12

명령 행이 올 바르고 유효한 비디오 파일에서 작동합니다. mp3에서 작동하도록 올바른 라이브러리를 설치했는지, 다른 오디오 코덱으로 lame o probe를 설치했는지 확인하십시오.

보통

ffmpeg -formats

또는

ffmpeg -codecs

더 많은 정보를 얻을 수 있도록 충분한 정보를 제공합니다.


11

ffmpeg -i sample.avi파일의 오디오 / 비디오 형식 정보를 제공합니다. 입력 스트림을 구문 분석하도록 올바른 라이브러리가 구성되어 있는지 확인하십시오. 또한 파일이 손상되지 않았는지 확인하십시오.


나는 .mkv과 같은 설명을 시도 할 때 지금, 나는 그 아비 작동하지 않습니다 vedio.why, 아비를 변환하는 모든는 FFmpeg 명령이 올바른 결과를 얻었다
user1269669가

1
AVI 또는 MKV는 다양한 오디오 / 비디오 형식을 저장할 수있는 컨테이너 형식을 나타냅니다. AVI 오디오를 변환하려고하지 않고 아직 지정하지 않은 AVI 파일 내에서 오디오 트랙을 변환하려고합니다. 위에 나열된 명령을 사용하여 AVI 파일에 어떤 종류의 오디오 트랙이 있는지 확인하십시오. MP3 인 경우 LAME와 같은 MP3 라이브러리를 사용하여 FFMPEG
smp

6

mp3 오디오를 인코딩하려면 ffmpeg.org 는 다음 예제를 보여줍니다.

ffmpeg -i input.wav -codec:a libmp3lame -qscale:a 2 output.mp3

input.wav비디오 파일 이름 으로 바꾸어 비디오에서 오디오를 추출했습니다 . 2수단 190킬로바이트 / 초. 위의 링크에서 다른 품질 수준을 볼 수 있습니다.


이 예는 오디오 파일을 비디오에서 추출하지 않고 다른 형식으로 변환하기위한 것입니다.
Iulian Onofrei

@IulianOnofrei, 내 대답에서 설명한 것처럼 오디오 파일을 비디오 파일로 바꿀 수 있습니다. 그것은 나를 위해 일했다.
Suragch

6

방금 사용한 것이 있습니다 :

ffmpeg -i my.mkv -map 0:3 -vn -b:a 320k my.mp3

옵션 설명 :

  • my.mkv는 소스 비디오 파일이므로 다른 형식도 사용할 수 있습니다
  • -map 0:3비디오 파일에서 세 번째 스트림을 원한다는 의미입니다. 비디오 파일에는 종종 여러 개의 오디오 스트림이 있습니다. 생략하거나 -map 0:a기본 오디오 스트림을 가져 오는 데 사용할 수 있습니다. ffprobe my.mkv비디오 파일의 스트림을 확인하려면 실행 하십시오.
  • my.mp3는 대상 오디오 파일 이름이며 ffmpeg는 확장명에서 MP3를 원한다고 생각합니다. 필자의 경우 소스 오디오 스트림은 ac3 DTS이며 복사는 내가 원하는 것이 아닙니다.
  • 320k는 원하는 목표 비트 전송률입니다
  • -vn은 대상 파일에서 비디오를 원하지 않음을 의미합니다.

2

그냥 추측 :

-ab 192

해야한다

-ab 192k

그것은 문제가 될 수 있지만 ffmpeg는 그것을 해결하기에 충분히 똑똑 할 것입니다.


2
유효한 의견이며 OP의 질문을 편집하여 변경했지만 아무것도 변경되지 않습니다 (최대한 경고가 발생합니다).
Jean-Philippe Pellet

2

avi로 감싼 오디오가 mp3 형식이 아닌 -acodec mp3경우 추가 매개 변수 로 지정해야합니다 . 또는 mp3 코덱이 무엇이든 (리눅스 시스템에서는 아마도 -acodec libmp3lame). -f mp3ffmpeg의 모든 버전이 여전히 해당 스위치를 지원하지는 않지만 대신 mp3로 형식을 "강제"하도록 지정 하여 플랫폼에 관계없이 동일한 효과를 얻을 수 있습니다 . 귀하의 마일리지가 다를 수 있습니다.


2

변환하지 않고 추출하려면 Linux에서 파일 관리자 사용자 정의 조치로 컨텍스트 메뉴 항목을 사용하여 다음을 실행하십시오 (비디오에 포함 된 오디오 유형을 확인한 후, 오디오가 포함 된 비디오의 예 ogg).

bash -c 'ffmpeg -i "$0" -map 0:a -c:a copy "${0%%.*}".ogg' %f 

ffmpeg 명령을 기반으로합니다 ffmpeg -i INPUT -map 0:a -c:a copy OUTPUT.

-map 0:1@LordNeckbeard의 의견에서 말했듯이, 나는 문제없이 그것을 사용 했지만 "스트림 0:1은 항상 오디오임을 보장하지는 않습니다. -map 0:a대신에 사용하면 -map 0:1모호함을 피할 수 있습니다."


1
스트림 0:1이 항상 오디오 인 것은 아닙니다. -map 0:a대신에 사용하면 -map 0:1모호성을 피할 수 있습니다.
llogan

@LordNeckbeard ~ 감사합니다.

mediainfo오디오 트랙을 결정하는 데 사용 했으며 다음과 같이 선택했습니다. -map 0:a:1여기서 a : 1은 두 번째 오디오 트랙 인덱스입니다. -c:a copy훨씬 빨라졌습니다!
물병 자리 힘

1

원본 비디오 파일의 매개 변수를 유지하면서 비디오 파일에서 오디오를 추출하는 간단한 방법을 찾는 사람들을 위해 다음을 사용할 수 있습니다.

ffmpeg -i <video_file_name.extension> <audio_file_name.extension>

예를 들어 다음을 실행합니다.

ffmpeg -i screencap.mov screencap.mp3

비디오 파일 mp3에서 오디오 파일을 추출 mov합니다.


간단하고 작동합니다. 다른 모든 솔루션이 왜 그렇게 복잡한가? +1
Scott Biggs

1
문제는 왜 이것이 삭제 투표를하는 것입니까?!
Iulian Onofrei

-1

사용 -b:a대신 -ab으로-ab 이제 구식이되고, 또한 입력 파일 경로가 올바른지 확인하십시오.

비디오에서 오디오를 추출하기 위해 아래 명령과 잘 작동했습니다.

String[] complexCommand = {"-y", "-i", inputFileAbsolutePath, "-vn", "-ar", "44100", "-ac", "2", "-b:a", "256k", "-f", "mp3", outputFileAbsolutePath};

여기,

  • -y -묻지 않고 출력 파일을 덮어 씁니다.
  • -i-FFmpeg는 -i옵션으로 지정된 임의의 수의 입력 "파일"에서 읽습니다.
  • -vn -비디오 녹화 비활성화
  • -ar -인코딩 된 경우 오디오 스트림의 샘플링 속도를 설정합니다
  • -ac -오디오 채널 수를 설정하십시오.
  • -b:a -오디오 비트 레이트 설정
  • -f -형식

확인 GitHub의에 내 전체 샘플 FFmpeg은 안드로이드 프로젝트.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.