Avconv: сделать видео из подмножества на изображениях
Я пытаюсь сделать кучу png в видео с помощью avconv, png пронумерованы как filename_<number>
, поэтому я обычно просто использую команду:
avconv -r 10 -i filename_%d.png -b:v 1000k test.mp4
Теперь я хочу сделать видео из подмножества файлов filename_8
- filename_50
, скажем, поэтому я скопировал эти файлы в новый каталог и попробовал ту же команду, но теперь я получаю сообщение об ошибке:
filename_%d.png: No such file or directory
Я предполагаю, что это потому, что нумерация не начинается с 1?
Как я могу это достичь?
Ответы
Ответ 1
avconv -r 10 -start_number 8 -i filename_%d.png -b:v 1000k test.mp4
Для параметра -start_number
вам понадобится последняя версия avconv. это не в версии 0.8.x. В качестве альтернативы вы можете использовать недавнюю версию ffmpeg. Или переименуйте файлы, чтобы начать с номера от 0 до 4, поскольку он будет проверять эти имена по умолчанию.
Ответ 2
Вы можете конкатенировать файлы с помощью cat, а затем использовать demoxer image2pipe, чтобы читать их в avconv. Как cat filename* | avconv -f image2pipe -i - ...
Ответ 3
Проверьте это; согласно ffmpeg, это то, как они это делают, и это работает.
- Сначала переименуйте свои фотографии, чтобы следовать числовой последовательности. Для
Пример:
img1.jpg, img2.jpg, img3.jpg, ...
-
Затем вы можете запустить:
ffmpeg -f image2 -i img%d.jpg /tmp/a.mpg
Обратите внимание, что %d
заменяется номером изображения.
img%03d.jpg
означает последовательность img001.jpg
,
img002.jpg
и т.д.
-
Используйте параметр '-start_number, чтобы объявить начальный номер для
последовательность. Это полезно, если ваша последовательность не начинается с
img001.jpg
, но все еще находится в числовом порядке. Следующие
пример начинается с img100.jpg
:
ffmpeg -f image2 -start_number 100 -i img%d.jpg /tmp/a.mpg
-
Если у вас есть большое количество изображений для переименования, вы можете использовать
следуя команде для облегчения бремени. Команда, используя bourne
синтаксис оболочки, символически связывает все файлы в текущем каталоге
которые соответствуют * jpg в каталоге /tmp
в последовательности
img001.jpg
, img002.jpg
и т.д.
x=1;
for i in *jpg;
do counter=$(printf %03d $x);
ln -s "$i" /tmp/img"$counter".jpg;
x=$(($x+1));