FFMPEG : 다중 코어를 사용한 m4a에서 mp3 로의 변환


2

m4a 형식을 mp3로 변환하려면 다음 명령을 사용하십시오.

ffmpeg -i audio.m4a -acodec libmp3lame audio.mp3

32 개의 x86 코어가 있지만 libmp3lame 프로세스는 단일 스레드로 처리됩니다. libmp3lame은 멀티 스레딩을 지원하지 않으므로 우분투 CLI에서 실행할 수있는 다른 대안을 사용할 수 있습니다.

audio.m4a가 2 시간 길이의 비디오 인 경우 일반적으로 3 분 이상 걸리며 속도는 45x ~ 50x로 나타납니다.

내 주요 목표는 여러 YouTube 동영상을 몇 초 내에 mp3 형식으로 변환하는 것입니다.

업데이트 1 :

32 코어 CPU를 사용하고 있기 때문에 비디오 변환이 하나만있을 때는 하나의 코어 만 사용합니다. 이 경우 여러 코어를 사용하여 출력을 더 빨리 얻는 방법. CPU에서 최대치를 달성하고 싶습니다. 또한 FFmpeg가 답이 아닌 경우 다른 방법이 있습니까?


2
여러 개의 ffmpeg 프로세스를 병렬로 시작할 수 없습니까?
slhck

@slhck 아니오, libmp3lame은 다중 스레드를 지원하지 않습니다 :(
Johny Pie

예를 들어 20 개의 다른 ffmpeg 프로세스를 시작할 때 하나의 코어 만 사용됩니까?
slhck

@slhck 아니, 나는 하나의 프로세스 하나의 핵심을 말하고있다
Johny Pie

그래서 내가 제안하는 것은 20 개의 프로세스를 시작하는 것입니다. 작동하지 않습니까?
slhck

답변:


3

인코더는 단일 스레드 전용이므로 멀티 코어 시스템에서 인코딩을 가장 효율적으로 만들려면 여러 프로세스를 병렬로 시작하면됩니다.

예를 들어, 쉘에있는 경우 :

ffmpeg -i input1.mp4 -c:a libmp3lame output1.mp3 &
ffmpeg -i input2.mp4 -c:a libmp3lame output2.mp3 &
…

&명령을 박았 배경으로 . 명령이 병렬로 실행되며로드는 CPU 코어에 분산되어야합니다.


그래, 알아 내가 원하는 것은 단일 프로세스가 멀티 스레드에서 발생하도록하는 것입니다.
Johny Pie

질문을 업데이트했습니다. 확인하십시오. 감사합니다
Johny Pie

2
마술로 단일 스레드 프로세스를 여러 스레드에서 실행할 수는 없습니다. LAME의 독립형 멀티 스레드 버전이 있지만 잘 작동한다고 보장 할 수는 없습니다 : github.com/dheller1/lame_pthreads
slhck

이 웹 사이트 onlinevideoconverter.com/es에서 거의 즉시 전환을 수행합니다.
Johny Pie

3

GNU Parallel 은 여러분이 찾고있는 것과 똑같이 들립니다.

다음은 원래 명령을 사용하여 GNU Parallel을 사용하는 방법의 예입니다 (이미 모든 *.m4a파일 이있는 디렉토리가 있다고 가정 videos).

find /path/to/videos -name "*.m4a" | parallel 'ffmpeg -i {} -acodec libmp3lame {.}.mp3'

설명해야 할 두 가지 :

1 : find명령 의 출력 (즉, .m4a변환 할 파일 목록 )이 parallel명령 으로 파이프되어 기본적 으로 코어 수만큼 작업을 실행 합니다. 본질적으로 find명령 의 출력을 분할 하여 다른 작업에 분산하여 작업합니다 .

2 : GNU Parallel Tutorial에 따르면, {}인수가 진행되는 위치에서 인수를 {.}대체하고 터미널 확장자 (이 경우에는 .m4a)를 제거하며 출력은 원래 파일 이름이지만 .mp3확장자 를 갖습니다.

참고 :이 예에서는 변환 된 모든 파일을 원본 파일이있는 위치에 씁니다. 이것이 문제라면, 디렉토리를 전달하여 ffmpeg명령을 포함하는 인수 문자열에 변환 된 파일을 저장하십시오 .

find /path/to/videos -name "*.m4a" | parallel 'ffmpeg -i {} -acodec libmp3lame /path/to/converted/vids/{.}.mp3'

(1) 따라서 (명시된 바와 같이) 파일을 처리하는 데 OP가 3 분이면 기술을 사용하여 3 분 안에 32 개의 파일을 처리 할 수 ​​있습니다. 그것이 그가 얻을 수있는 최선일 수도 있지만, 그가 원하는 것은 아닙니다. 그는  10 초 안에 하나의 파일 을 처리 할 방법을 찾고 있습니다. (2) ls다른 프로세스에서 사용할 파일 이름을 생성하는 데 사용하지 마십시오 (또는 다른 사람들에게 권장).
Scott

1

인터넷에는 lame mp3 인코더의 멀티 스레드 구현이 있습니다. 여기서 추적 할 수 있습니다

https://github.com/dheller1/lame_pthreads

저장 공간이 큰 경우 ffmpeg를 사용하여 모든 m4a 파일을 wav 파일로 변환 한 다음 lame_pthreads를 해당 폴더를 가리킬 수 있습니다.

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