Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: как слить все avi файлы в папке в один  (Прочитано 3280 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн slayerk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 34
    • Просмотр профиля
нашел метод
avimerge -i input1.avi input2.avi -o new_input12.avi
пытаюсь сделать список файлов для avimerge следующим скриптом:
!/bin/bash

oldifs=$IFS
IFS=''

files=""

for f in $(ls $PWD/*.avi | sort)
do
        files=$f" ${files}"
#       echo $f
done

echo $files
#avimerge -i  $files -o out.avi

IFS=$oldifs

имена файлов имеют вид:
(Нажмите, чтобы показать/скрыть)

не выходит. что я не так делаю?

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: как слить все avi файлы в папке в один
« Ответ #1 : 31 Июля 2011, 00:10:50 »
Avidemux?

avimerge -i "`ls /media/TMP/Fraps/h264/`"  -o out.avi
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн slayerk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 34
    • Просмотр профиля
Re: как слить все avi файлы в папке в один
« Ответ #2 : 31 Июля 2011, 01:22:08 »
в иттоге сделал на питоне. работает с пробелами в именах файлов.  c avidemux беда в том что кусков видео много и запросто можно вручную нарушить хронологический порядок. а без ручного труда комп их автоматом по имени отсортирует в правильном порядке.

#!/usr/bin/python

import os, subprocess

curdir=os.getcwd()
#print curdir

fileList=os.listdir(curdir)
fileList.sort()

#print fileList

subprocess.Popen(['avimerge', '-i']+fileList+['-o', 'out.avi'])
« Последнее редактирование: 31 Июля 2011, 01:25:17 от slayerk »

Оффлайн spk-ubuntu

  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
Re: как слить все avi файлы в папке в один
« Ответ #3 : 31 Июля 2011, 04:22:45 »
проверить не могу (не за компом), но м.б. вместо
files=$f" ${files}"
д.б. что-то вроде
files="'"$f"' ${files}" или files="'${f}' ${files}" или files="\'${f}\' ${files}"
т.е. имена файлов заключить в апострофы.

andrey_p

  • Гость
Re: как слить все avi файлы в папке в один
« Ответ #4 : 31 Июля 2011, 07:45:22 »
Оболочка сортирует "*" по имени автоматически. Так что
avimerge -i /media/TMP/Fraps/h264/*.avi  -o out.aviдолжно замечательно работать (за исключением случаев, когда файлов реально много - аргументы не уместяться, но тогда можно перейти в директорий и запустить оттуда или попробовать xargs).

Оффлайн slayerk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 34
    • Просмотр профиля
Re: как слить все avi файлы в папке в один
« Ответ #5 : 31 Июля 2011, 11:24:21 »
Оболочка сортирует "*" по имени автоматически. Так что
avimerge -i /media/TMP/Fraps/h264/*.avi  -o out.aviдолжно замечательно работать (за исключением случаев, когда файлов реально много - аргументы не уместяться, но тогда можно перейти в директорий и запустить оттуда или попробовать xargs).

в именах файлов есть пробелы, поэтому приведенный метод не сработает.
« Последнее редактирование: 31 Июля 2011, 11:37:07 от slayerk »

Оффлайн spk-ubuntu

  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
Re: как слить все avi файлы в папке в один
« Ответ #6 : 31 Июля 2011, 12:03:19 »
а если закавычить: ... "/media/TMP/Fraps/h264/*.avi" ... ?

andrey_p

  • Гость
Re: как слить все avi файлы в папке в один
« Ответ #7 : 31 Июля 2011, 12:27:25 »
Ничего закавычивать не надо. Все ДОЛЖНО работать - есть пробелы или нет. Оболочка сначала расширяет и потом передает полученные значения программе как отдельные аргументы:
% cat >script.sh
for arg; do echo "$arg"; done
jazu@uf3 ~/tmp
% touch 'hello bye.avi' 'one two.avi'
jazu@uf3 ~/tmp
% sh script.sh *.avi
hello bye.avi
one two.avi
Это если пользоваться дурацкими советами и использовать `ls *`, то тогда да.

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: как слить все avi файлы в папке в один
« Ответ #8 : 31 Июля 2011, 13:23:52 »
С каких это пор ls дурацкий?
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

andrey_p

  • Гость
Re: как слить все avi файлы в папке в один
« Ответ #9 : 31 Июля 2011, 13:48:08 »
Извини, конечно, но мне тоже немного эээ... неуютно, когда мне пишут, что работать не будет даже не попробовав. И пишут скрипты на Питоне для тех задач, которые десятилетиями решались и оттачивались в оболочке.
А пишут на основании советов тех, кому бы следовало знать оболочку получше. Не будем показывать пальцами, хотя это был слоненок! :)
"Never use a CommandSubstitution -- of EITHER kind! -- around something that writes out filenames...
the use of ls is just plain unnecessary. It's an external command, which simply isn't needed to do the job."
- http://mywiki.wooledge.org/BashPitfalls.
« Последнее редактирование: 31 Июля 2011, 13:52:18 от andrey_p »

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: как слить все avi файлы в папке в один
« Ответ #10 : 31 Июля 2011, 13:51:54 »
Я никогда не интересовался башем настолько глубоко. Если вы знаете баш лучше - пожалуйста. Только не надо во все стороны своим ЧСВ разбрасываться.
Мой вариант пашет, у меня.
PS: в первом посте в файлах вообще нет пробелов.
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

andrey_p

  • Гость
Re: как слить все avi файлы в папке в один
« Ответ #11 : 31 Июля 2011, 13:59:12 »
Чтоб не совершать детских ошибок и давать неправильных советов, хорошо бы все-таки изучить работу с оболочкой.

ЗЫ Исправил. Извиняюсь за небольшую склоку.
« Последнее редактирование: 01 Августа 2011, 11:17:29 от andrey_p »

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: как слить все avi файлы в папке в один
« Ответ #12 : 31 Июля 2011, 14:01:42 »
Если я модератор, это не делает меня суперзнатоком баша.
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: как слить все avi файлы в папке в один
« Ответ #13 : 01 Августа 2011, 09:00:15 »
Вообще-то, для автомата надо файлы нумеровать для правильного склеивания, а перед склеиванием хорошо бы сортировать.
Если кусочков немного, то лучше их склеить не через автоматы. Так процесс более контролируем.
ЗЫ. Люди, что вы завелись из ерунды.
На любого спеца, всегда найдется суперспец,
на хитрую ж... найдется х.. с левой резьбой,
а на любого мудреца довольно простоты.(Ц)
ЗЫ2.
ТС, есть замечательная утилита
rename, которая вышла из перла и поэтому прекрасно поддерживает регулярные выражения.
Например,
... | rename 's/ /_/g'
заменит в именах файлов пробелы на подчеркивания.
Рекомендуется проделать всякие манипуляции по укорочению часто используемых директорий и убиранию в них пробелов. Например, "Рабочий стол" назвать "Desktop" или даже "Dt".

« Последнее редактирование: 01 Августа 2011, 09:36:47 от alexander.pronin »

Оффлайн slayerk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 34
    • Просмотр профиля
Re: как слить все avi файлы в папке в один
« Ответ #14 : 03 Августа 2011, 23:48:04 »
файлы нумеруются автоматом. их создает программа Fraps - которая пишет десктоп в винде. у нее просто ограничение на размер файла - 4 Гб. а файлы именуются <имя приложения>пробел<дата>пробел<время создания>.avi.
советчику за avimerge -i /media/TMP/Fraps/h264/*.avi  -o out.avi спасибо. работает. все оказалось просто.

но манера совета конечно оставляет желать ...

 

Страница сгенерирована за 0.021 секунд. Запросов: 21.