
소스 파일이 변경되지 않고 동일한 FFmpeg 버전이 사용된다고 가정하면 출력 파일은 항상 동일합니까?
확장자가 AVI인 소스 파일이 있다고 가정해 보겠습니다. 기본 FFmpeg 설정을 사용하여 MP4로 변환하면 각 FFmpeg 실행에서 비트 동일한 파일이 생성됩니까?
답변1
적격 답변은 '예'입니다. 일반적인 차이점은 인코더 및 멀티플렉서에 포함된 버전 문자열로 인해 발생합니다. 추가하면 -bitexact
해당 항목이 억제됩니다.
그러나 x265와 같은 일부 인코더는 멀티스레드 인코딩에서 비결정적입니다.
PPC 및 Altivec 아키텍처의 일부 DSP 루틴과 몇 가지 픽셀 형식 변환 루틴과 같은 몇 가지 다른 틈새 사례가 있습니다. -bitexact
루틴이 선택되는 경우에도 여기에 효과가 있습니다.
FFmpeg에는 자동화된 회귀 테스트 제품군이 있으며, 공개 결과는 다음에서 볼 수 있습니다.운명.ffmpeg.org.
거의 모든 테스트는 참조 실행의 해시와 비교하여 확인됩니다. 기본적으로 비트 정확성이 필요합니다.
답변2
사용되는 코덱과 옵션에 따라 다릅니다.
- 명령은
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
), 다중 스레드(기본적으로 스레드 수는자동으로 선택됨) 및 비트 전송률 옵션은 다른 바이너리를 생성할 수 있습니다.
- 다음 사항을 확인해야 할 수도 있습니다.코덱버전(ffmpeg 버전뿐만 아니라)은 ffmpeg와 동일하며 동일한 버전은 다른 버전의 libx264를 사용하도록 구성할 수 있으며 이로 인해 동일한 파일의 인코딩 전체에 걸쳐 다른 바이너리가 생성될 수 있습니다. 안타깝게도쉬운 방법은 없어코덱 버전을 확인하려면