FFmpeg는 매번 동일한 바이너리 출력 파일을 생성합니까?

FFmpeg는 매번 동일한 바이너리 출력 파일을 생성합니까?

소스 파일이 변경되지 않고 동일한 FFmpeg 버전이 사용된다고 가정하면 출력 파일은 항상 동일합니까?

확장자가 AVI인 소스 파일이 있다고 가정해 보겠습니다. 기본 FFmpeg 설정을 사용하여 MP4로 변환하면 각 FFmpeg 실행에서 비트 동일한 파일이 생성됩니까?

답변1

적격 답변은 '예'입니다. 일반적인 차이점은 인코더 및 멀티플렉서에 포함된 버전 문자열로 인해 발생합니다. 추가하면 -bitexact해당 항목이 억제됩니다.

그러나 x265와 같은 일부 인코더는 멀티스레드 인코딩에서 비결정적입니다.

PPC 및 Altivec 아키텍처의 일부 DSP 루틴과 몇 가지 픽셀 형식 변환 루틴과 같은 몇 가지 다른 틈새 사례가 있습니다. -bitexact루틴이 선택되는 경우에도 여기에 효과가 있습니다.

FFmpeg에는 자동화된 회귀 테스트 제품군이 있으며, 공개 결과는 다음에서 볼 수 있습니다.운명.ffmpeg.org.

거의 모든 테스트는 참조 실행의 해시와 비교하여 확인됩니다. 기본적으로 비트 정확성이 필요합니다.

답변2

사용되는 코덱과 옵션에 따라 다릅니다.

  1. 명령은 ffmpeg -i big_buck_bunny_480p_stereo.avi out.mp4동일한 바이너리 파일을 생성합니다. 하지만 비트레이트 옵션을 추가하면
ffmpeg -i big_buck_bunny_480p_stereo.avi -maxrate 500k -bufsize 500k out.mp4

을 사용해도 다른 결과를 얻을 수 있습니다 -bitexact.

따라서 x264(libx264를 사용할 수 있는 경우 기본값 .mp4), 다중 스레드(기본적으로 스레드 수는자동으로 선택됨) 및 비트 전송률 옵션은 다른 바이너리를 생성할 수 있습니다.

  1. 다음 사항을 확인해야 할 수도 있습니다.코덱버전(ffmpeg 버전뿐만 아니라)은 ffmpeg와 동일하며 동일한 버전은 다른 버전의 libx264를 사용하도록 구성할 수 있으며 이로 인해 동일한 파일의 인코딩 전체에 걸쳐 다른 바이너리가 생성될 수 있습니다. 안타깝게도쉬운 방법은 없어코덱 버전을 확인하려면

관련 정보