2017-12-25 18 views
0

저는 system()을 통해 ffmpeg를 호출하여 JPG 시퀀스에서 비디오를 인코딩하는 시간 경과 프로그램에서 작업하고 있습니다. 사용자는 압축 코덱을 포함하여 몇 가지 옵션을 선택할 수 있습니다. libx264 및 mjpeg 인코더를 사용할 때 매우 좋은 결과를 얻고 있습니다. 저는 VP9를 통해 결과를 얻었습니다. VP8을 사용하여 끔찍한 결과를 얻고 있습니다.잘못된 비디오를 생성하는 VP8로 인코딩 된 ffmpeg

다음과 같이 ffmpeg를 호출합니다. ffmpeg.exe -framerate 12 -i "./output/img_%05d.jpg"-dst_range 1 -color_range 2 -c : v libvpx -b : v 0 -threads 8 - 속도 2 내가 YouTube에 샘플을 업로드 8 "./output/video.webm"

-crf :. https://www.youtube.com/watch?v=eG2jxzR3Uxs가 (당신이 9 초 표시 후 정말 나쁜 프레임을 볼 수

내가 뭐하는 거지 어떤 생각 잘못 되었습니까?

답변

3

CRF (libvpx wiki도 참조)를 사용하는 경우에도 최상의 결과를 얻으려면 2 패스 인코딩을 사용하는 것이 좋습니다. 여기에서 사용하는 1 패스 Ally는 libvpx로 꽤 나쁜 결과를 낸다. CRF는 멀티 패스의 영향을받지 않아야한다는 것을 알고 있습니다.하지만 불행히도 libvpx는 그 점에서 조금 다릅니다. 다른 엔코더는 1 패스 CRF로 잘 작동합니다.

CRF 인덱스가 같더라도 반드시 동일한 유효 양자화기를 선택하거나 동일한 비트 전송률로 가깝지는 않습니다. 하나의 인코더 또는 코드가 효과적인 비트 전송률을 고려하지 않고 다른 것보다 더 나은 결과를 제공한다는 사실은 그 자체만으로는별로 유용하지 않으며 일반적으로 비트 전송률의 함수로 품질을 분석합니다.

VBR을 사용하면 다소 개선 될 수 있지만 속도 제어/목표 지정이 좋지 않은 경우 실제 비트 전송률이 대상 비트 전송률과 상당히 다를 수 있으므로 대상이 아닌 실제 비트 전송률을 관찰해야합니다. 전송률.

+0

각 압축마다 다른 CRF를 사용하고 있습니다 (예를 들어, libx264는 18과 28 사이 또는 그와 비슷한 것을 선호합니다). 수동으로 비트 전송률을 설정하면 더 좋을까요? – Radu

+0

또한 vp8과 vp9 모두 거의 동일한 설정을 사용하고 있으며 vp9는 나에게 훨씬 나은 결과를 제공합니다. vp9 동영상보기 : https://www.youtube.com/watch?v=achbQzpZ7YY – Radu

+1

단일 패스를 고수하려면 권장되는 명령은 무엇입니까? – Mulvya