LINUX.ORG.RU

Пакетная обработка видео

 , ,


0

2

Когда-то под Windows была написана замечательная и даже в некотором роде юниксвейная программа AviSynth. Третью версию грозились выпустить и под линукс, но как-то всё затухло.

Для резки-склейки можно делать скрипты на баше, например, с mkvmerge (для меня принципиально, что это монтаж без перекодирования и, следовательно, без потерь):

#!/bin/bash

mkvmerge \
  -o "./Охотники1.mkv"  \
  -A "(" "../8mm Для монтажа/02.mkv" ")" \
  --split parts:\
02:56-03:25,\
+04:06-04:18,\
+04:42-04:48,\
+05:00-05:11

mkvmerge \
  -o "./Охотники.mkv"  \
  -A     "(" "./Охотники1.mkv" ")" \
  -A "+" "(" "./Охотники2.mkv" ")" \
  --append-to \
1:0:0:0

...и в принципе, почти все мои задачи эти скрипты покрыли. Осталось присобачить титры, сделанные из картинок. Я смотрел в сторону ffmpeg:

ffmpeg -loop 1 -i ./header.png header.mkv

Эта команда повторяет картинку в видеопотоке, пока не нажмёшь Ctrl+C. А есть ли что-то похожее, но с возможностью задать число повторений кадра?

★★★★★

Так у ффмпег же есь опции «откуда» и «докуда» хош фреймами меряй, хош секундами, кроме того есь и скока раз в секунду менять разные картинки..

deep-purple ★★★★★
()

ffmpeg

$ ffmpeg 
ffmpeg version 0.8.16-6:0.8.16-1, Copyright (c) 2000-2014 the Libav developers
  built on Sep 16 2014 23:10:48 with gcc 4.7.2
The ffmpeg program is only provided for script compatibility and will be removed
in a future release. It has been deprecated in the Libav project to allow for
incompatible command line syntax improvements in its replacement called avconv
(see Changelog for details). Please use avconv instead.
anonymous
()
Ответ на: комментарий от anonymous

у тебя перацкая венда, судя по всему. должно выглядеть где-то так:

$ ffmpeg
ffmpeg version 2.5.4 Copyright (c) 2000-2015 the FFmpeg developers
  built on Feb 15 2015 06:08:32 with gcc 4.9.2 (Gentoo 4.9.2 p1.0, pie-0.6.2)
  configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --enable-shared --cc=x86_64-pc-linux-gnu-gcc --cxx=x86_64-pc-linux-gnu-g++ --ar=x86_64-pc-linux-gnu-ar --optflags='-fno-diagnostics-color -pipe -w -march=native -O3 -funroll-loops' --extra-cflags='-fno-diagnostics-color -pipe -w -march=native -O3 -funroll-loops' --extra-cxxflags='-fno-diagnostics-color -pipe -w -march=native -O3 -funroll-loops' --disable-static --enable-gpl --enable-postproc --enable-avfilter --enable-avresample --disable-stripping --disable-indev=v4l2 --disable-outdev=v4l2 --disable-indev=alsa --disable-indev=oss --disable-indev=jack --disable-outdev=alsa --disable-outdev=oss --disable-outdev=sdl --enable-nonfree --disable-bzlib --disable-runtime-cpudetect --disable-debug --disable-doc --disable-gnutls --enable-hardcoded-tables --disable-iconv --disable-lzma --enable-network --disable-openssl --disable-libsmbclient --disable-ffplay --disable-vaapi --enable-vdpau --disable-xlib --disable-libxcb --disable-libxcb-shm --disable-libxcb-xfixes --enable-zlib --disable-libvo-aacenc --disable-libvo-amrwbenc --disable-libmp3lame --disable-libaacplus --disable-libfaac --disable-libtheora --disable-libtwolame --disable-libwavpack --disable-libwebp --enable-libx264 --disable-libx265 --disable-libxvid --disable-libcdio --disable-libiec61883 --disable-libdc1394 --disable-libcaca --disable-openal --disable-opengl --disable-libv4l2 --disable-libpulse --disable-x11grab --disable-libbs2b --disable-libflite --disable-frei0r --disable-libfribidi --disable-fontconfig --disable-ladspa --disable-libass --disable-libfreetype --disable-libsoxr --enable-pthreads --disable-libopencore-amrwb --disable-libopencore-amrnb --enable-libfdk-aac --disable-libopenjpeg --disable-libbluray --disable-libcelt --disable-libgme --disable-libgsm --disable-libmodplug --disable-libopus --disable-libquvi --disable-librtmp --disable-libssh --disable-libschroedinger --disable-libspeex --disable-libvorbis --disable-libvpx --disable-libzvbi --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-neon --disable-vfp --disable-mips32r2 --disable-mipsdspr1 --disable-mipsdspr2 --disable-mipsfpu --disable-altivec --disable-avx --disable-avx2 --disable-fma3 --disable-fma4 --disable-ssse3 --disable-sse4 --disable-sse42 --disable-xop --cpu=host
  libavutil      54. 15.100 / 54. 15.100
  libavcodec     56. 13.100 / 56. 13.100
  libavformat    56. 15.102 / 56. 15.102
  libavdevice    56.  3.100 / 56.  3.100
  libavfilter     5.  2.103 /  5.  2.103
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'

anonymous
()
Ответ на: комментарий от Krieger_Od

Спасибо, то, что надо, на vframes я как-то не обратил внимания.

hobbit ★★★★★
() автор топика
Ответ на: комментарий от anonymous

у тебя перацкая гента, похоже. в нормальной должно быть как-то так:

~ $ avconv 
avconv version 11.2, Copyright (c) 2000-2014 the Libav developers
  built on Mar  3 2015 22:05:38 with gcc 4.9.2 (Gentoo 4.9.2 p1.0, pie-0.6.1)
Hyper fast Audio and Video encoder
usage: avconv [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man avconv'
wakuwaku ★★★★
()
Ответ на: комментарий от wakuwaku

в gentoo libav тянется по-умолчанию отключенным флагом libav, дабы не смущать нормальных господ. так что сей лгбт ты подтащил сам

anonymous
()
Ответ на: комментарий от wakuwaku

когда я ставил путещщ, stage3 содержал только тулчейн и другие пакеты для сборки системы. не думаю, что за эти годы разработчики настолько упоролись

anonymous
()

Вот, немое кино с титрами собрал. Занялся звуком.

Аудиодорожки прикручиваются тем же mkvmerge:

mkvmerge \
  -o "./tmp/v1.mkv"  \
  -A     "(" "./tmp/v11.mkv" ")" \
  -A "+" "(" "./tmp/v12.mkv" ")" \
  -a "0" -D    "(" "../audio/a1.mp3" ")" \
  --append-to \
1:0:0:0

Проблема начинается, когда я начинаю стыковать несколько дорожек, часть из которых со звуком, а вторая часть (те же титры) нет. mkvmerge, точнее, операция --append-to отказывается присоединять файл со звуком вслед за файлом без звука.

Простейший вариант - смонтировать звук отдельно, например, в Audacity, вставив все необходимые пустые места, и подсоединить аудиодорогу к готовому видеофайлу. Но помимо того, что это привносит комбайны в пакетную обработку, в этом случае придётся вручную рассчитывать, что и какой длительности куда вставлять. А хотелось бы присоединить звуковой файл к видеодорожке, а потом уже её объединять с остальными.

Можно ли как-то теми же ffmpeg или mencoder добавить в видеофайл _пустую_ аудиодорожку заданной длительности? Ну или ещё какой командой сгенерировать mp3 типа «4 секунды тишины». Вставить-то его в видео не проблема...

hobbit ★★★★★
() автор топика
6 сентября 2015 г.

AviSynth

Оказалось, есть порт под названием AvxSynth, и даже на ЛОРе на него ссылались но что-то с активностью в проекте туговато. Надо пощупать, может, он уже достиг стадии «просто работает»...

hobbit ★★★★★
() автор топика
Ответ на: комментарий от brothermechanic

The natural choice for the author was to try to improve Avisynth

Python

Да, идеи порой оборачиваются неожиданной стороной...

Спасибо, будем иметь в виду.

hobbit ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Можно ли как-то теми же ffmpeg или mencoder добавить в видеофайл _пустую_ аудиодорожку заданной длительности?

О, спасибо Xenius, чья старая тема натолкнула меня на sox:

sox -n silence.wav trim 0 4

Результат ещё надо будет перекодировать в mp3, но это уже задача, решаемая существующими инструментами...

hobbit ★★★★★
() автор топика
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от hobbit

Зачем перекодировать? Просто silence.mp3 напиши. SoX не только wav умеет. Правда для mp3 его надо собрать с поддержкой liblame.

Xenius ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.