来自同一来源的多个输出

Multiple outputs from same source

如何修改此 ffmpeg 字符串以生成具有不同视频比特率的多个输出? 这是为了在 yadif=1 消耗大量电量时节省时间。另外,无法让它在 windows.

中接受 yadif_cuda

ffmpeg -y -f lavfi -i anullsrc=cl=mono:sample_rate=48000 -i "test.mxf" -vf yadif=1 -s 1920:1080 -c: v h264_nvenc -force_key_frames "expr:gte(t,n_forced*10)" -pix_fmt yuv420p -preset slow -rc vbr_hq -b:v 4.5M - map 1:v -map 0:a -c:a aac -b:a 192k -shortest "test.mp4"

最后一个“-i”选项之后的所有内容都定义了输出选项,因此您必须重复所有输出选项,只更改您想要不同的选项。

例如

ffmpeg -y -f lavfi -i anullsrc=cl=mono:sample_rate=48000 -i "test.mxf" -shortest \
-vf yadif=1 -s 1920:1080 -c:v h264_nvenc -force_key_frames "expr:gte(t,n_forced*10)" -pix_fmt yuv420p -preset slow -rc vbr_hq -b:v 4.5M -map 1:v -map 0:a -c:a aac -b:a 192k "test.mp4" \
-vf yadif=1 -s 1920:1080 -c:v h264_nvenc -force_key_frames "expr:gte(t,n_forced*10)" -pix_fmt yuv420p -preset slow -rc vbr_hq -b:v 9.0M -map 1:v -map 0:a -c:a aac -b:a 192k "test2.mp4"

请注意 -shortest 是一个输入选项,因此只能指定一次。

执行我的评论

shortest is an output option. Your command deinterlaces and scales the video twice. Use filter_complex, deint and scale once, thn use split to produce two outputs. Map one each per output.

ffmpeg -y -i "test.mxf" -f lavfi -i anullsrc=cl=mono:sample_rate=48000 -filter_complex "yadif=1,scale=1920x1080,format=yuv420p,split=2[90m][45m]" -map "[90m]" -map 1:a -force_key_frames "expr:gte(t,n_forced*10)" -c:v h264_nvenc -preset slow -rc vbr_hq -b:v 9.0M -c:a aac -b:a 192k -shortest -fflags +shortest -max_interleave_delta 200M "test90m.mp4" -map "[45m]" -map 1:a -force_key_frames "expr:gte(t,n_forced*10)" -c:v h264_nvenc -preset slow -rc vbr_hq -b:v 4.5M -c:a aac -b:a 192k -shortest -fflags +shortest -max_interleave_delta 200M "test45m.mp4"