LINUX.ORG.RU

Переработка видео с помошью ffmpeg


0

1

Была такая идея: разложить видеоряд некоторого *.mkv на кадры, изменить всем картинкам параметры «ширины» и «высоты», после чего слепить новый видеоряд и приклеить к нему звук их исходного файла. (Попрошу не обвинять меня в тупости - это не моя идея, но мне поручено выполнить данную прихоть). По идее, если соблюдать FPS, то вся операция ложится в три команды, однако:
1) При разборе на кадры с помощью FFMpeg за 24-27 минут видеоряда потерялось примерно 11 кадров;
2) При сборе видеоряд стал короче по времени более чем на 2,5 МИНУТЫ!
Как итог - жуткая рассинхронизация...
Подскажите как можно разложить видеоряд, обработать покадрово и слепить всё в новый файл...
ЗАРАНЕЕ НАСТОЯТЕЛЬНО ПРОШУ НЕ ПРЕДЛАГАТЬ МЕНКОДЕР И РЕКОДИНГ В НОВЫЙ РАЗМЕР ТИПА «FFMPEG -S» - моя задача РАЗОБРАТЬ видеоряд И СОБРАТЬ его с изменёнными кадрами (над которыми не я работаю). Количество кадров одно и то же, FPS всегда указывал вручную. Основной инструмент работы - ffmpeg-dev.

★★

Мощное задание, ничего не скажешь, идея идиотская абсолютно, ffmpeg-dev это я так понял две-версия, а в стейбле не пробовал?

nutz ★★
()

Проскакивал уже такой вопрос... Тогда разгадку не нашли.

adepto
()
Ответ на: комментарий от nutz

ffmpeg-dev

Девелоперская верия из SVN. Вбивал как-то дядюшке Гугелу «Ubuntu ffmpeg x264» и попал на статейку о том, как пересобрать ffmpeg таким образом, чтобы он вменяемо кушал avc (х264). Пересбор прохожит без единой ошибки или оговорки.

zzdnx ★★
() автор топика

1. Иногда тупое перекодирование из одного формата в другой ломает синхронизацию с аудио, а ты говоришь о полном цикле разобрать-собрать.

2. Посмотри на уже реализованные фишки в виде видеофильтров aka -vf

Я допиливал мальца ffmpeg, что бы он мог накладывать юникодный текст поверх фрейма.

Думаю, допилить фильтр, который будет делать то, что нужно тебе - не такая уж большая проблема.

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

будет делать то, что нужно тебе - не такая уж большая проблема.

Твои слова, да Богу в уши ^_^ . Если и в правду сделаешь, прошу контакта по скайпу/аське или мылу. А вот видеофильтры я не пробовал ещё... Спасибо за информацию, буду копать.

zzdnx ★★
() автор топика

C FFmpeg, действительно, что-то не то. С ним у меня тоже ничего не получилось, но благодаря mplayer и mencoder твоя задача решается очень просто =)

Подскажите как можно разложить видеоряд

mplayer -vo png:z=3 -nosound inputfile

mplayer стоит запускать с дефолтным config файлом.
3-ку поставил от балды. С этим параметром, думаю, стоит поэкспериментировать и подобрать для себя оптимальное значение.

[VO_PNG] Info: Use -vo png:z=<n> to set compression level from 0 to 9.
[VO_PNG] Info: (0 = no compression, 1 = fastest, lowest - 9 best, slowest compression)

обработать покадрово

...

и слепить всё в новый файл...

mencoder mf://*.png -mf w=1280:h=720:fps=24000/1001:type=png -of rawvideo -nosound -ovc x264 -x264encopts crf=19 -o video.x264

http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-enc-images.html

Настройки для x264 тоже выставлены от балды :)

Далее с помощью mkvmerge к полученному сырому x264 потоку добавляем звук и прописываем FPS.

ps. единственно, на тестовой последовательности mplayer почему-то не записал в png последний кадр видеофайла, но его легко можно и в самостоятельно добавить.

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

s/муровейником/муравейником

По сабжу: мне пришлось такое делать в mplayer'е как выше описано было, ffmpeg глючит.

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

Далее с помощью mkvmerge к полученному сырому x264 потоку добавляем звук и прописываем FPS

А разве его нужно в мергуе писать???? Я думал что FPS это «количество кадров в секунду», и этот параметр надо прописывать в видеопотоке при его сборке. Разве у тебя не так?

-mf w=1280:h=720:fps=24000/1001:type=png

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

2 nickliverpool

Спасибо за линк

anonimusu

мне пришлось такое делать в mplayer'е как выше описано было, ffmpeg глючит.

Да понял я что ffmpeg не панацея... Попробую приведёные примеры и отпишусь.

zzdnx ★★
() автор топика

А разве его нужно в мергуе писать????


А что это такое?

Да, FPS - это количество кадров в секунду.
Плееры читают эту информацию из заголовка контейнера. И соответственно прописывать ее надо в контейнере.

Если кодировать командой типа

mencoder mf://*.jpg -mf w=800:h=600:fps=25:type=jpg -ovc lavc \
    -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o output.avi
ничего дополнительно делать не надо, мы на выходе уже получим закодированное видео в avi контейнере с прописанным значением FPS. Т.е. mencoder выполнит три действия: закодирует видео, добавит его в avi контейнер и в заголовке контейнера пропишет FPS.

Если же кодировать, например, командой,

mencoder mf://*.png -mf w=1280:h=720:fps=24000/1001:type=png -of rawvideo -nosound -ovc x264 -x264encopts crf=19 -o video.x264
указав ключ -rawvideo, то контейнер создан не будет и на выходе мы получим просто сжатый видеопоток. И на втором шаге мне необходимо будет с помощью mkvmerge добавить видеопоток в mkv контейнер и прописываю FPS, чтобы плееры смогли его правильно воспроизвести.

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

Плееры читают эту информацию из заголовка контейнера.

Об этом я знаю, но всегда полагал что программы собирающие контейнеры сами лезут в видеопоток и читают его заголовок с целью не ошибиться в каких-либо параметрах. Аналогично я думал и о звуковом потоке. Спасибо, буду знать на будущее что некоторые параметры всё же руками нужно указывать.

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

Разобрал-собрал. УРА! РАБОТАЕТ!

mencoder mf://img/*.png -mf w=704:h=396:fps=24000/1001:type=png -ovc x264 -x264encopts crf=19 -o out.mp4

Однако *.mkv жрать отказывается напрочь:

...
[h264 @ 0xb64bee00]AVC: nal size 7745
[h264 @ 0xb64bee00]no frame!
Error while decoding frame!
V: 0.0 0/ 0 ??% ??% ??,?% 0 0
Exiting... (End of file)

Как-то так. Но это не очень страшно, видеопоток вырвать можно в отдельный файл... И вот ещё - видеопоток, собранный приведёной выше командой определяется как «ITU H.264», а не просто «H.264». В чём их разница-то?

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

"ITU H.264" и "H.264" - решено.

Полученный мп4 слил в матрёщку. Видео в обозревателе файлов определяется как «Н.264», мергуй говорит «MPEG_4/ISO/AVC». Видимо, «ITU H.264» является особенностью подписи в менкодере и ни на что не влияет...

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

Однако *.mkv жрать отказывается напрочь:

[h264 @ 0xb64bee00]AVC: nal size 7745
[h264 @ 0xb64bee00]no frame!
Error while decoding frame!
V: 0.0 0/ 0 ??% ??% ??,?% 0 0
Exiting... (End of file)

Запуск какой команды приводит к появлению этого сообщения?

nickliverpool
()

Стандартная шапка, наподобие вывода ffmpeg, потом много раз секции вида:

[h264 @ 0xb64bee00]AVC: nal size {некоторая цифра}
[h264 @ 0xb64bee00]no frame!
Error while decoding frame!

И в конце выдаёт:

Error while decoding frame!
V: 0.0 0/ 0 ??% ??% ??,?% 0 0
Exiting... (End of file)

Особенность данного файла матрёшки в наличии файла глав (на других матрёшках ещё не пробовал такой команды, потому думаю на файл глав). Плюс - не смотря на невозможность декодирования данной матрёшки, когда я мергуем вырвал из неё в отдельный файл только видеопоток - команда сработала идеально! Определила матрёшку, именованную мной как mp4 и разложила видеоряд. Нареканий не вызвало.

zzdnx ★★
() автор топика

Понятно, судя по этой теме http://blog.vladykin.name/2011/01/mplayer-mkv-demuxer-bug.html и этой http://www.linux.org.ru/forum/general/6011770, попробуй:

  • запустить с ключом -demuxer lavf
  • обновить mplayer

если не поможет, будем разбираться дальше.

nickliverpool
()
Ответ на: комментарий от zzdnx

Вот ещё один вывод консоли.

разобрал видео и сделал ресайз всех картинок до 10% от исходного размера. Пробую собрать:...

mencoder mf://*.png -mf w=192:h=108:fps=24000/1001:type=png -ovc x264 -x264encopts crf=19 -o out.mp4
MEncoder SVN-r1.0~rc3+svn20090426-4.4.3 (C) 2000-2009 MPlayer Team

WARNING: OUTPUT FILE FORMAT IS _AVI_. See -of help.
success: format: 16 data: 0x0 - 0x0
MF file format detected.
[mf] search expr: *.png
[mf] number of files: 2180 (8720)
VIDEO: [MPNG] 192x108 24bpp 23.976 fps 0.0 kbps ( 0.0 kbyte/s)
[V] filefmt:16 fourcc:0x474E504D size:192x108 fps:23.976 ftime:=0.0417
Opening video filter: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Unsupported PixelFormat -1
Selected video codec: [ffpng] vfm: ffmpeg (FFmpeg PNG)
==========================================================================
VDec: vo config request - 192 x 108 (preferred colorspace: BGR 1-bit)
Could not find matching colorspace - retrying with -vf scale...
Opening video filter: [scale]
The selected video_out device is incompatible with this codec.
Try appending the scale filter to your filter list,
e.g. -vf spp,scale instead of -vf spp.

Exiting...

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

запустить с ключом "-demuxer lavf"

It works!

zzdnx ★★
() автор топика
Ответ на: "e.g. -vf spp,scale instead of -vf spp" от zzdnx

Ошибку воспроизвести не получилось, у меня все отлично:

WARNING: OUTPUT FILE FORMAT IS _AVI_. See -of help.
success: format: 16 data: 0x0 - 0x0
MF file format detected.
[mf] search expr: *.png
[mf] number of files: 500 (2000)
VIDEO:  [MPNG]  192x108  24bpp  23.976 fps    0.0 kbps ( 0.0 kbyte/s)
[V] filefmt:16 fourcc:0x474E504D size:192x108 fps:23.976 ftime:=0.0417
Opening video filter: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Using 1 decoding thread.
Selected video codec: [ffpng] vfm: ffmpeg (FFmpeg PNG)
==========================================================================
Could not find matching colorspace - retrying with -vf scale...
Opening video filter: [scale]
Movie-Aspect is undefined - no prescaling applied.
[swscaler @ 010db794]BICUBIC scaler, from rgb24 to yuv420p using MMX2
x264 [info]: using SAR=1/1
x264 [info]: using cpu capabilities: MMX2 SSE2Slow
x264 [info]: profile High, level 1.1
Fontconfig error: Cannot load default config file
[VD_FFMPEG] DRI failure.)  0.00fps Trem:   0min   0mb  A-V:0.000 [0:0]
Writing header...0f ( 8%)  0.00fps Trem:   0min   0mb  A-V:0.000 [0:0]
ODML: vprp aspect is 16:9.
Writing header...
ODML: vprp aspect is 16:9.
Pos:  19.2s    500f (100%) 72.70fps Trem:   0min   0mb  A-V:0.000 [111:0]
Flushing video frames.
Writing index...
Writing header...
ODML: vprp aspect is 16:9.

Video stream:  113.230 kbit/s (14153 B/s) size: 295165 bytes 20.854 secs 500 fra
mes
x264 [info]: frame I:2     Avg QP:15.70  size:  7177
x264 [info]: frame P:230   Avg QP:18.50  size:  1104
x264 [info]: frame B:268   Avg QP:23.41  size:   101
x264 [info]: consecutive B-frames: 27.5%  1.6%  1.8% 69.1%
x264 [info]: mb I  I16..4:  4.8% 23.2% 72.0%
x264 [info]: mb P  I16..4:  0.1%  0.1%  0.2%  P16..4: 42.6% 24.4% 19.6%  0.0%  0
.0%    skip:12.9%
x264 [info]: mb B  I16..4:  0.0%  0.0%  0.0%  B16..8: 26.9%  0.7%  1.0%  direct:
 3.0%  skip:68.3%  L0:26.8% L1:66.1% BI: 7.0%
x264 [info]: 8x8 transform intra:24.6% inter:34.7%
x264 [info]: coded y,uvDC,uvAC intra: 82.3% 98.8% 98.0% inter: 18.9% 35.0% 22.9%

x264 [info]: i16 v,h,dc,p:  6% 38% 44% 13%
x264 [info]: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 11% 13% 30%  7%  4%  4%  8%  7% 14%
x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 22% 24%  8%  5%  6%  7%  5%  9%
x264 [info]: Weighted P-Frames: Y:7.8%
x264 [info]: ref P L0: 79.6%  7.0% 10.1%  2.6%  0.7%
x264 [info]: ref B L0: 92.7%  7.3%
x264 [info]: kb/s:113.23

«e.g. -vf spp,scale instead of -vf spp»
Это как понять о_О?

Сначала Mencoder не может понять какое цветовое пространство использовать (Could not find matching colorspace), пытается применить фильтр для изменении размеров картинки (scale) и в итоге предлагает самостоятельно применить этот фильтр, написав, как это можно сделать. Например, указав в командной строке параметр -vf spp,scale вместо -vf spp.

-vf говорит о том, что к входному видеопотоку перед кодированием нужно применить фильтр
spp - это фильтр, который, как я понял, применяется, для удаления артефактов при сильном сжатии исходной видеопоследовательности. Например, для удаления блочности (блочной структуры) изображения, как, например, на этой картинке http://upload.wikimedia.org/wikipedia/commons/6/6d/Sego_lily_cm-150.jpg, за счет сглаживания краев между блоками по некоторому алгоритму. Таким образом, чтобы визуально блочность была менее заметна.
http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-dvd-mpeg4.html
http://www.opennet.ru/man.shtml?topic=mencoder&category=1&russian=0#lbAS

Меня смущают две строчки:

Unsupported PixelFormat -1

VDec: vo config request - 192 x 108 (preferred colorspace: BGR 1-bit)

Наводит на мысли, что ему входные png файлы не нравятся.

Попробуй:

  • указать флаг -aspect в командной строке. Например, так:
    mencoder mf://*.png -mf w=192:h=108:fps=24000/1001:type=png -aspect 16:9 -ovc x264 -x264encopts crf=19 -o out.mp4
  • либо с помощью ImageMagick http://www.imagemagick.org/ преобразовать картинки в jpg. Например, такой командой:
    mogrify -format jpg *.png
    и попробовать закодировать заново

Если не поможет, что-нибудь другое попробуем =)

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

mencoder mf://*.png -mf w=192:h=108:fps=24000/1001:type=png -aspect 16:9 -ovc x264 -x264encopts crf=19 -o out.mp4

Не помогло... Преобразовал всё в jpg и та же команда (только для jpg, а не для png) дала многократный вывод такого вида:

1 duplicate frame(s)!
Writing header...
ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.
Error while decoding frame!4.68fps Trem: 0min 0mb A-V:0.000 [0:0]

...и кончилось всё вот таким пшиком... :

Video stream: 0.000 kbit/s (0 B/s) size: 0 bytes 90.841 secs 2180 frames
Ошибка сегментирования

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

А вот что пришет в ответ на "-vf spp,scale"

$ mencoder mf://*.jpg -mf w=192:h=108:fps=24000/1001:type=png -vf spp,scale -aspect 16:9 -ovc x264 -x264encopts crf=19 -o out.mp4

MEncoder SVN-r1.0~rc3+svn20090426-4.4.3 (C) 2000-2009 MPlayer Team Option vf: spp doesn't exist.

Exiting... (error parsing command line)

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

Лично nickliverpool

Пожалуйста, научите меня делать «вставки кода» (рамка вокругкода), а то у меня вопросы и статьи выглядят недооформленной порнографией.

zzdnx ★★
() автор топика
Ответ на: Лично nickliverpool от zzdnx

Пожалуйста, научите меня делать «вставки кода» (рамка вокругкода), а то у меня вопросы и статьи выглядят недооформленной порнографией.

извините что вмешиваюсь ... используй LORCODE Luke ..

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

Упсс... Следующая команда

mencoder mf://*.png -mf w=192:h=108:fps=24000/1001:type=png -aspect 16:9 -ovc x264 -x264encopts crf=19 -o out.mp4
создаст файл в avi контейнере, а не в mp4 контейнере. Думаю, Mencoder трактует опцию -o out.mp4 просто как имя файла и никак не распознает выходной формат. И в итоге мы получим файл в формате AVI, но с именем out.mp4.

И таким образом кодируем мы (mencoder) с помощью x264 и потом упаковывает видеопоток в avi контейнер, что не очень хорошо. AVI имеет ограничения, которые разработчики смогли вроде-как обойти (тут подробнее, но я не пока не читал http://forum.doom9.org/showthread.php?s=&threadid=80430), но лучше так не делать.
Лучше поступать так если кодируем с помощью x264:

  • mencoder указывать ключ -of rawvideo. Пример:
    mencoder mf://*.png -mf w=1280:h=720:fps=24000/1001:type=png -of rawvideo -ovc x264 -x264encopts crf=19 -o video.h264
  • потом закодированный видеопоток упаковать с помощью других утилит в либо mkv контейнер, либо mp4, прописав FPS.

Так будет правильнее.

Из-за этого, думаю, и возникла та ошибка с duplicate frame(s) и writing vprp header.

Если же необходим формат avi, то кодируем как-то так:

mencoder mf://*.png -mf w=192:h=108:fps=24000/1001:type=png -ovc xvid -xvidencopts  bitrate=1500 -o destination.avi
И png и jpg файлы, по идее, должны так закодироваться без ошибок.

А вот что пришет в ответ на "-vf spp,scale"

Да, у меня тоже самое, если проверить список фильтров (mencoder -vf help), то его (spp) там нет. Либо его просто убрали из списка, оставив похожий по функциональности uspp, либо просто так собран mencoder и надо просто заново его пересобрать с включенным spp, в общем, я не знаю =). Но, думаю, этот параметр настолько редко используют, что про него можно забыть.

Да, и в этой команде еще одна ошибка ошибка:

mencoder mf://*.jpg -mf w=192:h=108:fps=24000/1001:type=png -vf spp,scale -aspect 16:9 -ovc x264 -x264encopts crf=19 -o out.mp4
если здесь mf://*.jpg указан формат jpg, то и здесь fps=24000/1001:type=png должен быть тоже jpg вместо png.

А по поводу «неоформленной порнографии» Gramozeka уже ответил =).

nickliverpool
()

учитывая, что в lossy-форматах видео целые кадры присутствуют только дискретно, в виде keyframes через определенное количество виртуальных frames, задачу можно считать невыполнимой - нету там покадровой картинки, вообще, никак, нигде.

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

На экран оно выводится уже в зависимости от того, кто выводит.
Некоторые плееры настолько суровы, что умеют увеличивать FPS, расчитывая вдвое больше промежуточных кадров между ключевыми, чем записано в файле. Ну то есть картинки как таковой непрерывной там не существует, декодеры ее сами дорисовывают. Увеличение fps чревато потерей ресурсов из-за того, что приходится экстраполировать данные, необходимые для построения промежуточных кадров. В случае родного fps - эти данные уже есть.

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

тьху ты, не потерей, а потреблением. Утро добрым не бывает...

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

в этой команде еще одна ошибка ошибка

Сорри, я что-то стал не внимательным к ночи... Сейчас попробую исправить.

Gramozeka, спасибо большое!)))

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

Исправил тип, но это ничео не дало....

$ mencoder mf://*.jpg -mf w=192:h=108:fps=24000/1001:type=jpg -aspect 16:9 -ovc x264 -x264encopts crf=19 -o out.mp4MEncoder
SVN-r1.0~rc3+svn20090426-4.4.3 (C) 2000-2009 MPlayer Team

WARNING: OUTPUT FILE FORMAT IS _AVI_. See -of help.
success: format: 16  data: 0x0 - 0x0
MF file format detected.
[mf] search expr: *.jpg
[mf] number of files: 2180 (8720)
VIDEO:  [IJPG]  192x108  24bpp  23.976 fps    0.0 kbps ( 0.0 kbyte/s)
[V] filefmt:16  fourcc:0x47504A49  size:192x108  fps:23.976  ftime:=0.0417
Opening video filter: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Unsupported PixelFormat -1
Selected video codec: [ffmjpeg] vfm: ffmpeg (FFmpeg MJPEG)
==========================================================================
VDec: vo config request - 192 x 108 (preferred colorspace: Planar Y800)
Could not find matching colorspace - retrying with -vf scale...
Opening video filter: [scale]
VDec: using Planar Y800 as output csp (no 8)
Movie-Aspect is 1.78:1 - prescaling to correct movie aspect.
[swscaler @ 0xb63d29c0]using unscaled gray8 -> yuv420p special converter
x264 [info]: using SAR=1/1
x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64
x264 [info]: profile High, level 1.1
VDec: vo config request - 192 x 108 (preferred colorspace: Planar YV12)
VDec: using Planar YV12 as output csp (no 3)
Movie-Aspect is 1.78:1 - prescaling to correct movie aspect.
Ошибка сегментирования0%)  0.00fps Trem:   0min   0mb  A-V:0.000 [0:0]
zzdnx ★★
() автор топика
Ответ на: комментарий от nickliverpool

Так будет правильнее.

То есть, как я понял, правильнее собрать видеопоток, и только потом вопхнуть его в контейнер? Почнму нельзя СРАЗУ сливать видеопоток в mp4-формат, указывая ему fps?

zzdnx ★★
() автор топика
Ответ на: Исправил тип, но это ничео не дало.... от zzdnx

Это команда выполняется без ошибок?

mencoder mf://*.png -mf w=192:h=108:fps=24000/1001:type=png -ovc xvid -xvidencopts  bitrate=1500 -o destination.avi

То есть, как я понял, правильнее собрать видеопоток, и только потом вопхнуть его в контейнер?

Да

Почнму нельзя СРАЗУ сливать видеопоток в mp4-формат, указывая ему fps?

mencoder не имеет нативной поддержки формата mp4. Но можно указать mencoder использовать библиотеку libavformat http://www.mplayerhq.hu/DOCS/HTML/ru/menc-feat-selecting-codec.html. Если стоит задача просто добавить видео в mp4 контейнер, то можно воспользоваться возможностями libavformat. Тогда командная строка для конвертирования в mp4 контейнер выглядела бы как-нибудь так:

mencoder mf://*.png -mf w=192:h=108:fps=24000/1001:type=png -aspect 16:9 -ovc x264 -x264encopts crf=19:global_header -of lavf -lavfopts format=mp4 -o out.mp4
В любом другом случае или при проблеме с воспроизведением получившегося mp4 файла, я бы предпочел использоваться утилитой, предназначенной именно для этой задачи (MP4Box).

nickliverpool
()
Ответ на: комментарий от pekmop1024

> задачу можно считать невыполнимой

задача элементарнейшая и выполнимая

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

Этa команда выполняется без ошибок?


Нет. Завершается так: «e.g. -vf spp,scale instead of -vf spp.» Вывод полностью аналогичен ранее описанному, который завершился той-же самой строкой.

$ mencoder mf://*.png -mf w=192:h=108:fps=24000/1001:type=png -aspect 16:9 -ovc x264 -x264encopts crf=19:global_header -of lavf -lavfopts format=mp4 -o out.mp4
MEncoder SVN-r1.0~rc3+svn20090426-4.4.3 (C) 2000-2009 MPlayer Team
success: format: 16 data: 0x0 - 0x0
MF file format detected.
[mf] search expr: *.png
[mf] number of files: 2180 (8720)
VIDEO: [MPNG] 192x108 24bpp 23.976 fps 0.0 kbps ( 0.0 kbyte/s)
[V] filefmt:16 fourcc:0x474E504D size:192x108 fps:23.976 ftime:=0.0417
** MUXER_LAVF *****************************************************************
REMEMBER: MEncoder's libavformat muxing is presently broken and can generate
INCORRECT files in the presence of B-frames. Moreover, due to bugs MPlayer
will play these INCORRECT files as if nothing were wrong!
*******************************************************************************
OK, exit.
Opening video filter: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Unsupported PixelFormat -1
Selected video codec: [ffpng] vfm: ffmpeg (FFmpeg PNG)
==========================================================================
VDec: vo config request - 192 x 108 (preferred colorspace: BGR 1-bit)
Could not find matching colorspace - retrying with -vf scale...
Opening video filter: [scale]
The selected video_out device is incompatible with this codec.
Try appending the scale filter to your filter list,
e.g. -vf spp,scale instead of -vf spp.

Exiting...

Вот так.

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

mencoder не имеет нативной поддержки формата mp4

За то имеет поддержку AVI, с учётом того, что это контейнер, можно собрать х264-видеопоток и вопхнуть его в этот контейнер, а потом перепаковать в MP4 с добавлением звука и так далее... Или это не вариант?

zzdnx ★★
() автор топика

Нет, потому что

  • это изврат, сначала сохранить в одном контейнере, чтобы потом перепаковать в другой.
  • чтобы добавить h264 видеопоток в avi контейнер нужно прибегнуть к хаку http://forum.doom9.org/showthread.php?s=&threadid=80430, что тоже не очень хорошо.

Хорошо, тогда попробуй эту команду:

mencoder -noconfig all mf://*.png -mf w=1280:h=720:fps=24000/1
001:type=png -of rawvideo -nosound -ovc x264 -x264encopts crf=19 -o video.h264
И эту:
mencoder mf://*.png -mf w=192:h=108:fps=24000/1001:type=png -as
pect 16:9 -ovc raw -o output.avi

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

№1

$ mencoder -noconfig all mf://*.png -mf w=192:h=108:fps=24000/1001:type=png -of rawvideo -nosound -ovc x264 -x264encopts crf=19 -o video.h264
MEncoder SVN-r1.0~rc3+svn20090426-4.4.3 (C) 2000-2009 MPlayer Team
success: format: 16  data: 0x0 - 0x0
MF file format detected.
[mf] search expr: *.png
[mf] number of files: 2180 (8720)
VIDEO:  [MPNG]  192x108  24bpp  23.976 fps    0.0 kbps ( 0.0 kbyte/s)
[V] filefmt:16  fourcc:0x474E504D  size:192x108  fps:23.976  ftime:=0.0417
Opening video filter: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Unsupported PixelFormat -1
Selected video codec: [ffpng] vfm: ffmpeg (FFmpeg PNG)
==========================================================================
VDec: vo config request - 192 x 108 (preferred colorspace: BGR 1-bit)
Could not find matching colorspace - retrying with -vf scale...
Opening video filter: [scale]
The selected video_out device is incompatible with this codec.
Try appending the scale filter to your filter list,
e.g. -vf spp,scale instead of -vf spp.

Exiting...
№2
$ mencoder -noconfig all mf://*.png -mf w=192:h=108:fps=24000/1001:type=png -of rawvideo -nosound -ovc x264 -x264encopts crf=19 -o video.h264
MEncoder SVN-r1.0~rc3+svn20090426-4.4.3 (C) 2000-2009 MPlayer Team
success: format: 16  data: 0x0 - 0x0
MF file format detected.
[mf] search expr: *.png
[mf] number of files: 2180 (8720)
VIDEO:  [MPNG]  192x108  24bpp  23.976 fps    0.0 kbps ( 0.0 kbyte/s)
[V] filefmt:16  fourcc:0x474E504D  size:192x108  fps:23.976  ftime:=0.0417
Opening video filter: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Unsupported PixelFormat -1
Selected video codec: [ffpng] vfm: ffmpeg (FFmpeg PNG)
==========================================================================
VDec: vo config request - 192 x 108 (preferred colorspace: BGR 1-bit)
Could not find matching colorspace - retrying with -vf scale...
Opening video filter: [scale]
The selected video_out device is incompatible with this codec.
Try appending the scale filter to your filter list,
e.g. -vf spp,scale instead of -vf spp.

Exiting...
elena@elenashare:/media/WORK/Amagami_SS/2$ mencoder mf://*.png -mf w=192:h=108:fps=24000/1001:type=png -as pect 16:9 -ovc raw -o output.aviMEncoder SVN-r1.0~rc3+svn20090426-4.4.3 (C) 2000-2009 MPlayer Team
-as is not an MEncoder option

Exiting... (error parsing command line)

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

У меня такое чувство, что не нравится ему размер 192х108. Понятно, что это 16/9, но мне кажется, он хочет кадры именно стандартного размера (1280х720, или как-то так...)

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

С размерами все в порядке.

В общем, на данный момент такая ситуация.

Следующие две команды должны выполняться без ошибок.

mplayer -vo png:z=3 -nosound inputfile
mencoder mf://*.png -mf fps=24000/1001:type=png -of rawvideo -nosound -ovc x264 -x264encopts crf=19 -o video.h264

Проверить закодированное видео можно с помощью mplayer:

mplayer -fps 24000/1001 video.h264

На вход менкодера подаем только файлы в формате png.

Если в процессе кодирования получаем следующее сообщение

[swscaler @ 0x3f0fc0]BICUBIC scaler, from bgra to yuv420p using MMX2
x264 [info]: using SAR=193/192
x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2
x264 [info]: profile High, level 1.1
[VD_FFMPEG] DRI failure.) 0.00fps Trem: 0min 0mb A-V:0.000 [0:0]
Unsupported PixelFormat 66251.99fps Trem: 0min 0mb A-V:0.000 [179:0]
Unsupported PixelFormat 66
The selected video_out device is incompatible with this codec.
Try appending the scale filter to your filter list, e.g. -vf spp,scale instead of -vf spp.

, то что-то не так со входными файлами. В моем случае некоторые файл был в оттенках серого (Grayscale). Проверить можно, например, при помощи пакета pngmeta

pngmeta -all image.png

image-type: Grayscale with Alpha, non-interlaced

image-type: RGB with Alpha, non-interlaced

или с помощью ImageMagick

identify -format %r image.png
или просто
file image.png
Исправить такой случай можно с помощью пакета ImageMagick и команды:
mogrify -type palettematte PNG24:*.png
Думаю, можно эту операцию положить на mencoder, наверно, он поддерживает такую возможность, но я не уверен. После этого видео должно закодироваться без ошибок.

Еще может быть такой вариант, что закодированное видео будет отображаться неправильно ( у меня экран был разделен на две части, нижняя полностью черная, а в верхней была разбита на три области, в каждой из которых отображался один и тот же кадра). Тогда может помочь добавление опции -vf scale,format=i420.

mencoder mf://*.png -mf fps=24000/1001 -vf scale,format=i420 -of rawvideo -nosound -ovc x264 -x264encopts crf=19 -o video.h264

nickliverpool
()
Ответ на: комментарий от zzdnx

Файлы не изменялись.

После mplayer получились png файлы такого типа:

PNG image, 720 x 400, 8-bit/color RGB, non-interlaced

Допустим, потом файлики изменили и после всех преобразований файлик стал

PNG image, 192 x 108, 1-bit grayscale, non-interlaced

На таких файлах mencoder падает :(. В этому, думаю, и была причина появления ошибок.

Соответственно, либо следить, чтобы файлы оставались

PNG image, 720 x 400, 8-bit/color RGB, non-interlaced

либо преобразовывать проблемные файлы 1-bit grayscale в 8-bit/color RGB =).

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

Разложил на кадры, после чего:

mkdir 2;for i in `ls *.png`;do convert $i -resize 10% ./2/$i;done
cd 2
mencoder mf://*.png -mf fps=24000/1001:type=png -of rawvideo -nosound -ovc x264 -x264encopts crf=19 -o video.h264
MEncoder SVN-r1.0~rc3+svn20090426-4.4.3 (C) 2000-2009 MPlayer Team
success: format: 16  data: 0x0 - 0x0
MF file format detected.
[mf] search expr: *.png
[mf] number of files: 2180 (8720)
VIDEO:  [MPNG]  0x0  24bpp  23.976 fps    0.0 kbps ( 0.0 kbyte/s)
[V] filefmt:16  fourcc:0x474E504D  size:0x0  fps:23.976  ftime:=0.0417
Opening video filter: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Unsupported PixelFormat -1
Selected video codec: [ffpng] vfm: ffmpeg (FFmpeg PNG)
==========================================================================
VDec: vo config request - 192 x 108 (preferred colorspace: BGR 1-bit)
Could not find matching colorspace - retrying with -vf scale...
Opening video filter: [scale]
The selected video_out device is incompatible with this codec.
Try appending the scale filter to your filter list,
e.g. -vf spp,scale instead of -vf spp.

Exiting...

А теперь в опрос: В мергуе нужно указать fps при сборке контейнера, это легко можно реализовывать терминалом, однако сам мергуй отчаяно хочет ЦЕЛОГО числа (у меня были прецеденты, и, как мне кажется, «24000/1001» мергуй скорее всего кушать откажется, хотя я ещё не пробовал). Так как написать FPS?

zzdnx ★★
() автор топика
Ответ на: комментарий от nickliverpool
mencoder mf://*.png -mf fps=24000/1001 -vf scale,format=i420 -of rawvideo -nosound -ovc x264 -x264encopts crf=19 -o video.h264

Аналогично, пробую коррекцию *.png....

zzdnx ★★
() автор топика
Ответ на: комментарий от nickliverpool
mencoder mf://*.png -mf fps=24000/1001 -vf scale,format=i420 -of rawvideo -nosound -ovc x264 -x264encopts crf=19 -o video.h264

Собрал после корректировки входной графики, однако при воспроизведении:

$ mplayer -fps 24000/1001 video.h264
MPlayer SVN-r1.0~rc3+svn20090426-4.4.3 (C) 2000-2009 MPlayer Team
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing video.h264.
libavformat file format detected.
[lavf] Video stream found, -vid 0
VIDEO:  [H264]  192x108  0bpp  23.976 fps    0.0 kbps ( 0.0 kbyte/s)
open: No such file or directory
[MGA] Couldn't open: /dev/mga_vid
open: No such file or directory
[MGA] Couldn't open: /dev/mga_vid
[VO_TDFXFB] Can't open /dev/fb0: Permission denied.
[VO_3DFX] Unable to open /dev/3dfx.
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
==========================================================================
Audio: no sound
FPS forced to be 23.976  (ftime: 0.042).
Starting playback...
VDec: vo config request - 192 x 108 (preferred colorspace: Planar YV12)
VDec: using Planar YV12 as output csp (no 0)
Movie-Aspect is 1.78:1 - prescaling to correct movie aspect.
VO: [xv] 192x108 => 192x108 Planar YV12 
No pts value from demuxer to use for frame!
pts after filters MISSING
No pts value from demuxer to use for frame!,?% 0 0 
pts after filters MISSING
....
No pts value from demuxer to use for frame!,?% 0 0 
pts after filters MISSING
....
No pts value from demuxer to use for frame!,?% 0 0 
pts after filters MISSING
[NULL @ 0xb651ee00]missing picture in access unit0 
V:-9223372036854775808.0   0/  0 ??% ??% ??,?% 0 0 

Exiting... (End of file)
И видео промоталось за считанные секунды... Попробую без опции "-vf scale,format=i420".

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

И вот итог: абсолютно идентично.

[code]mplayer -fps 24000/1001 video.h264 MPlayer SVN-r1.0~rc3+svn20090426-4.4.3 (C) 2000-2009 MPlayer Team mplayer: could not connect to socket mplayer: No such file or directory Failed to open LIRC support. You will not be able to use your remote control.

Playing video.h264. libavformat file format detected. [lavf] Video stream found, -vid 0 VIDEO: [H264] 192x108 0bpp 23.976 fps 0.0 kbps ( 0.0 kbyte/s) open: No such file or directory [MGA] Couldn't open: /dev/mga_vid open: No such file or directory [MGA] Couldn't open: /dev/mga_vid [VO_TDFXFB] Can't open /dev/fb0: Permission denied. [VO_3DFX] Unable to open /dev/3dfx. ========================================================================== Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264) ========================================================================== Audio: no sound FPS forced to be 23.976 (ftime: 0.042). Starting playback... VDec: vo config request - 192 x 108 (preferred colorspace: Planar YV12) VDec: using Planar YV12 as output csp (no 0) Movie-Aspect is 1.78:1 - prescaling to correct movie aspect. VO: [xv] 192x108 => 192x108 Planar YV12 No pts value from demuxer to use for frame! pts after filters MISSING No pts value from demuxer to use for frame!,?% 0 0 pts after filters MISSING ... No pts value from demuxer to use for frame!,?% 0 0 pts after filters MISSING ... No pts value from demuxer to use for frame!,?% 0 0 pts after filters MISSING [NULL @ 0xb64a6e00]missing picture in access unit0 V:-9223372036854775808.0 0/ 0 ??% ??% ??,?% 0 0

Exiting... (End of file)[/code]

zzdnx ★★
() автор топика
Ответ на: комментарий от zzdnx
No pts value from demuxer to use for frame!No pts value from demuxer to use for frame!

Это вполне нормально (http://www.linux.org.ru/jump-message.jsp?msgid=5273889&cid=5285825)

Добавь получившийся видеопоток с помощью mmg из пакета mkvtoolnix-gui в mkv контейнер, проставь FPS и попробуй воспроизвести. Все должно быть в порядке.

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