如何优化ffmpeg w / x264多个比特率输出文件

目标是创建多个不同于源文件的比特率的输出文件.这些解决方案已被记录在案,但效率不高.我发现最有效的解决方案没有记录在任何可以看到的地方.我在这里发布审查,询问其他人是否知道可以进行的其他优化.

Source file       MPEG-2 Video (Letterboxed) 1920x1080 @>10Mbps
                  MPEG-1 Audio @ 384Kbps
Destiation files  H264 Video 720x400 @ multiple bitrates
                  AAC Audio @ 128Kbps
Machine           Multi-core Processor

每个比特率的视频质量很重要,所以我们以“中等”预设的双通道模式运行

VIDEO_OPTIONS_P2 = -vcodec libx264 -preset medium -profile:v main -g 72 -keyint_min 24 -vf scale = 720:-1,crop = 720:400

第一种方法是将它们全部并行处理

ffmpeg -y -i $INPUT_FILE $AUDIO_OPTIONS_P2 $VIDEO_OPTIONS_P2 -b:v 250k -threads auto -f mp4 out-250.mp4 &
ffmpeg -y -i $INPUT_FILE $AUDIO_OPTIONS_P2 $VIDEO_OPTIONS_P2 -b:v 500k -threads auto -f mp4 out-500.mp4 &
ffmpeg -y -i $INPUT_FILE $AUDIO_OPTIONS_P2 $VIDEO_OPTIONS_P2 -b:v 700k -threads auto -f mp4 out-700.mp4 &

明显的低效率是为每个进程读取,解码,缩放和裁剪相同的源文件.我们如何做到这一点,然后给编码器提供结果?

希望在单个ffmpeg命令中生成所有的编码将优化重复的步骤.

ffmpeg -y -i $INPUT_FILE \
$AUDIO_OPTIONS_P2 $VIDEO_OPTIONS_P2 -b:v 250k -threads auto -f mp4 out-250.mp4 \
$AUDIO_OPTIONS_P2 $VIDEO_OPTIONS_P2 -b:v 500k -threads auto -f mp4 out-500.mp4 \
$AUDIO_OPTIONS_P2 $VIDEO_OPTIONS_P2 -b:v 700k -threads auto -f mp4 out-700.mp4

然而,编码时间几乎与以前的多进程方法相同.这使我相信所有的步骤再次被重复执行.

要强制ffmpeg读取,解码和缩放一次,我将这些步骤放在一个ffmpeg进程中,并将结果传输到另一个执行编码的ffmpeg进程.整体处理时间提高了15%-20%.

INPUT_STREAM="ffmpeg -i $INPUT_FILE -vf scale=720:-1,crop=720:400 -threads auto -f yuv4mpegpipe -"

$INPUT_STREAM | ffmpeg -y -f yuv4mpegpipe -i - \
$AUDIO_OPTIONS_P2 $VIDEO_OPTIONS_P2 -b:v 250k -threads auto out-250.mp4 \
$AUDIO_OPTIONS_P2 $VIDEO_OPTIONS_P2 -b:v 500k -threads auto out-500.mp4 \
$AUDIO_OPTIONS_P2 $VIDEO_OPTIONS_P2 -b:v 700k -threads auto out-700.mp4

有没有人看到这样做的潜在问题,或者知道更好的方法?

如果将音频/视频选项应用于第一个进程的管道输出,则可以节省一些CPU,因为它会将3个编码交换到一个.

ffmpeg -i $INPUT_FILE -vf scale=720:-1,crop=720:400 $AUDIO_OPTIONS_P2 $VIDEO_OPTIONS_P2  -f yuv4mpegpipe -\
    | ffmpeg -y -f yuv4mpegpipe -i - \
          -b:v 250k out-250.mp4 \
          -b:v 500k out-500.mp4 \
          -b:v 700k out-700.mp4

这是旧版本的ffmpeg的推荐方法.本月初以来有一种较新的方法(没有测试):http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputs

相关文章
相关标签/搜索