Пересборка mplayer и ffmpeg (Нужно, что бы mencoder понимал параметр -x264encopts)

PCLinuxOS

Модератор: Bizdelnick

Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Пересборка mplayer и ffmpeg

Сообщение yamah »

Нужно сконвертировать DVD-Видео в формат x264 в контейнере MKV для архивной копии.
Для конвертирования видео есть скрипт.

Код: Выделить всё

#!/bin/bash
# x264-enc-3p.sh

source="$1"
bitrate="$2"
filters="$3"
name="$(date +%F-%T)".avi
log="$name".log

# 21
e="mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=auto:psnr:ssim:b_adapt=2:deblock:\
cabac:chroma_me:subq=9:partitions=all:8x8dct:me=umh:nofast_pskip:nodct_decimate:me_range=32:trellis=2:frameref=16:\
bframes=16:b_pyramid:weight_b:mixed_refs:direct_pred=auto:keyint=750:keyint_min=25:direct_8x8=-1:aq_mode=1:aq_strength=1.0:\
psy_rd=1.0,0.0:bitrate=$bitrate"

(time (time $e:pass=1 -o /dev/null && time $e:pass=3 -o /dev/null && time $e:pass=3 -o "$name" && echo "Encoding time:") \
&> "$log"; rm -v divx2pass.log*) &

tail -f "$log"

Скрипт вылетает с ошибкой

Код: Выделить всё

syntax error near unexpected token `time'

Причина ошибки в том, что mencoder не признает параметра -x264encopts.
Нагугленное решение - пересобрать mencoder (естественно с mplayer)

Усть src-пакет (в расковыряном виде: сырцы и спек-файл).
В spec-файле поставлена сборка PLF.
Но при сборке на этапе проверки выскакивает сообщение

Код: Выделить всё

Checking for x264 ... no (in libavcodec: no)

Закралось подозрение, что ffmpeg из plf собран таки без этого энкодера.

При попытке пересобрать ffmpeg с поддержкой libavcodec x264, вылетает ошибка

Код: Выделить всё

libavcodec/libx264.c: В функции ‘encode_nals’:
libavcodec/libx264.c:60: предупреждение: неявная декларация функции ‘x264_nal_encode’
libavcodec/libx264.c: В функции ‘X264_init’:
libavcodec/libx264.c:169: ошибка: ‘x264_param_t’ не содержит элемента с именем ‘b_bframe_pyramid’
make: *** [libavcodec/libx264.o] Ошибка 1


Подскажите, пожалуйста, как мне победить сию проблему?
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
imperfecto
Сообщения: 70
ОС: Mandriva 2010.0 KDE 4.3.2

Re: Пересборка mplayer и ffmpeg

Сообщение imperfecto »

Компьютер позволяет решать все те проблемы, кoтoрые дo изобретения компьютера не существовали.
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Re: Пересборка mplayer и ffmpeg

Сообщение yamah »


Прочитал по ссылке.
И чем мне это поможет?
У меня нет проблем с воспроизведением видео. Мне нужно сконвертировать видео с конкретными харрактеристиками.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
repsakkgn
Сообщения: 175
ОС: ARCH

Re: Пересборка mplayer и ffmpeg

Сообщение repsakkgn »

сам конвертирую все двд в mkv(так удобнее хранить, один файл, а не video_TS и audio_TS) с помощью проги handbrake. Mplayer и все кодеки стандартные из реп. Вроде там есть и формат x264. Попробуй, вот ссылка на мандривовский rpm http://mandrivausers.org/index.php?/topic/...transcoder-gui/
Спасибо сказали:
olelukoie
Сообщения: 1248
ОС: Linux, Win

Re: Пересборка mplayer и ffmpeg

Сообщение olelukoie »

yamah писал(а):
29.01.2010 10:06
При попытке пересобрать ffmpeg с поддержкой libavcodec x264, вылетает ошибка

Код: Выделить всё

libavcodec/libx264.c: В функции ‘encode_nals’:
libavcodec/libx264.c:60: предупреждение: неявная декларация функции ‘x264_nal_encode’
libavcodec/libx264.c: В функции ‘X264_init’:
libavcodec/libx264.c:169: ошибка: ‘x264_param_t’ не содержит элемента с именем ‘b_bframe_pyramid’
make: *** [libavcodec/libx264.o] Ошибка 1


Подскажите, пожалуйста, как мне победить сию проблему?

гуглом пользоваться пробовали?
ffmpeg+x264
ffmpeg compilation fails with:
libavcodec/libx264.c: In function 'encode_nals':
libavcodec/libx264.c:60: warning: implicit declaration of function 'x264_nal_encode'
libavcodec/libx264.c: In function 'X264_init':
libavcodec/libx264.c:169: error: 'x264_param_t' has no member named 'b_bframe_pyramid'
make: *** [libavcodec/libx264.o] Error 1

This means you are using incompatible ffmpeg and libx264 versions. Try to upgrade ffmpeg or to downgrade libx264.

Последняя фраза по-русски звучит так: "это означает, что Вы используете несовместимые версии ffmpeg и libx264. Попробуйте обновить ffmpeg или взять более старую libx264." Вот ссылка на ресурс по ошибкам сборки ffmpeg и mplayer.
Спасибо сказали:
BDag
Сообщения: 276
ОС: Mandriva Linux Cooker

Re: Пересборка mplayer и ffmpeg

Сообщение BDag »

yamah писал(а):
29.01.2010 10:06
Нужно сконвертировать DVD-Видео в формат x264 в контейнере MKV для архивной копии.
Для конвертирования видео есть скрипт.

Код: Выделить всё

#!/bin/bash
...
(time (time $e:pass=1 -o /dev/null && time $e:pass=3 -o /dev/null && time $e:pass=3 -o "$name" && echo "Encoding time:") \
&> "$log"; rm -v divx2pass.log*) &
...

Скрипт вылетает с ошибкой

Код: Выделить всё

syntax error near unexpected token `time'

Причина ошибки в том, что mencoder не признает параметра -x264encopts.
...
Подскажите, пожалуйста, как мне победить сию проблему?

Причина ошибки не в том, что mencoder что-то не признает, а в том что вы неправильно используете time.
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Re: Пересборка mplayer и ffmpeg

Сообщение yamah »

repsakkgn писал(а):
29.01.2010 12:07
сам конвертирую все двд в mkv(так удобнее хранить, один файл, а не video_TS и audio_TS) с помощью проги handbrake. Mplayer и все кодеки стандартные из реп. Вроде там есть и формат x264. Попробуй, вот ссылка на мандривовский rpm http://mandrivausers.org/index.php?/topic/...transcoder-gui/

Спасибо.
Однако handbrake не хочет работать со скопированными на диск исходниками. Или я этого не нашел.

olelukoie писал(а):
29.01.2010 18:09
yamah писал(а):
29.01.2010 10:06
При попытке пересобрать ffmpeg с поддержкой libavcodec x264, вылетает ошибка

Код: Выделить всё

libavcodec/libx264.c: В функции ‘encode_nals’:
libavcodec/libx264.c:60: предупреждение: неявная декларация функции ‘x264_nal_encode’
libavcodec/libx264.c: В функции ‘X264_init’:
libavcodec/libx264.c:169: ошибка: ‘x264_param_t’ не содержит элемента с именем ‘b_bframe_pyramid’
make: *** [libavcodec/libx264.o] Ошибка 1


Подскажите, пожалуйста, как мне победить сию проблему?

гуглом пользоваться пробовали?
ffmpeg+x264
ffmpeg compilation fails with:
libavcodec/libx264.c: In function 'encode_nals':
libavcodec/libx264.c:60: warning: implicit declaration of function 'x264_nal_encode'
libavcodec/libx264.c: In function 'X264_init':
libavcodec/libx264.c:169: error: 'x264_param_t' has no member named 'b_bframe_pyramid'
make: *** [libavcodec/libx264.o] Error 1

This means you are using incompatible ffmpeg and libx264 versions. Try to upgrade ffmpeg or to downgrade libx264.

Последняя фраза по-русски звучит так: "это означает, что Вы используете несовместимые версии ffmpeg и libx264. Попробуйте обновить ffmpeg или взять более старую libx264." Вот ссылка на ресурс по ошибкам сборки ffmpeg и mplayer.

Спасибо за ссылку на ресурс.
В Гугл не полез из-за уверенности, что ошибка в пакете с сырцами. Так как я только пересобирал официальный мандривовский пакет, с подправленным спек-файлом (на сборку с поддержкой x264 в libavcodec). Возможно, что моя ошибка в уверенности.

BDag писал(а):
29.01.2010 21:58
yamah писал(а):
29.01.2010 10:06
Нужно сконвертировать DVD-Видео в формат x264 в контейнере MKV для архивной копии.
Для конвертирования видео есть скрипт.

Код: Выделить всё

#!/bin/bash
...
(time (time $e:pass=1 -o /dev/null && time $e:pass=3 -o /dev/null && time $e:pass=3 -o "$name" && echo "Encoding time:") \
&> "$log"; rm -v divx2pass.log*) &
...

Скрипт вылетает с ошибкой

Код: Выделить всё

syntax error near unexpected token `time'

Причина ошибки в том, что mencoder не признает параметра -x264encopts.
...
Подскажите, пожалуйста, как мне победить сию проблему?

Причина ошибки не в том, что mencoder что-то не признает, а в том что вы неправильно используете time.

Скрипт не мой, позаимствовал с ресурса torrents.ru. И именно этот скрипт работает у многих людей в Gento.
Если проблема с использованием time, то в чем именно? Ошибка вылетает, если я в этом же скрипте пытаюсь выполнить команду:

Код: Выделить всё

time $e:pass=1 -o /dev/null
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
olelukoie
Сообщения: 1248
ОС: Linux, Win

Re: Пересборка mplayer и ffmpeg

Сообщение olelukoie »

Кстати, ffmpeg в PLF собран таки с поддержкой x264:

Код: Выделить всё

$ ldd ffmpeg
        linux-vdso.so.1 =>  (0x00007fff37dff000)
        libpostproc.so.51 => /usr/lib64/libpostproc.so.51 (0x00007f1241257000)
        libavdevice.so.52 => /usr/lib64/libavdevice.so.52 (0x00007f124104b000)
        libavformat.so.52 => /usr/lib64/libavformat.so.52 (0x00007f1240d8f000)
        libavcodec.so.52 => /usr/lib64/libavcodec.so.52 (0x00007f12401aa000)
        libavutil.so.50 => /usr/lib64/libavutil.so.50 (0x00007f123ff99000)
        libswscale.so.0 => /usr/lib64/libswscale.so.0 (0x00007f123fd47000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f123fac5000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f123f8a9000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f123f53d000)
        libdc1394.so.22 => /usr/lib64/libdc1394.so.22 (0x00007f123f2c8000)
        libraw1394.so.8 => /usr/lib64/libraw1394.so.8 (0x00007f123f0c1000)
        libasound.so.2 => /usr/lib64/libasound.so.2 (0x00007f123eddc000)
        libjack.so.0 => /usr/lib64/libjack.so.0 (0x00007f123ebc1000)
        libX11.so.6 => /usr/lib64/libX11.so.6 (0x00007f123e887000)
        libXext.so.6 => /usr/lib64/libXext.so.6 (0x00007f123e675000)
        libXfixes.so.3 => /usr/lib64/libXfixes.so.3 (0x00007f123e46f000)
        libz.so.1 => /lib64/libz.so.1 (0x00007f123e25a000)
        libbz2.so.1 => /usr/lib64/libbz2.so.1 (0x00007f123e049000)
        libfaad.so.2 => /usr/lib64/libfaad.so.2 (0x00007f123de07000)
        libmp3lame.so.0 => /usr/lib64/libmp3lame.so.0 (0x00007f123db8e000)
        libopencore-amrnb.so.0 => /usr/lib64/libopencore-amrnb.so.0 (0x00007f123d95e000)
        libopencore-amrwb.so.0 => /usr/lib64/libopencore-amrwb.so.0 (0x00007f123d747000)
        libschroedinger-1.0.so.0 => /usr/lib64/libschroedinger-1.0.so.0 (0x00007f123d4b8000)
        libtheoraenc.so.1 => /usr/lib64/libtheoraenc.so.1 (0x00007f123d279000)
        libtheoradec.so.1 => /usr/lib64/libtheoradec.so.1 (0x00007f123d05f000)
        libvorbisenc.so.2 => /usr/lib64/libvorbisenc.so.2 (0x00007f123cc86000)
        libvorbis.so.0 => /usr/lib64/libvorbis.so.0 (0x00007f123ca59000)
        libx264.so.83 => /usr/lib64/libx264.so.83 (0x00007f123c78c000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f1241495000)
        libraw1394.so.11 => /usr/lib64/libraw1394.so.11 (0x00007f123c57e000)
        libusb-1.0.so.0 => /lib64/libusb-1.0.so.0 (0x00007f123c370000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f123c16c000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f123bf64000)
        libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00007f123bd48000)
        liboil-0.3.so.0 => /usr/lib64/liboil-0.3.so.0 (0x00007f123bab9000)
        libogg.so.0 => /usr/lib64/libogg.so.0 (0x00007f123b8b3000)
        libXau.so.6 => /usr/lib64/libXau.so.6 (0x00007f123b6b0000)
        libXdmcp.so.6 => /usr/lib64/libXdmcp.so.6 (0x00007f123b4aa000)

Обратите внимание на строку "libx264.so.83 => /usr/lib64/libx264.so.83 (0x00007f123c78c000)". Это в кукере, а в 2010.0 там будет строка "libx264.so.65 =>...". Можете проверить сами.
Спасибо сказали:
repsakkgn
Сообщения: 175
ОС: ARCH

Re: Пересборка mplayer и ffmpeg

Сообщение repsakkgn »

handbrake работает со скопированным на жесткий двд диском. Жмёшь source, и ставишь галку open video_ts folder, ну и показываешь, где лежит..
Спасибо сказали:
Аватара пользователя
pingus
Сообщения: 104
ОС: Mandriva 2010.1

Re: Пересборка mplayer и ffmpeg

Сообщение pingus »

Скрипт с torrents.ru, такой вот скрипт. И нечего на плф плевать - они молодцы. Надо было с самого начала курить ман bash
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Пересборка mplayer и ffmpeg

Сообщение drBatty »

yamah писал(а):
29.01.2010 10:06
(time (time $e:pass=1 -o /dev/null && time $e:pass=3 -o /dev/null && time $e:pass=3 -o "$name" && echo "Encoding time:") \
&> "$log"; rm -v divx2pass.log*) &

а зачем 2 раза time?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Re: Пересборка mplayer и ffmpeg

Сообщение yamah »

olelukoie писал(а):
30.01.2010 23:35
Кстати, ffmpeg в PLF собран таки с поддержкой x264:

Обратите внимание на строку "libx264.so.83 => /usr/lib64/libx264.so.83 (0x00007f123c78c000)". Это в кукере, а в 2010.0 там будет строка "libx264.so.65 =>...". Можете проверить сами.


pingus писал(а):
31.01.2010 13:30
Скрипт с torrents.ru, такой вот скрипт. И нечего на плф плевать - они молодцы. Надо было с самого начала курить ман bash

Стормозил. Не было бы поддержки, так бы не смотрел видео в этом формате.

repsakkgn писал(а):
31.01.2010 00:47
handbrake работает со скопированным на жесткий двд диском. Жмёшь source, и ставишь галку open video_ts folder, ну и показываешь, где лежит..

Спасибо за подсказку.
Но мне от конвертора нужны две вещи: кодирование б три и более прохода и поддержка пакетной обработки.

drBatty писал(а):
31.01.2010 13:51
yamah писал(а):
29.01.2010 10:06
(time (time $e:pass=1 -o /dev/null && time $e:pass=3 -o /dev/null && time $e:pass=3 -o "$name" && echo "Encoding time:") \
&> "$log"; rm -v divx2pass.log*) &

а зачем 2 раза time?

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

С первоначальной проблемой разобрался - оказалось, что сменилось название параметра. Название исправил на x264enc.
Но оказалось, что параметр -ovc в моей версии mencoder-а не знает кодека x264.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
BDag
Сообщения: 276
ОС: Mandriva Linux Cooker

Re: Пересборка mplayer и ffmpeg

Сообщение BDag »

посмотри в сторону lavc (-lavcopts)
Спасибо сказали: