FFmpeg는 비트 심도와 비트 전송률을 어떻게 제어합니까?

FFmpeg는 비트 심도와 비트 전송률을 어떻게 제어합니까?

FFmpeg로 오디오를 변환할 때 샘플링 레이트와 채널 수를 각각 제어하는 ​​옵션이 -ar있습니다 . 또한 비트 전송률을 제어하는 ​​옵션 -ac도 제공 하지만 비트 심도를 제어하는 ​​옵션은 없습니다.-ab

부터…

[비트 전송률] = [채널 수] * [샘플링 속도] * [비트 심도]

...이것은 ffmpeg가 다른 3개의 매개변수로부터 비트 심도를 계산한다는 의미입니까?

다른 게시물비트 심도는 형식 옵션에서 제어된다고 합니다. 사용자가 4개의 매개변수를 모두 설정하면 위의 방정식이 더 이상 유지되지 않을 수 있기 때문에 혼란스럽습니다.

FFmpeg에서 비트 심도와 비트 전송률이 어떻게 작동하는지 설명해 주시겠습니까?

답변1

가능성에 관해서는비트 심도 설정: 소스 파일과 출력 형식에 따라 다릅니다.

예를 들어 take pcm_s16lepcm_s24le-는 모두 PCM 파일을 렌더링하지만 비트 심도는 각각 16비트/24비트입니다. (이 정보는 를 통해 확인할 수 있습니다 ffmpeg -h encoder=<YOUR_ENCODER>.)

여러 비트 깊이를 사용할 수 있는 형식(예: libmp3lame)이 있는 경우 FFmpeg는 기본적으로 소스 파일을 확인하여 사용된 값을 지정합니다. 따라서 -c:a libmp3lame입력 파일의 비트 깊이가 16비트인 경우 FFmpeg는 16비트를 사용하게 됩니다. 32비트 파일이 있고 이를 16비트만 저장할 수 있는 코덱으로 인코딩하려는 경우 FFmpeg가 해당 파일을 샘플링합니다.

하지만 직접 지정할 수도 있습니다.사용하여-sample_fmt.


당신의비트레이트 공식: FFmpeg는 거의 모든 다른 도구와 마찬가지로 오디오 채널 수, 비트 깊이 및 샘플링 속도를 고정 값으로 간주합니다(파일 내에서 변경되지 않음을 의미). 반면 비트 전송률은 인코딩 품질. 그러나 이는 손실이 있는 코덱에만 적용됩니다. 그렇기 때문에 WAV 파일을 200번 다시 인코딩해도 아무런 차이가 없는 반면, 상당히 괜찮은 MP3 인코더를 사용하여 동일한 파일을 20번 다시 인코딩하면 이미 견딜 수 없는 결과가 발생할 수 있습니다.

손실이 있는 코덱은 방정식에 품질을 추가합니다. 예를 들어 MP3에서 값은 320k인코더가 지정된 값 내에서 유지하기 위해 많은 정보를 삭제할 필요가 없기 때문에 매우 좋은 품질을 달성합니다. 를 사용하는 경우 -b:a 64k인코더는 지정된 비트 전송률을 달성하기 위해 많은 정보를 삭제해야 합니다. 인코더는 비트 전송률을 달성하는 데 필요한만큼 낮게 감소합니다.매우 사소하므로 삭제될 수 있는 정보의 이론적인 예만 있습니다.

  • 8~16kHz의 모든 주파수를 하나의 반복합 사인파로 결합하면 인코더가 비트 전송률을 달성할 수 있습니다.
  • -32dB 미만의 모든 신호를 삭제하면 문제가 해결됩니다.

어떤 정보가 삭제될지에 대한 실제 설명을 보려면 먼저 다음 내용을 읽어 보시기 바랍니다.오디오 데이터 압축에 관한 Wikipedia의 기사.

관련 정보