【发布时间】:2018-04-04 12:49:26
【问题描述】:
我是使用 ffmpeg 开发的新手,我想知道是否可以通过在具有相同输入文件和相同配置的不同机器(使用不同编译器编译)上使用 libx264 编码器运行 ffmpeg 来获得相同的位精确输出选项?
如果可以的话,编译libx264/ffmpeg时是否需要设置额外的配置选项?如果不可能,为什么?
以下是我在 ffmpeg 上使用 libx264 运行的两个版本的输出,它们会产生不同的输出 MD5 哈希值。
在 OSX 上通过 homebrew 安装的 ffmpeg
ffmpeg version 3.4 Copyright (c) 2000-2017 the FFmpeg developers
built with Apple LLVM version 9.0.0 (clang-900.0.38)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.4 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --disable-lzma --enable-nonfree
Alpine Linux 上的 ffmpeg(在基于 https://github.com/jrottenberg/ffmpeg/blob/master/docker-images/3.4/alpine/Dockerfile 的 Docker 容器中)
ffmpeg version 3.4 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 6.2.1 (Alpine 6.2.1) 20160822
configuration: --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --disable-lzma --enable-nonfree --prefix=/opt/ffmpeg
在 OSX 上使用 ffmpeg 测试运行
ffmpeg -i seg.ts -c:v libx264 -s 1280x720 -minrate 6000k -maxrate 6000k -bufsize 6000k -r 60 -threads 1 -f md5 -
输出
MD5=b7c84c0bae5da6749e389a5b69d88582
在 Alpine Linux 上使用 ffmpeg 测试运行(在基于 https://github.com/jrottenberg/ffmpeg/blob/master/docker-images/3.4/alpine/Dockerfile 的 Docker 容器中)
docker run --rm -v /code/:/tmp/workdir -w=/tmp/workdir ffmpeg -i seg.ts -c:v libx264 -s 1280x720 -minrate 6000k -maxrate 6000k -bufsize 6000k -r 60 -threads 1 -f md5 -
输出
MD5=c46af8fbdbbb2bfbb9f7042ab28accfc
【问题讨论】:
-
出于好奇:你为什么需要这个?
-
对于调试:计算这个哈希值仅用于解码。我可以想象已经存在一些差异(在某些情况下:例如一些音频编解码器)。
-
尝试检查编码是否在一台机器上与另一台机器正确执行。在没有
-c:v libx264的情况下运行 ffmpeg 会导致每台机器的哈希值相同。 -
只是为了清楚并排除任何明显的东西:您是否能够在同一操作系统上使用相同的 ffmpeg 命令行生成相同的 MD5?
-
您是否尝试过使用固定比特率
-b:v和恒定比特率-vbr off?
标签: ffmpeg video-encoding x264 libx264