蒸汽选择

蒸汽选择

我在 FFMpeg 中得到了以下命令:

ffmpeg -i file_input.mp4 -filter_complex split=2[i1][i2];[i1]scale=trunc(oh*a/2)*2:480[o1];[i2]scale=trunc(oh*a/2)*2:640[o2] -map [o1] -map 0:a -pix_fmt yuv420p -vcodec libx264 file_out_1.mp4 -map [o2] -map 0:a -pix_fmt yuv420p -vcodec libx264 file_out_2.mp4

此命令的作用是将我的源文件分成两部分,将视频缩放为两种不同的格式,然后使用编解码器重新编码视频流x264。到目前为止一切顺利。

现在请注意-map 0:a标志。如果我从两个流中的任何一个中删除它,则生成的输出文件将完全没有音频。这让我怀疑过滤器是否scale会自动从花束中删除音频,或者是其他原因。

如果我稍微将命令改为这样,并尝试从结果 [o1] 或 [o2] 中获取音频流,但仍然无法获得声音:

ffmpeg -i eFront_sample.mp4 -filter_complex split=2[i1][i2];[i1]scale=trunc(oh*a/2)*2:480[o1];[i2]scale=trunc(oh*a/2)*2:640[o2] -map [o1]:a -pix_fmt yuv420p -vcodec libx264 file_out_1.mp4 -map [o2]:a -pix_fmt yuv420p -vcodec libx264 file_out_2.mp4

我在这里遗漏了什么?

提前致谢。

答案1

蒸汽选择

默认情况下,每个流类型将选择一个流。如果您使用-map此默认流选择行为将被禁用。

但是,通常建议明确定义过滤器输入和输出,而不是依赖默认值,以避免意外的流选择问题。

规模

trunc(oh*a/2)*2您可能只需使用 即可。-2摘自比例视频过滤器文档:

如果其中一个值为 -n 且 n > 1,则缩放过滤器还将使用一个值来保持输入图像的纵横比,该值是根据另一个指定维度计算得出的。但此后,它将确保计算出的维度可以被 n 整除,并在必要时调整该值。

x264 要求在输出 yuv420p 时宽度和高度可以被 2 整除,因此它-2会假设您声明的值是可以接受的来处理这个问题。

例子

您的结果命令可能看起来像这样:

ffmpeg -i input.mp4 -filter_complex \
"[0:v]split=2[i1][i2]; \
 [i1]scale=-2:480,format=yuv420p[o1]; \
 [i2]scale=-2:640,format=yuv420p[o2]" \
-map "[o1]" -map 0:a -c:v libx264 output1.mp4 \
-map "[o2]" -map 0:a -c:v libx264 output2.mp4

相关内容