2017-02-17 2 views
0

안녕하세요는 HLS 스트림ffmpeg의 CPU 사용을 줄이는 방법은 무엇입니까?

SETLOCAL 
:loop 

ffmpeg -thread_queue_size 32768 -i "http://xx/636.m3u8" -f hls -hls_time 5 -hls_list_size 5 -hls_allow_cache 0 -hls_flags delete_segments -segment_list_flags +live -hls_base_url "../ts/" -hls_segment_filename "C:\nginx\html\ts\lig-%random%%random%-%%3d.svgz" -y "C:\nginx\html\hls\lig1.m3u8" > log.txt 

goto loop 

같은 HLS 스트림을 restreaming하고 있지만, 난 같은 서버에 같은 16 개 개의 스트림을해야하지만 난 할 수 없습니다 CPU의 % 15 ~ 20을 사용합니다.

캔트 내가 m3u8을 복제하는 .ts 파일을 다운로드하는 것과 같은 구성을 만들지 않습니까?

+0

이 질문은 프로그래밍과 관련이 없으며 SuperUser.com에 속해 있습니다. – Brad

답변

3

기본적으로 FFmpeg는 인코딩 관련 매개 변수를 사용하지 않더라도 입력을 다시 인코딩하려고 시도합니다. 그냥 그대로 스트림을 복사하려면

, 당신은 streamcopy 기능을 시도해야합니다 :

-c:v copy -c:a copy

들어오는 스트림을 복사하여 완전히 인코딩 프로세스를 건너 뛸 수 있습니다. 그래서 명령은 다음과 같습니다 당신이 들어오는 스트림을 인코딩을 다시해야하는 경우

ffmpeg -thread_queue_size 32768 -i "http://xx/636.m3u8" -f hls -c:v copy -c:a copy -hls_time 5 -hls_list_size 5 -hls_allow_cache 0 -hls_flags delete_segments -segment_list_flags +live -hls_base_url "../ts/" -hls_segment_filename "C:\nginx\html\ts\lig-%random%%random%-%%3d.svgz" -y "C:\nginx\html\hls\lig1.m3u8" > log.txt 

(.는하지만, 작업 있을지 확실하지 않음)


, 당신이 고려해야 일부 인코딩 매개 변수를 명령에 추가하십시오. 기본적으로 ffmpeg는 소스 매개 변수와 품질을 일치 시키려고 시도하지만 라이브 응용 프로그램에서 항상 최적이는 아닙니다.

"매우 빠르고 초고속의"h264 프리셋은 성능 향상을위한 좋은 시작입니다.

또한 등 CRF (일정한 속도 팩터) 인코딩, 높은 비트 레이트, 바이올린 수

-c:v h264 -preset:v ultrafast

H264의 enoding에 대한 자세한 : https://trac.ffmpeg.org/wiki/Encode/H.264

+0

입력 할 때 -preset : v 명령 줄 ffmpeg가 고정되어 고정되어 있습니다. –

+0

다시 인코딩하는 경우 코덱을 너무 정의해야합니다 (예 : -c : v h264' !!!). 또한'> log' 부분을 줄이면, ffmpeg가 무엇이 잘못되었는지를 금지합니다. –

0

- 재 (입력) 기본 프레임 속도에서 입력을 읽기 . 주로 잡아 장치 또는 라이브 입력 스트림을 시뮬레이트하는 데 사용됩니다 (예 : 파일에서 읽을 때). 실제 잡아 장치 또는 라이브 입력 스트림 (패킷 손실을 일으킬 수있는 곳)에는 사용하지 않아야합니다. 기본적으로 ffmpeg는 가능한 한 빨리 입력을 읽으려고합니다. 이 옵션은 입력의 기본 프레임 속도로 입력 읽기 속도를 늦 춥니 다. 실시간 출력 (예 : 실시간 스트리밍)에 유용합니다.

0

이 질문은 이미 답변으로 간주되지만, 나는 명령 매개 변수 조정과 관련이 없으며 ffmpeg가 아닌 다른 도구 나 명령과 함께 사용할 수있는 대답이 없다고 생각합니다.

cpulimit 도구는이 목적을 위해 정확하게 설계되었으며 ffmpeg뿐만 아니라이 CPU 사용량을 줄이려는 다른 CPU 집약적 인 프로세스에서도 효과적으로 작동합니다.

cpulimit의 가장 중요한 인수는 -l이며 프로세스에서 사용할 수있는 CPU 백분율 (최대 한도)을 지정할 수 있습니다. 이 제한은 시스템에있는 CPU/코어/스레드의 수에 따라 달라집니다. 예를 들어 시스템에 CPU가 8 개인 경우 cpulimit -l 유효한 값의 범위는 0에서 800 사이입니다 (물론 0은 쓸모가 없습니다. 800은 프로세스를 800 %로 제한하지 않는 것은 모든 기계 처리 용량을 의미 함).8 개의 CPU 시스템에 대한 용량의 절반을 사용

예 : 문제는이 특정 질문뿐만 아니라 향후 유사한 요구하는 데 도움이 cpulimit -l 400 ffmpeg ...

희망.

관련 문제