ffmpeg-pattern_type шарик — не загружающиеся файлы в правильном порядке

Если можно все еще получить доступ к консоли текстового режима, или если можно войти в систему удаленно:

  • Можно использовать ps или другие инструменты для размещения объявлений процесса и уничтожают, чтобы попытаться уничтожить некоторые процессы. Несколько программ сохранят Вашу работу (по крайней мере, в файл восстановления), если они получат a kill -HUP или плоскость kill. У них не могло бы быть времени, чтобы сделать это, если Вы идете прямо для перезагрузки.
  • Выполненный sudo kill сопровождаемый идентификатором процесса для уничтожения процесса это работает как корень или некоторый другой пользователь, который не является Вами.
  • Выполненный reboot к перезагрузке (например. sudo reboot если Вы используете sudo получить административный доступ). Выполненный halt выключать компьютер. Оба из них звонят shutdown с подходящими вариантами.

Если абсолютно все полито из шланга, но у Вас есть консольный доступ, можно использовать волшебный SysRq, чтобы, по крайней мере, сбросить все изменения файла в дисковых файловых системах размонтирования чисто.Пресса

  1. Alt+SysRq+E для отправки SIGTERM во все процессы (дополнительно).
  2. Alt+SysRq+S для синхронизации (сбрасывают) изменения файловой системы в диске.
  3. Alt+SysRq+U для мощного размонтирования (на самом деле повторно смонтируйтесь только для чтения), все файловые системы.
  4. Alt+SysRq+B к перезагрузке.

(Примечание: Вы будете иногда видеть “REISUB”, но R и я ступаем, бесполезны.)

5
25.05.2013, 02:45
3 ответа

ffmpeg concat те же типы файлов

Вы могли использовать команду как это для конкатенации списка файлов любым путем, Вы хотите:

ffmpeg -f concat -i <( for f in *.wav; do echo "file '$(pwd)/$f'"; done ) \
         output.wav

Вышеупомянутое может только работать, если файлы, которые Вы связываете, являются всеми одинаковыми кодеки. Таким образом, они должны были бы все быть .wav или .mpg, например.

Примечание: У Вас должен быть ffmpeg v1.1 или выше использовать concat demuxer, можно читать больше о вышеупомянутом примере и также как связать различные кодеки с помощью этой техники на ffmpeg веб-сайте.

ffmpeg, использующий printf средства форматирования

Ffmpeg может также взять вход с помощью printf средств форматирования такой как %d. Это соответствует цифрам, запускающимся в 0 и повышающимся оттуда в порядке. Если бы числа были структурированы как это, 000 - 099, то Вы могли бы использовать это средство форматирования, %03d, что означает серию 3 цифр, дополненный нуль.

Таким образом, Вы могли сделать что-то вроде этого:

ffmpeg -r 25 -i %d.png -qscale 3 -s 1920x1080 -c:v wmv1 video.wmv

Вышеупомянутое не вполне работало на меня, ffmpeg жаловался на опцию -c:v. Я просто опустил ту опцию, и эта версия команды работала как ожидалось.

ffmpeg -r 25 -i %d.png -qscale 3 -s 1920x1080 video.wmv
4
27.01.2020, 20:37
  • 1
    , я на самом деле люблю Вашу идею, к сожалению, я добираюсь: [concat @ 0xac21ce0] Line 1: unknown keyword '0.jpg' /dev/fd/63: Invalid data found when processing input какие-либо идеи, к почему? –  Torxed 25.05.2013, 02:45
  • 2
    Дайте мне немного, я должен буду установить поддельный набор данных для испытания этого. –  slm♦ 25.05.2013, 02:47
  • 3
    я стоял в неправильной папке, выполняющей команду, но однако, видит ниже комментария. –  Torxed 25.05.2013, 02:48
  • 4
    Altho, все еще добираясь /dev/fd/63: Invalid data found when processing input При решении этого Вы поймете мысли, потому что я боюсь переименования файлов этой величины, имел неудачные опыты прежде. –  Torxed 25.05.2013, 02:50
  • 5
    @Torxed, проверьте обновления, должен был изменить тактику немного. –  slm♦ 25.05.2013, 03:20

Лучший способ состоит в том, чтобы переименовать файл так, чтобы у них всех было то же количество цифр. С zsh (4 максимальное количество цифр):

autoload zmv     # put this in your ~/.zshrc
zmv '(<->).jpg' '${(l:4::0:)1}.jpg'

С другими оболочками (продолжаются и добавляют 0по мере необходимости, если существуют имена файлов больше чем с 4 цифрами):

for x in [0-9].jpg; do mv "$x" "000$x"; done
for x in [0-9][0-9].jpg; do mv "$x" "00$x"; done
for x in [0-9][0-9][0-9].jpg; do mv "$x" "0$x"; done

Если Вы не можете переименовать файлы, другая опция состоит в том, чтобы создать символьные ссылки в некотором другом каталоге. С zsh:

zmv -Ls '$PWD/(<->).jpg' '/somewhere/writable/${(l:4::0:)1}.jpg'

С любой оболочкой:

for x in [0-9].jpg; do ln -s "$PWD/$x" "/somewhere/writable/000$x"; done
for x in [0-9][0-9].jpg; do ln -s "$PWD/$x" "/somewhere/writable/00$x"; done
for x in [0-9][0-9][0-9].jpg; do ln -s "$PWD/$x" "/somewhere/writable/0$x"; done

Альтернативный подход должен дать последовательные числа символьных ссылок. Этот подход делает вывод к другим ситуациям, где порядок исходных файлов не является правильным, пока Вы создаете символьные ссылки в желаемом порядке. Запуск счетчика в 10 000 и удаление продвижения 1 удобный способ получить счетчик с продвижением, обнуляет.

i=10000
for x in [0-9].jpg [0-9][0-9].jpg [0-9][0-9][0-9].jpg; do
  ln -s "$PWD/$x" /somewhere/writable/${i#1}.jpg
  i=$((i+1))
done

Если Вы действительно не хотите делать какие-либо записи, можно передать последовательный -i опции с увеличением длин имени файла.

ffmpeg -pattern_type glob -i '[0-9].jpg' -i '[1-9][0-9].jpg' -i '[1-9][0-9][0-9].jpg' -i '[1-9][0-9][0-9][0-9].jpg' …
0
27.01.2020, 20:37
  • 1
    я не буду downvote это, потому что это обычно - более оптимальный вариант переименовать файлы, но в моем определенном случае использования, это не возможно. И для любого заканчивающего здесь от Google это могло бы помочь. Но это не решит мою проблему. –  Torxed 26.05.2013, 12:50
  • 2
    @Torxed, “Если Вы действительно не хотите переименовывать, …” –  Gilles 'SO- stop being evil' 26.05.2013, 14:07

Самый простой путь состоял бы в том, чтобы переименовать короткое имя файла, чтобы иметь начальные нули, с помощью rename инструмент. Однако существует два стандарта, переименовывают инструменты там - тот, который я описываю, описан как из Справочника Программистов Perl в странице справочника. Это - версия на Debian и полученных дистрибутивах.

rename 's/^/000/' [0-9].jpg
rename 's/^/00/' [0-9][0-9].jpg
rename 's/^/0/' [0-9][0-9][0-9].jpg

Имена файлов должны затем сопоставить правильно шарики использования.

Однако, если Вы не хотите переименовывать файлы, Вы не можете использовать шарики, как расширение в лексикографическом порядке, не числовом.

Так, не используйте шарики. Избавьтесь от -pattern_type glob и используйте -i %d.jpg вместо -i *.jpg. Это использует числовой шаблон, и в моем быстром тестировании делает то, что Вы хотите.

4
27.01.2020, 20:37
  • 1
    @Torxed: Обновленный мой ответ с решением непереименования. Кроме него похож на Вас, может иметь разрывы в Вашей последовательности, в этом случае эта работа привычки. У Вас на самом деле есть разрывы? –  camh 25.05.2013, 06:53
  • 2
    , который работает и я дам Вам точку для него, но slm стал там более быстрым на этот раз :) Я люблю Вас всех одинаково tho и если бы я мог Вы оба получать корректный ответ! –  Torxed 25.05.2013, 15:05

Теги

Похожие вопросы