LINUX.ORG.RU

Работа с видеофайлом


0

0

Необходимо преобразовать фреймы видеофайла в набор jpg файлов.
Может кто-то знает как это сделать.
Лучшее что нашел - это ffmpeg, но он не в jpg выдает, а в YUV плоскостях.
Как то не хочется самому писать конвертер YUV->RGB->JPG.
Подскажите, а?

Заранее благодарен.

★★★★

точно не скажу, но есть mjpeg-tools должны помочь

kao ★★
()

какоеннить divx5 видео перекодировать в понятное для mjpegtools

Mjpegtools обрабатывает файлы только в формате mjpeg. Преобразовать фидеофайл, сжатый любым из видеокодеков (которые понимаются и проигрываются при помощи mplayer и поставляемых вместе с ним набором кодеков) можно таким образом:

mplayer -vo null -ao pcm -waveheader file.avi

сохраняем звук

mkfifo stream.yuv

делаем fifo file stream.yuv, который по умолчанию понимает mplayer

mplayer -vo yuv4mpeg -nosound -noframedrop file.avi

пишем в фифо-файл, далее необходимо открыть
другую консоль читать fifo-file. Mplayer не будет писать в fifo-file
до тех пор, пока с другой стороны именованный канал (fifo-file) не будет прочитан. Т.е. вполне хватит времени открыть другую консоль и набрать читающую из фифо команду

cat stream.yuv | yuv2lav -o video.avi

где video.avi теперь находится в пригодном для lavtools формате (mjpeg avi). Если стороны видеоизображения не кратны 16 (видеодиск с 5-м элементом куплен на рынке), то возникнет такая ошибка:

[vilfred@mobile100 films]$ cat stream.yuv | yuv2lav -o video.avi
**ERROR: [yuv2lav] Image dimensions (512x218) not multiples of 16
**ERROR: [yuv2lav] Couldn't compress YUV to JPEG
[vilfred@mobile100 films]$

исправляется она например так:

cat stream.yuv | yuvscaler -O SIZE_512x224 | yuv2lav -o video.avi

Проиграть вновь полученный файл можно при помощи команды

lavplay +n video.avi

===============================================================

а дальше перекодировать в pnm если получилось интерлейс-видео

lav2yuv /home/vilfred/video/lavperl/out.avi | yuvdenoise -F -f | y4mtoppm | pnmsplit - /home/vilfred/video/lavperl/pnm/image%d.pnm

если не интерлейсед (черезстрочные глюки), то както так:

===============================================================

(from https://sourceforge.net/docman/display_doc.php?docid=3456&group_id=5776#s...)
6.4 Separate images

>mkdir jpg; lavtrans -o jpg/image%05d.jpg -f i stream.avi

First create the directory "jpg". Then lavtrans will create single JPG images in the jpg directory from the stream.avi file. The files will be named: image00000.jpg, image00001.jpg ....

The jpg images created contain the whole picture. But if you have recorded at full size the images are stored interlaced. Usually the picture viewers show only the first field in the jpg file.

If you want to have the image in a single file you can use that version

> lav2yuv -f 1 stream.avi | y4mtoppm -L >file.pnm

If you want to split the fields into single files use that:

> lav2yuv -f 5 ../stream.avi | y4mtoppm | pnmsplit - image%d.pnm

Maybe interesting if you need sample images and do not want to play around with grabbing a single image.

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

спасибо всем!
похоже lavtrans - это то, что мне надо.
Один недостаток - нужно преобразовывать в mjpeg.



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

А тебе не проще с помощью mencoder'а его нарезать в jpeg, а затем, если тебя что-то в картинках не устраивает, преобразовать их с помощью imagemagic?

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