MEncoder создает "плохие" avi-файлы

Landstreicher

Наблюдается такая проблема: при кодирования файла в MEncoder он создает avi-файл, который нормально играется MPlayer, но другие программы на нем глючат. Например, глючит Virtual Dub, файл отказывается играть Light Alloy, Windows Media Player. Этот же файл, сжатый этой же версией этого же кодека, но в VirtualDub везде нормально играется, никаких проблем нет.
Поиск в инете выявил пару похожих проблем:
http://zebra.fh-weingarten.de/~maxi/html/mplayer-users/2003-07/msg01033.html
http://zebra.fh-weingarten.de/~maxi/html/transcode-devel/2004-03/msg00006.html
Кто-нибудь с этим сталкивался? Какие есть способы решения?

otvertka07

очевидно: не использовать MEncoder

mirt1971

Ну чтобы ответить на этот вопрос, наверное нужно иметь доступ к сжатому тобой файлу... Как минимум. А еще неплохо бы полную командную строку для сжатия.

kindr-16

по первой из тобой же данных ссылок:
"A second part of the problem is case sensitivity in the FOURCC codes. For example vcodec=msmpeg4 produces a stream with FOURCC "div3" instead of "DIV3". Vdub is not smart enough to match the two."
берёшь двоичный редактор и правишь -- не факт, что поможет, но возможно дело в этом.

Landstreicher

Выложил файлы в
orig.avi - оригинальный файл
menc.avi - сжатый MEncoder 1.0-pre5
vdub.avi - сжатый Virtual Dub 1.5.10
В обоих случаях использовался XViD 1.0.2
Сжималось так:
mencoder orig.avi -oac copy -vf crop=352:288:5:0 -ovc xvid -xvidencopts pass=1:bitrate=950:vhq=4:gmc:hq_ac -o /dev/null
mencoder orig.avi -oac copy -vf crop=352:288:5:0 -ovc xvid -xvidencopts pass=2:bitrate=950:vhq=4:gmc:hq_ac
XVID настроен так, чтобы он понимал FOURCC и XVID, и xvid, и XViD, так что дело не в этом.

Landstreicher

> берёшь двоичный редактор и правишь -- не факт, что поможет, но возможно дело в этом.
дело не в этом. VirtualDub конкретно глючит на этом файле. При перемотке вперед и перемотке назад показывает разные кадры.

Landstreicher

проблема в том, что MPlayer/MEncoder - основное средства для работы с видео под Linux. Особых альтернатив тут нет.

kindr-16

[= MPlayer junk data! =][= MPlayer junk data! =][= MPlayer junk data! =][= MPlayer junk data! =][= MPlayer junk data! =][= MPlayer junk data! =][= MPlayer junk data! =][= MPlayer junk data! =][= MPlayer junk data! =][= MPlayer junk data! =][= MPlayer junk data! =][= MPlayer junk data! =][= MPlayer junk data! =][= MPlayer junk data! =][= MPlayer junk data! =][= MPlayer junk data! =][= MPlayer junk data! =]
.....
вот это в начале файла сжатого менкодером -- большинство плееров от этого наверно умирает =) (из тех, которыми я пользуюсь, схавал только crystal)

Landstreicher

Вполне нормальные данные imho.
Ты можешь указать место в спецификации AVI или MPEG4 которому они противоречат?

buka

Но это не мешает им проигрывать orig.avi

Landstreicher

все зависит от задач
в области кодирования видео - согласен
но для меня это не основная задача
я гораздо чаще занимаюсь разработкой программ. также у меня в фоне висит очень много прог, например SMBSearch. когда-то давно он работал под windows xp. однако, многозадачность в windows почему-то не позволяла работать за компьютером, пока он обрабатывал большие запросы. например, при просмотре фильма кадры дергались. я спрашивал об этом в форуме, копал настройки -- не помогало. пришлось обратно уйти в linux.

mirt1971

Итак:
ftp://braindead.hackers/
Там три файла.
1) menc1.avi - создан с помощью mencoder -ovc copy -oac copy menc.avi -o menc1.avi
Это просто для проверки на вшивость твоего mencoder
2) menc_avimerge.avi - c помощью avimerge -i menc.avi -o menc_avimerge.avi
В сущности это тот же авишник но с другим хедером
3) menc.ogm - это авишник, положенный в другой контейнер. Для проверки виноваты ли авишные хедеры или сами данные.
Попробуй их погонять и сообщи результаты.

Landstreicher

[lorien ~]$ telnet braindead.hackers 139
Trying 172.16.34.149...
telnet: Unable to connect to remote host: Connection refused
[lorien ~]$ telnet braindead.hackers 445
Trying 172.16.34.149...
telnet: Unable to connect to remote host: Connection refused
[lorien ~]$ telnet braindead.hackers 21
Trying 172.16.34.149...
telnet: Unable to connect to remote host: Connection refused
[lorien ~]$ ping braindead.hackers
PING braindead.hackers (172.16.34.149) 56(84) bytes of data.
64 bytes from braindead.hackers (172.16.34.149): icmp_seq=1 ttl=63 time=0.398 ms

mirt1971

А ты чего хотел? Конечно я уже все зашарил... Теперь можешь забирать.

Landstreicher

Результаты
1) menc1.avi - не смотрится WMP, в Virtual Dub наблюдаются глюки
2) menc_avimerge.avi - смотрится в WMP, в Virtual Dub все равно глюки
3) menc.ogm - смотрится в WMP, Virtual Dub его вообще не открывает (похоже он только для avi)
Похоже, что кривой и заголовок, и сами данные.
Как ты следал menc_avimerge.avi? Что изменил в заголовках.

mirt1971

Я же написал: avimerge -i menc.avi -o menc_avimerge.avi

Landstreicher

> Я же написал: avimerge -i menc.avi -o menc_avimerge.avi
Ну это понятно Вопрос что там такое сделал avimerge?

mirt1971

Да, кстати, а почему ты сжимаешь xvid'ом? Мне вот весьма нравится собственный кодек mencoder'а

mirt1971

Он прочел файл, и записал его заново. С новым хедером.

Landstreicher

Это какой именно? среди того что умеет libavcodec (-ovc lavc) самое приличное - Divx 4/5. Я проверял свой файл, на этом же битрейт DivX жмет хуже, чем XViD.

mirt1971

Я жму вот так: (это один из моих скриптов)


#! /bin/sh
source ./options
crop_n=`./goodcrop $crop`
echo "Выбранный crop: $crop. Изменяем до $crop_n"
echo "Выбранный bitrate = $bitrate kbps"
echo "Выбранные файлы: $files"
uit=`./useinvtel.py $fps`
if [ "$uit" = "yes" ]
then
echo "Выбранный размер: "`./goodsize 23.976`
./mycat "$files" | mencoder - -fps 29.97 -ofps 23.976 -oac copy -vf filmdint=crop="$crop_n",hqdn3d,pp=hb/vb/dr,scale=`./goodsize 23.976` -zoom \
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$bitrate:v4mv:mbd=2:trell:cmp=3:subcmp=3:mbcmp=3:vpass="$1" \
-o "pass$1.avi"
else
echo "Выбранный размер: "`./goodsize $fps`
./mycat "$files" | mencoder - -oac copy -vf crop="$crop_n",hqdn3d,pp=hb/vb/dr,scale=`./goodsize $fps` -zoom \
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$bitrate:v4mv:mbd=2:trell:cmp=3:subcmp=3:mbcmp=3:vpass="$1" \
-o "pass$1.avi"
fi
rm ./pass1.avi


И результат меня весьма устраивает.

mirt1971

Если интересно, то могу выложить свои скрипты. Они предназначены в основном для сжатия DVD, но могут быть использованы и просто так. Они сами подбирают родходящий размер изображения, высчитывают нужный битрейт для заданного выходного объема, делают обрезание картинки... В общем все полностью автоматизировано

Landstreicher

Ты пакуешь как раз в DivX 4/5 при помощи libavcodec.
Я пробовал так:
vcodec=mpeg4:vbitrate=$bitrate:v4mv:mbd=2:trell:cmp=3
Результат получается хуже, чем у xvid.
Не думаю что опции subcmp=3:mbcmp=3 могут на что-то вляить.
Это особенность исходного материала. При оцифровке VHS-кассеты записей с любительской камеры, получающееся изображение шумное, сильно дрожжит. На таки вещах DivX работает плохо. При сжатии DVD таких проблем нет.

mirt1971

Во первых, это НЕ DivX codec. Это опенсурс кодек, разрабатываемый под эгидой mplayer Про шумное изображение: а ты заметил hqdn3d,pp=hb/vb/dr ? Это очень хорошо помогает от этого... Попробуй.

mirt1971

Если не сложно, можешь дать исходный материал? Я поэкспериментирую, посмотрю чем действительно лучше сжимать...

Landstreicher

man mplayer:
vcodec=<value>
use the specified codec (default: mpeg4):
mpeg4 - DivX 4/5
Кодек, то opensource конечно, но он работает по алгоритму DivX, поэтому все те же свойства.
Изображение плохое не в том, что точки шумят, а оно само целиком ездит в разные стороны. С этим никаким denoiser-ом не справится. Нужна система компенсации движения.
Материал могу дать. В принципе, попробуй на той же самом куске который я расшарил - там все эти глюки видны

mirt1971

В lavc есть компенсация движения: man mplayer


vme=<0-5>
motion estimation method. Available methods are:
0
none (very low quality)
1
full (slow, currently unmaintained and disabled)
2
log (low quality, currently unmaintained and disabled)
3
phods (low quality, currently unmaintained and disabled)
4
EPZS: size=1 diamond, size can be adjusted with the *dia options (default)
5
X1 (experimental, currently aliased to EPZS)
NOTE: 0-3 currently ignores the amount of bits spent, so quality may be low.
me_range=<0-9999>
motion estimation search range (default: 0 (unlimited

vall

попробуй mplayer из cvs
а то они вобще любители делать глюкавые релизы.
у них такой стиль разработки
если лень качать у меня на ftp://communique.hackers/src/mplayer есть сегоняшний снэпшот.
Оставить комментарий
Имя или ник:
Комментарий: