gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:11:53 25 4
gpt4 key购买 nike

目标是创建多个输出文件,这些输出文件仅在比特率上与单个源文件不同。记录在案的解决方案有效,但效率低下。我发现最有效的解决方案没有记录在我能看到的任何地方。我将其发布在这里以供审查,并询问其他人是否知道可以进行的其他优化。

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

每个比特率的视频质量很重要,因此我们在 2-Pass 模式下运行,预设为“中等”
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 &

The obvious inefficiencies are that the source file is read, decoded, scaled, and cropped identically for each process. How can we do this once and then feed the encoders with the result?

The hope was that generating all the encodes in a single ffmpeg command would optimize-out the duplicate steps.

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

关于ffmpeg - 如何针对多个比特率输出文件优化 ffmpeg w/x264,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12465914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com