Несколько выходов из одного источника

#ffmpeg #multipleoutputs

Вопрос:

Как изменить эту строку ffmpeg для создания нескольких выходных данных с разными битрейтами видео? Это для экономии времени, когда yadif=1 требует много энергии. Кроме того, не удается заставить его принимать yadif_cuda в Windows.

ffmpeg-y-f lavfi-i полный rcr=cl=моно:частота дискретизации=48000-i «test.mxf» -vf yadif=1-s 1920:1080-c:v264_nvenc-принудительные кадры «expr:gte(t,n_форсировано*10)» -pix_fmt yuv420p-предустановленный медленный-rc vbr_hq-b:v 4,5 м-карта 1:v-карта 0:a-c:aac-b:a 192k-самый короткий «тест.mp4»

Ответ №1:

Реализация моего комментария

самый короткий-это вариант вывода. Ваша команда отключает и масштабирует видео дважды. Используйте filter_complex, определите и масштабируйте один раз, затем используйте разделение для получения двух выходных данных. Сопоставьте по одному на каждый вывод.

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"

Ответ №2:

Все, что следует за последней опцией «-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 это опция ввода, поэтому ее следует указывать только один раз.

Комментарии:

1. самый короткий-это вариант вывода. Ваша команда отключает и масштабирует видео дважды. Используйте filter_complex, определите и масштабируйте один раз, затем используйте разделение для получения двух выходных данных. Сопоставьте по одному на каждый вывод.

2. Не могли бы вы, пожалуйста, привести мне пример моей строки с разделением filter_complex и отображением.

3. Думаю, я понял (вроде); тест ffmpeg-y-hwaccel cuvid-i.mxf-самый короткий-filter_complex «[0:v]yadif=1,масштаб=1920:1080,разделение=2[out1][out2]» -карта «[out1]» -c:v h264_nvenc-force_key_frames «expr:gte(t,n_forced*10)» -pix_fmt yuv420p-предустановка медленный-rc vbr_hq-b:v 4.5 M test2.mp4-сопоставление «[out2]» -c:v h264_nvenc-force_key_frames «expr:gte(t, n_forced*10)» -pix_fmt yuv420p-медленная настройка-rc vbr_hq-b:v 9 М test3.mp4 Но как я один раз кодирую аудио и сопоставляю его?