ffmpeg видео списка изображений в папке - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь создать анимацию из png файлов. Все они находятся в одной папке и называются

step0.png
step1.png
step2.png
.....

step19998.png
step19999.png

I кадр представляет 0,01 с, поэтому я думаю, что мне нужно 100 кадров в секунду.

команда, которую я пытался:

ffmpeg -r 100 -f image2 -pattern_type glob -i '*.png' -vcodec libx264 -crf 1  -pix_fmt yuv420p test.mp4

По какой-то причине он не собирает их в правильном порядке, но когда я поместил последние 500 в другую папку и выполнил команду там, это сработало отлично.

1 Ответ

2 голосов
/ 31 марта 2020

Для большинства ваших шагов вам не хватает лидирующих нулей, поэтому они не будут правильно сортироваться. Например:

for i in $(seq 1 20); do
 echo "step$i.png"
done | sort

выход

step10.png
step11.png
step12.png
step13.png
step14.png
step15.png
step16.png
step17.png
step18.png
step19.png
step1.png
step20.png
step2.png
step3.png
step4.png
step5.png
step6.png
step7.png
step8.png
step9.png

Обратите внимание на неправильный порядок. И наоборот, ведущие нули решают проблему. Предшествующие нули, подобные этому

for i in $(seq 1 20); do
printf "step%02d.png\n" $i
done | sort

, дают последовательность

step01.png
step02.png
step03.png
step04.png
step05.png
step06.png
step07.png
step08.png
step09.png
step10.png
step11.png
step12.png
step13.png
step14.png
step15.png
step16.png
step17.png
step18.png
step19.png
step20.png

Как вы, вероятно, хотите. Итак, я рекомендую добавить начальные нули в имена файлов.

Простой способ переименовать файл будет:

for num in $(seq 0 19999); do
  fnum=$(printf "%05d" $num)
  mv "step${num}.png" "step${fnum}.png"
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...