ffmpeg читает из файла и сразу применяет filter_complex - PullRequest
0 голосов
/ 30 января 2020

Я подаю fls.txt в ffmpeg -i и применяю concat и ускорение.

fls.txt

file 'input1.mp4'
file 'input2.mp4'
file 'input3.mp4'

Команда в одном go выглядит следующим образом :

ffmpeg  -i fls.txt     \
-filter_complex "[0:v][0:a][1:v][1:a][2:v][2:a] concat=n=3:v=1:a=1 [v][a];\
[v]setpts=0.5*PTS[v1];[a]atempo=2,asetpts=N/SR/TB[a1]"     \
-c:v h264_nvenc -map "[v1]" -map "[a1]"  x2.mp4

Вывод действительно странный и говорит что-то вроде a stream not found. И это также выглядит так, как будто он пытается понять сам fls.txt, а не его содержимое в качестве параметров. Что я здесь не так делаю и как мне это исправить? Кроме того, это упрощенный пример, и я не могу написать на каждую руку 3 пути к входным файлам. Мне нужно, чтобы это было прочитано из файла. Я на windows 10, если это имеет значение.

РЕДАКТИРОВАТЬ: После внесения предложенных изменений и расширения -filter_complex я получаю ошибку ниже.

ffmpeg -f concat -safe 0 -i fls.txt     \
-filter_complex "[0:v]setpts=0.5*PTS[v1];[v1]setpts=0.5*PTS[v2];[0:a]atempo=2,asetpts=N/SR/TB[a1];[a1]atempo=2,asetpts=N/SR/TB[a2]"     \
-c:v h264_nvenc -map "[v1]" -map "[a1]" x2.mp4 \
-c:v h264_nvenc -map "[v2]" -map "[a2]" x4.mp4

ошибка:

Output with label 'v1' does not exist in any defined filter graph, or was already used elsewhere.

1 Ответ

1 голос
/ 30 января 2020

Спецификатор потока ': a' в описании filtergraph… не соответствует ни одному потоку.

Чтобы включить демультиплексор concat, вы должны использовать -f concat перед -i fls.txt.

ffmpeg -f concat -i fls.txt     \
-filter_complex "[0:v]setpts=0.5*PTS[v1];[0:a]atempo=2,asetpts=N/SR/TB[a1]"     \
-c:v h264_nvenc -map "[v1]" -map "[a1]" x2.mp4

Поскольку вы пытаетесь использовать демультиплексор concat , вам также не нужен фильтр concat , так что вы можете упростить команду.

Возможно, вам также придется использовать -safe 0 перед - i, о котором вы можете прочитать в документации .

Дополнительный вопрос: вывод с меткой 'v1 'не существует ни в одном из определенных графиков фильтров или уже использовался где-либо еще

Вы не можете повторно использовать метки вывода израсходованных фильтров, поэтому в этом примере исключается следующее:

ffmpeg -f concat -safe 0 -i fls.txt     \
-filter_complex "[0:v]setpts=0.5*PTS[2xv];[0:v]setpts=PTS/4[4xv];[0:a]atempo=2,asetpts=N/SR/TB[2xa];[0:a]atempo=4,asetpts=N/SR/TB[4xa]"     \
-c:v h264_nvenc -map "[2xv]" -map "[2xa]" x2.mp4 \
-c:v h264_nvenc -map "[4xv]" -map "[4xa]" x4.mp4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...