LINUX.ORG.RU

ffmpeg на большом файле: Cannot allocate memory


0

0

Здравствуйте!
Есть большой файл в x264:
-rw-r--r-- 1 serega adm 22693710298 Май 16 12:36 Avatar.2009.BD.Rip.1080p.h264.2xRus.Eng.mkv

Хочется пережать его в нечто нетормозящее, будь то theora или webm.

Однако при открытии файла:
ffmpeg -i Avatar.2009.BD.Rip.1080p.h264.2xRus.Eng.mkv -vcodec mpeg4 -b 800k -acodec libmp3lame out.avi

выдаётся:
FFmpeg version SVN-r23357, Copyright (c) 2000-2010 the FFmpeg developers
built on May 28 2010 11:31:06 with gcc 4.3.2
configuration: --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/lib --mandir=/usr/share/man --enable-static --enable-shared --cc=i686-pc-linux-gnu-gcc --disable-debug --disable-network --enable-runtime-cpudetect --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libx264 --enable-libxvid --disable-indev=oss --disable-indev=jack --disable-outdev=oss --enable-x11grab --enable-libvpx --enable-pthreads --enable-libgsm --enable-libdirac --enable-libspeex --enable-libopenjpeg --disable-vdpau --disable-vaapi --disable-altivec --disable-amd3dnow --disable-amd3dnowext --cpu=pentium4 --enable-gpl --enable-version3 --enable-postproc --enable-avfilter --enable-avfilter-lavf --disable-stripping --enable-hardcoded-tables --disable-doc
libavutil 50.16. 0 / 50.16. 0
libavcodec 52.72. 0 / 52.72. 0
libavformat 52.67. 0 / 52.67. 0
libavdevice 52. 2. 0 / 52. 2. 0
libavfilter 1.20. 0 / 1.20. 0
libswscale 0.10. 0 / 0.10. 0
libpostproc 51. 2. 0 / 51. 2. 0
Avatar.2009.BD.Rip.1080p.h264.2xRus.Eng.mkv: Cannot allocate memory

Или в webm:
ffmpeg -i Avatar.2009.BD.Rip.1080p.h264.2xRus.Eng.mkv out.webm
FFmpeg version SVN-r23357, Copyright (c) 2000-2010 the FFmpeg developers
built on May 28 2010 11:31:06 with gcc 4.3.2
configuration: --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/lib --mandir=/usr/share/man --enable-static --enable-shared --cc=i686-pc-linux-gnu-gcc --disable-debug --disable-network --enable-runtime-cpudetect --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libx264 --enable-libxvid --disable-indev=oss --disable-indev=jack --disable-outdev=oss --enable-x11grab --enable-libvpx --enable-pthreads --enable-libgsm --enable-libdirac --enable-libspeex --enable-libopenjpeg --disable-vdpau --disable-vaapi --disable-altivec --disable-amd3dnow --disable-amd3dnowext --cpu=pentium4 --enable-gpl --enable-version3 --enable-postproc --enable-avfilter --enable-avfilter-lavf --disable-stripping --enable-hardcoded-tables --disable-doc
libavutil 50.16. 0 / 50.16. 0
libavcodec 52.72. 0 / 52.72. 0
libavformat 52.67. 0 / 52.67. 0
libavdevice 52. 2. 0 / 52. 2. 0
libavfilter 1.20. 0 / 1.20. 0
libswscale 0.10. 0 / 0.10. 0
libpostproc 51. 2. 0 / 51. 2. 0
Avatar.2009.BD.Rip.1080p.h264.2xRus.Eng.mkv: Cannot allocate memory

Добавил свапа 37 Гб:
free
total used free shared buffers cached
Mem: 904044 883936 20108 0 52344 371172
-/+ buffers/cache: 460420 443624
Swap: 37200068 227784 36972284

Бесполезно.
Как быть, чем можно перекодить?

Ничем, поскольку под linux H.264 умеют декодировать только ffmpeg и связка MPlayer + CoreAVC. Попробуй другую версию ffmpeg или загрузись с 64-битного LiveCD.

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

Гм, запустил на 64-х битном железе и системе:

uname -a
Linux prx 2.6.30-bridge-64_32 #3 SMP Tue Nov 10 11:07:28 VLAT 2009 x86_64 Intel(R) Xeon(R) CPU E5310 @ 1.60GHz GenuineIntel GNU/Linux

ffmpeg -i Avatar.2009.BD.Rip.1080p.h264.2xRus.Eng.mkv -vcodec xvid 1.avi
FFmpeg version SVN-r20373, Copyright (c) 2000-2009 Fabrice Bellard, et al.
built on Jun 4 2010 15:36:36 with gcc 4.3.2
configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --enable-static --enable-shared --cc=x86_64-pc-linux-gnu-gcc --disable-debug --disable-ffplay --disable-network --enable-runtime-cpudetect --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libx264 --enable-libxvid --disable-indev=v4l --disable-indev=v4l2 --disable-indev=alsa --disable-indev=oss --disable-indev=jack --disable-outdev=alsa --disable-outdev=oss --enable-pthreads --enable-libopencore-amrwb --enable-libopencore-amrnb --enable-libspeex --enable-libopenjpeg --disable-vdpau --disable-vdpau --disable-vaapi --disable-altivec --cpu=core2 --enable-gpl --enable-version3 --enable-postproc --enable-avfilter --enable-avfilter-lavf --disable-stripping --enable-hardcoded-tables
libavutil 50. 3. 0 / 50. 3. 0
libavcodec 52.37. 1 / 52.37. 1
libavformat 52.39. 2 / 52.39. 2
libavdevice 52. 2. 0 / 52. 2. 0
libavfilter 1. 4. 1 / 1. 4. 1
libswscale 0. 7. 1 / 0. 7. 1
libpostproc 51. 2. 0 / 51. 2. 0
Avatar.2009.BD.Rip.1080p.h264.2xRus.Eng.mkv: memory allocation error occurred

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

valgrind ffmpeg -i Avatar.2009.BD.Rip.1080p.h264.2xRus.Eng.mkv -vcodec xvid 1.avi

Вывод в студию. Файл он не перекодирует, но с вероятностью 0.01% найдет уязвимость :)

AEP ★★★★★ ()

>чем можно перекодить?
mencoder?

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

> под linux H.264 умеют декодировать только ffmpeg и связка MPlayer + CoreAVC

Поправка: ffmpeg и программы, его использующие (в т.ч. mplayer/mencoder), а также связка mplayer + CoreAVC

Предложение pumbez воспользоваться mencoder эквивалентно предложению воспользоваться другой версией ffmpeg.

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

Предложение pumbez воспользоваться mencoder эквивалентно предложению воспользоваться другой версией ffmpeg.

Ну не скажите: я mencoder'ом декодировал 10-гигабайтные фильмы (чтобы на DVD влезло). Правда, ffmpeg'ом не пользовался: не люблю я его, да и у mplayer'а больше гибкости.

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

Понимаю, что оффтопик, но у меня опыт прямо противоположный: ffmpeg умеет делать ipod-совместимые mp4-файлы, mencoder - нет (хотя информация за год могла устареть).

IMHO, топикстартеру попался слегка битый файл. Вопрос к топикстартеру: чем играли, когда заявили, что H.264 тормозит? Или это утверждение не проверялось, и следует просто из спецификаций системы? Иными словами - хоть в одном плеере играется, пусть даже с тормозами?

AEP ★★★★★ ()

Похожая проблема с ffmpeg у меня наблюдалась на файлах с большим числом потоков (> 20), а именно на матрешках с кучей субтитров на разных языках. В результате в ffplay и xbmc такие файлы не игрались, хотя mplayer играл их на ура (там похоже свой собственный демультиплексор mkv). Так что могу предложить либо всопользоваться mecoder'ом, либо сперва через mkvtoolnix перемуксить исходный файл, выбросив лишние потоки.

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

> Вот бага на эту тему: https://roundup.ffmpeg.org/issue963

Спасибо! Установка MAX_STREAMS в 200 в libavformat/avformat.h решило проблему.
Потоков действительно много - 41-а штука в исходном файле.

IMHO, топикстартеру попался слегка битый файл. Вопрос к топикстартеру: чем играли, когда заявили, что H.264 тормозит? Или это утверждение не проверялось, и следует просто из спецификаций системы? Иными словами - хоть в одном плеере играется, пусть даже с тормозами?


Играется mplayer-ом. x264 славится требовательностью к ресурсам. theora 1.1.1 намного более скромна, в неё и кодировал, сейчас хочу попробовать в vp8.

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

>Играется mplayer-ом.

А видеокарта и процессор какие? Может ffmpeg-mt, VDPAU или CoreAVC-for-Linux поможет?

x264 славится требовательностью к ресурсам.

Не всегда. Все зависит от битрейта, разрешения и используемых опций кодека. Возможно стоит попробовать перекодировать в x264 с опцией "--tune fastdecode", заодно можно будет снизить битрейт и разрешение.

сейчас хочу попробовать в vp8.

Не стоит. В данный момент оно значительно медленнее H.264: http://pastebin.com/bF61ZMGF.

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

> А видеокарта и процессор какие? Может ffmpeg-mt, VDPAU или CoreAVC-for-Linux поможет?

gf 5200, AthlonXP 1900.

x264 славится требовательностью к ресурсам.


Не всегда. Все зависит от битрейта, разрешения и используемых опций кодека. Возможно стоит попробовать перекодировать в x264 с опцией "--tune fastdecode", заодно можно будет снизить битрейт и разрешение.
На том же качестве theora-1.1.1 у меня загружает почти весь процессор, но не тормозит. Да и лицензионные ограничения у 264-го кодека.

сейчас хочу попробовать в vp8.

Не стоит. В данный момент оно значительно медленнее H.264: >http://pastebin.com/bF61ZMGF.


Гм... жаль...

progserega ()

первая ссылка в гугле и на эту страницу. сегодня только вдруг столкнулся


$ ffmpeg -i Avatar.2009.BD.Rip.720p.h264.Rus.Eng.mkv -ac 2 -ab 256 rus.aac
FFmpeg version SVN-r23802, Copyright (c) 2000-2010 the FFmpeg developers
built on Jun 26 2010 20:15:51 with gcc 4.4.4
configuration: --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/lib --mandir=/usr/share/man --enable-static --enable-shared --cc=i686-pc-linux-gnu-gcc --enable-gpl --enable-version3 --enable-postproc --enable-avfilter --enable-avfilter-lavf --disable-stripping --disable-debug --disable-doc --disable-vaapi --disable-vdpau --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-libfaac --enable-nonfree --enable-libdc1394 --disable-indev=v4l --disable-indev=v4l2 --disable-indev=oss --disable-indev=jack --enable-x11grab --disable-outdev=oss --enable-pthreads --enable-libvpx --disable-altivec --cpu=host --enable-hardcoded-tables
libavutil 50.19. 0 / 50.19. 0
libavcodec 52.78. 0 / 52.78. 0
libavformat 52.71. 0 / 52.71. 0
libavdevice 52. 2. 0 / 52. 2. 0
libavfilter 1.20. 0 / 1.20. 0
libswscale 0.11. 0 / 0.11. 0
libpostproc 51. 2. 0 / 51. 2. 0
[matroska @ 0x807b510] Too many streams
Avatar.2009.BD.Rip.720p.h264.Rus.Eng.mkv: Cannot allocate memory

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