Як змусити FFMPEG приєднуватися до непослідовних файлів зображень? (пропустити 3s)


27

У мене є купа зображень, які відповідають цій схемі.

0001.png
0004.png
0007.png
0010.png
0013.png
0016.png
0019.png
...

Вони в правильному порядку, але FFMPEG ігнорує що-небудь після першого файлу, оскільки він не може знайти 0002.png. Як я можу змусити його приєднатися до цих файлів?

я намагався

ffmpeg -i %04d.png out.avi

2
Як щодо тимчасового перейменування їх, перетворення AVI і перейменування їх на схему (3x-2) .png? Групова перейменування утиліта @ bulkrenameutility.co.uk/Main_Intro.php - безкоштовний, вмм, масовий перейменувач.
Gyan

Відповіді:


18

З ffmpeg 0.11.1 це так просто, як:

ffmpeg -f image2 -i %*.png out.avi

На manсторінці, у прикладі в розділі "Перетворення формату відео та аудіо файлів":

Під час імпорту послідовності зображень -iтакож підтримується внутрішнє розширення шаблонів підстановок (глобальних). Щоб знизити ймовірність втручання з реальними іменами та розширенням Глоба оболонкою, ви повинні активує символи Глоба метой випереджаючи їх з одним %характером, як і в foo-%*.jpeg, foo-%?%?%?.jpegабо foo-00%[234%]%*.jpeg.

Оновлення за коментарями: в останніх версіях тепер слід використовувати -i '*.png'синтаксис.


3
Це не працює для мене з використанням ffmpeg або avconv в Ubuntu 13.04
hellocatfood

2
Здається, це вже не варіант.
Timmmm

2
Тип glob_sequenceшаблону застарілий, але globтип шаблону - ні. Відповідь Мульвія та Пітера Кордеса працює.
д-р. Sybren

1
Pattern type 'glob_sequence' is deprecated: use pattern_type 'glob' instead
Серж Стротобандт

1
Так само, як уточнення, оскільки ця сторінка в даний час є головним результатом в Google для цього попереджувального повідомлення ( Pattern type 'glob_sequence' is deprecated...): команда, задана rymo вище (конкретно, -i %*.png) призведе до попередження. Щоб усунути його, використовуйте дещо інший синтаксис у відповіді Пітера Кордеса ( -i '*.png').
Джеймс

19

Крім вирішення в моєму коментарі, ви повинні мати можливість використовувати цей синтаксис із документації на ffmpeg :

ffmpeg -f image2 -pattern_type glob -i '*.png' out.avi

Цитати важливі, для перегляду потрібен ffmpeg *, а не оболонка розгортати його.


Це не працює для мене, але це, мабуть, тому, що я маю більш стару форму. Я приймаю цю, оскільки це, швидше за все, допоможе майбутнім користувачам.
Бриганд

Відповідно до документації ffmpeg, ви повинні використовувати '* .png' замість% 04d.png з типом шаблону glob.
Друг Джорджа

Тоді вибиратимуться всі png-файли, присутні у папці, крім 00xx.png, тоді як ОП хоче встановити в чергу лише% 04d pngs, не турбуючись про безперервність нумерації.
Gyan

2
Я майже впевнений, що вам потрібно ввести *.pngоднозначні лапки (так '*.png'), щоб уникнути його розширення оболонками стилю Unix (так, OSX і Linux тощо).
evilsoup

1
На жаль, розробники ffmpeg роблять опцію підтримки глобальної передачі файлів ! Стандартні складання Windows не включають його.
Timmmm

9

Від http://www.ffmpeg.org/faq.html : Якщо у вас є велика кількість зображень для перейменування, ви можете скористатися наступною командою, щоб полегшити тягар. Команда, використовуючи синтаксис оболонки 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)); done


Я використовував це , щоб об'єднати кілька послідовностей seqA-[0001-n].png, seqB-[0001-n].pngі т.д. Набагато простіше , ніж морочитися з IMAGE2 і будуються по Concat фільтра.
z0r

Для мене це не працювало , поки я не замінив for i in *jpgз for i in /full/path/*jpg, тому що все аліаси були розбиті
Jezzamon

4

Я б насправді запропонував те саме, що запропонував і Мульвія. Кожен раз, коли мені потрібно було робити подібні речі під час роботи з 3D-анімацією, я перейменував файли, щоб зробити їх послідовними. Працювати з цим способом просто в багатьох різних програм, якщо вам не потрібно зберегти імена файлів з якоїсь причини. Total Commander - це також чудовий інструмент для перейменування.


Я в кінцевому підсумку робив щось подібне (сценарій перейменування Python).
Бриганд

3

Для відсутньої частини послідовності я використав 2 вкладиші

CONCAT=$(echo $(ls *.png | sort -n -t _ -k 2) | sed -e "s/ /|/g")
ffmpeg -framerate 25 -i "concat:$CONCAT" -c:v libx264 -profile:v high -pix_fmt yuv420p output.mp4

Сподіваюся, це допоможе комусь у майбутньому

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.