mp4 파일을 webm 품질 손실없이 (vp8 또는 vp9 사용) ffmpeg?

ffmpeg -i in.mp4 out.webm를 수행하면 품질이 매우 나쁩니다. -b:v를 통해 대상 전송률을 지정하고 crf를 통해 일정 품질 모드를 지정할 수 있습니다. 즉

ffmpeg -i in.mp4 -crf 10 -b:v 1M out.webm

더 나은 품질을 제공합니다. 그러나이를 위해 입력 비디오 (여기서는 1M)의 비트 레이트를 조회해야합니다.

또한 입력의 비트 전송률보다 대상 비트 전송률에 훨씬 더 큰 값을 지정하면 (여기서는 -b:v 100M) ffmpeg가 vp9에서는 입력 비디오의 비트 레이트를 사용하고 vp8에서는 약간 더 높은 비트 레이트를 사용하십시오. 그러나이 솔루션은이를위한 의도 된 방법이 아닌 것 같습니다.

crf 값을 어떻게 선택하고 그 이유는 무엇입니까?

비트 전송률을 자동으로 선택하는 매개 변수가 있습니까? 입력 파일과 입력 파일과 동일한 품질을 얻기위한 적절한 crf 값?

댓글

  • 비트 전송률을 0으로 설정하고 crf로 실험합니다. .하지만 값이 대상이 아닌 상한선 역할을하므로 높은 비트 전송률을 사용하는 방법도 작동합니다.
  • @Mulvya : 비트 전송률 0은 제한이 없음을 의미합니까? ' 맨 페이지에서 찾을 수 없습니다.
  • 비트 전송률이 0으로 설정되지 않은 경우 CRF는 해당 값에 의해 제한됩니다. 0 일 경우 ' 그렇지 않습니다. ' VPn 인코더의 특징입니다.
  • 좋습니다.하지만 비트 레이트 매개 변수를 완전히 생략하면 품질이 매우 나빠집니다. div id = “b75c8193b8″>

비트 전송률에 대한 상한을 지정하지 않습니다.

  • 링크 (200k) (첫 번째 옵션 참조 의 위에). WebM b : v 0의 경우이 페이지 를 참조하세요.
  • Answer

    답변

    2 단계 고정 품질 모드 사용 : ¹

    ffmpeg -i input.mp4 -b:v 0 -crf 30 -pass 1 -an -f webm /dev/null ffmpeg -i input.mp4 -b:v 0 -crf 30 -pass 2 output.webm 

    설명 :

    동영상 비트 전송률을 0 으로 설정하고 CRF (Constant Rate Factor)를 지정하면 특정 지각 품질 수준을 대상으로하는 Constant Quality 모드가 활성화됩니다. VP9의 경우 CRF 범위는 0 (최고 품질)에서 63 (가장 작은 파일 크기)까지입니다.

    비디오 비트 전송률을 0으로 설정하는 것이 중요합니다. 동영상 전송률을 지정하지 않으면 기본적으로 낮은 값으로 설정되어 각 프레임의 전송률이 최대 인 제한 품질 모드가됩니다. 스트리밍에 유용 할 수 있지만 움직임이 많은 프레임은보기에 필요한 대역폭이 부족하므로 품질이 크게 저하됩니다.

    품질을 잃는 또 다른 이유는 webm (VP9)는 최상의 결과를 위해 두 번의 패스로 인코딩하는 것을 선호합니다. 첫 번째 단계는 동영상에 대한 통계를 컴파일 한 다음 두 번째 단계에서 더 작고 고품질의 동영상을 만드는 데 사용됩니다.

    ffmpeg VP9 문서를 참조하세요. 자세한 내용을 알고 싶으면

    트랜스 코딩에 대한 단어

    그런데 일반적으로 트랜스 코딩 형식 (압축 된 동영상을 가져 와서 다른 코덱)은 손실이 많은 비디오 인코딩으로 인한 정상적인 오류를 추가 할뿐만 아니라 이전의 아티팩트를 보존하기 위해 새로운 형식으로 비트를 낭비하게되므로 나쁜 생각입니다.

    문자 그대로 “품질 손실없이”를 의미합니다.

    ffmpeg VP9 인코더의 -lossless 1 옵션은 무손실 품질 모드를 활성화하지만 잠재적으로 파일 크기가 엄청나게 증가 할 수 있습니다.

    필요한 것은 이것뿐입니다.

    ffmpeg -i input.mp4 -lossless 1 output.webm 

    저품질 iv에서 -lossless 1를 시도했을 때 id = “b3d6c164f5″>

    , 결과 webm는 100 배 더 컸습니다. 나에게 허용됩니다. 그러나 mp4 파일의 품질이 이미 매우 높으면 크기 차이가 크지 않을 것으로 예상합니다.


    각주 1 : 다음과 같은 경우 “UNIX 대신 Microsoft Windows를 사용하는 경우 /dev/nullNUL로 변경하세요.

    댓글

    • 훌륭한 답변 감사합니다
    • /dev/null? 이것은 무엇을 의미합니까? Windows 사용자에게 해당하는 것은 무엇입니까? 덮어 쓰고 있습니까 input.mp4 첫 번째 단계인가요?이 답변은 각 구성 요소가 정확히 무엇을하는지에 대한 자세한 설명이 필요합니다. ' 중급 사용자에게 많은 설명을 제공하지 않습니다. 작동 방식입니다.
    • 안녕하세요 Hatefriend : 제 답변에는 이미 긴 설명 섹션과 자세한 정보를위한 링크가 포함되어 있으므로 ' 시간을 늘리지 않고 싶습니다. 특정 질문에 대한 답변을 제공하는 Microsoft Windows 관련 각주를 보셨나요? 또한 위에서 언급했듯이 첫 번째 통과 compi 입력 파일에 대한 통계.입력을 덮어 쓸까 걱정할 필요가 없습니다.
    • 이 두 명령을 사용하여 .MTS 파일을 .webm으로 변환 해 보았습니다 (Ubuntu 20.10, ffmpeg 버전 4.2.2). 하지만 오류가 있습니다. " 지정된 매핑 제품군 -1에 대한 잘못된 채널 레이아웃 5.1 (측면). 출력 스트림 초기화 오류 0 : 1-출력 스트림 # 0 : 1에 대한 인코더를 여는 동안 오류 발생-bit_rate, rate, width 또는 height와 같은 잘못된 매개 변수 일 수 있음 "
    • 답변을 주셔서 감사합니다. 일반적으로 트랜스 코딩이 좋지 않은 경우 mp4 비디오를 webm으로, webm 비디오를 mp4로 변환해야하는 경우 대신 무엇을 권장합니까?

    Answer

    Linux에서는 iv id = “6eac0f9e13에 따라 해당 설정을 자동으로 감지하는 ffmpeg의 래퍼 인 optimizeVideo 를 사용합니다. “>

    Google의 권장 사항 .

    결과는 품질 차이는 알 수 없지만 일반적으로 훨씬 작은 동영상이됩니다.

    로고

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다