Author Topic: DVD - (mencoder) -> MPEG4  (Read 13499 times)

0 Members and 1 Guest are viewing this topic.

Offline One

  • Jr. Member
  • **
  • Posts: 87
  • Karma: +0/-0
DVD - (mencoder) -> MPEG4
« on: December 22, 2005, 17:09:57 »
Пожалуйста, кто имел успех в кодировании DVD в MPEG4 с помощью mencoder, поделитесь командными строками. - У меня никак не получается "обуздать" эту "лошадку": в сценах большого перемещения объектов появляется большой "квадратизм"... Спасибо.

Offline One

  • Jr. Member
  • **
  • Posts: 87
  • Karma: +0/-0
DVD - (mencoder) -> MPEG4
« Reply #1 on: December 24, 2005, 11:35:18 »
Походу, томичи:
1. не сжимают avi с DVD;
2. пользуются другим ПО.
Если 2ое верно, то каким?!
« Last Edit: December 24, 2005, 11:35:42 by One »

Offline demiurg

  • Hero Member
  • *****
  • Posts: 1014
  • Karma: +0/-0
    • http://larin.tomsk.ru
DVD - (mencoder) -> MPEG4
« Reply #2 on: December 24, 2005, 12:05:48 »
Quote
Походу, томичи:
1. не сжимают avi с DVD;
2. пользуются другим ПО.
Если 2ое верно, то каким?!
[snapback]6505[/snapback]
Вероятнее всего этим занимаются в основном под виндами.... :(
По крайней мере большинство из моих знакомых.

Offline Krueger

  • Full Member
  • ***
  • Posts: 195
  • Karma: +0/-0
    • http://www.zaonsv.ru
DVD - (mencoder) -> MPEG4
« Reply #3 on: December 24, 2005, 12:37:56 »
задачи перед собой такие не ставил, по причине отсутствия любви к фильмам и ДВД проигрывателей. поглядел в портах, нашёл вот это, может подойдёт?

Quote
This is dvd::rip, a Perl Gtk+ based dvd-ripper. It serves as a
convenient frontend to transcode and makes ripping and encoding
DVDs a breeze. It also features a cluster daemon, which can distribute
encoding jobs over multiple machines.
WWW: http://www.exit1.org/dvdrip/
- Michael Nottebrock <[email protected]>

ну и описание самого transcode:

Quote
transcode is a text-console utility for video stream processing,
running on a platform that supports shared libraries and threads.
Decoding and encoding is done by loading modules that are responsible
for feeding transcode with raw video/audio streams (import modules)
and encoding the frames (export modules).

It supports elementary video and audio frame transformations,
including de-interlacing or fast resizing of video frames and loading
of external filters. A number of modules are included to enable
import of DVDs on-the-fly, MPEG elementary (ES) or program streams
(VOB), MPEG video, Digital Video (DV), YUV4MPEG streams, NuppelVideo
file format and raw or compressed (pass-through) video frames and
export modules for writing DivX;-), OpenDivX, DivX 4.xx or uncompressed
AVI files with MPEG, AC3 (pass-through) or PCM audio. Additional
export modules to write single frames (PPM) or YUV4MPEG streams are
available, as well as an interface import module to the avifile
library. It's modular concept is intended to provide flexibility
and easy user extensibility to include other video/audio codecs or
filetypes.

WWW: http://www.transcoding.org/

Offline One

  • Jr. Member
  • **
  • Posts: 87
  • Karma: +0/-0
DVD - (mencoder) -> MPEG4
« Reply #4 on: December 26, 2005, 12:28:48 »
Ну, держать этот продукт (Гейтсов) лишь для кодирования - моё мнение - это слишком! Мне нравится работа Mencoder, но очень труден в смысле интерфейса... Вот я и ищу уже отработанной практикой командной строки. Спасибо за предожение, я посмотрю.

PS У меня FC4, не BSD.

Offline Terminator

  • Jr. Member
  • **
  • Posts: 80
  • Karma: +0/-0
    • Motor-club
DVD - (mencoder) -> MPEG4
« Reply #5 on: December 26, 2005, 15:56:46 »
1. сливаем фильм на винт
2. кодируем звук
#!/bin/bash

VOBFILE1="Garfield.avi"

LAMEOPT="vbr=4:q=6:aq=0:mode=0"

rm -f frameno.avi

MENCODER="nice -n 4 mencoder -af volume=+10 -ovc frameno -oac mp3lame -lameopts ${LAMEOPT} -o frameno.avi"

${MENCODER} ${VOBFILE1}

после окончания mencoder выдаёт табличку битрейтов, выбираем нужный
3. первый проход
#!/bin/bash

VOBFILE1="Garfield.avi"

PASS=1
BITRATE=1500

AVCOPTS="vcodec=mpeg4:cbp:naq:trell:vpass=${PASS}:vmax_b_frames=4:mbd=1:v4mv:autoaspect:vbitrate=${BITRATE}"

#FILTERS="-vf pp=hb/vb/dr/al,scale=508:268,hqdn3d"

MENCODER="nice -n 60 mencoder ${FILTERS} -sws 9 -ovc lavc -lavcopts ${AVCOPTS} -oac copy -o movie_pass1.avi"

${MENCODER} ${VOBFILE1}

FILTERS добавляем по вкусу

4. второй проход
#!/bin/bash

VOBFILE1="Garfield.avi"

PASS=2
BITRATE=1500

AVCOPTS="vcodec=mpeg4:cbp:naq:trell:vpass=${PASS}:vmax_b_frames=4:mbd=1:v4mv:autoaspect:vbitrate=${BITRATE}"

#FILTERS="-vf pp=hb/vb/dr/al,scale=508:268,hqdn3d"

MENCODER="nice -n 60 mencoder ${FILTERS} -sws 9 -ovc lavc -lavcopts ${AVCOPTS} -oac copy -o movie_pass1.avi"

${MENCODER} ${VOBFILE1}

5. переименовываем movie_pass1.avi куда надо.


Будут вопросы обращайся
Александр.

Offline One

  • Jr. Member
  • **
  • Posts: 87
  • Karma: +0/-0
DVD - (mencoder) -> MPEG4
« Reply #6 on: December 29, 2005, 11:51:44 »
Хм, почти то же я делаю:
$ mencoder dvd://3 -aid 128 -oac copy -ovc frameno -o frameno.avi
$ mencoder dvd://3 -sws 2 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:vbitrate=1800:vpass=1 -vf crop=854:355:0:62,scale=854 -o movie.avi
$ mencoder dvd://3 -sws 2 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:vbitrate=1800:vpass=2 -vf crop=854:355:0:62,scale=854 -o movie.avi
Но:
. можно обойтись без отдельного кодирования звука (1ая строка);
. большой "квадратизм" в сильно подвижных сценах;
. второй проход делает видео ещё хуже, чем после первого прохода...

Offline Terminator

  • Jr. Member
  • **
  • Posts: 80
  • Karma: +0/-0
    • Motor-club
DVD - (mencoder) -> MPEG4
« Reply #7 on: December 29, 2005, 12:51:23 »
Для такого разрешения слишком маленький битрейт.
Уменьшай разрешение или увеличивай битрейт.

Ещё для незначительного увеличения качества, можно попробовать сделать N проходов.

Что за scale=854?
Александр.

Offline One

  • Jr. Member
  • **
  • Posts: 87
  • Karma: +0/-0
DVD - (mencoder) -> MPEG4
« Reply #8 on: January 09, 2006, 12:57:09 »
Quote
Для такого разрешения слишком маленький битрейт.
Уменьшай разрешение или увеличивай битрейт.

Ещё для незначительного увеличения качества, можно попробовать сделать N проходов.

Что за scale=854?
[snapback]6653[/snapback]

Да вроде уже и так большой, а?  :blink:

Вот при втором проходе качество было ещё хуже... Попробую "поиграть" с -sws...
scale - ширина экрана на получаемом файле - если её не поставить, то он, почему-то, делает экран меньше исходного...


Offline Terminator

  • Jr. Member
  • **
  • Posts: 80
  • Karma: +0/-0
    • Motor-club
DVD - (mencoder) -> MPEG4
« Reply #9 on: January 09, 2006, 14:20:36 »
Quote
Да вроде уже и так большой, а?  :blink:
Для такого разрешения недостаточный.
Quote
Вот при втором проходе качество было ещё хуже... Попробую "поиграть" с -sws...
scale - ширина экрана на получаемом файле - если её не поставить, то он, почему-то, делает экран меньше исходного...
[snapback]6784[/snapback]
игры с sws ничего не дадут. Можно поиграть с фильтром hqdn3d, но эффект будет незначительный.
Попробуй больше проходов.

Ширина меняется, это что aspect меняется? Так ты укажи ему правильный.

P. S. Если в результате видишь квадраты, то наверняка ничего не поможет, только уменьшение разрешения и/или увеличение битрейта.
Александр.

Offline One

  • Jr. Member
  • **
  • Posts: 87
  • Karma: +0/-0
DVD - (mencoder) -> MPEG4
« Reply #10 on: January 10, 2006, 12:12:01 »
Quote
Для такого разрешения недостаточный.
Хорошо. Сколько предлагаете (ну, от .. до)?

Quote
игры с sws ничего не дадут. Можно поиграть с фильтром hqdn3d, но эффект будет незначительный. Попробуй больше проходов.

hqdn3d - это же кол-во главных кадров, по-моему, от квадратов тут не уйдёшь...

Quote
Ширина меняется, это что aspect меняется? Так ты укажи ему правильный.

P. S. Если в результате видишь квадраты, то наверняка ничего не поможет, только уменьшение разрешения и/или увеличение битрейта.
[snapback]6786[/snapback]

Scale - это масштабирование, я не знал про aspect... Попробую.


Offline Terminator

  • Jr. Member
  • **
  • Posts: 80
  • Karma: +0/-0
    • Motor-club
DVD - (mencoder) -> MPEG4
« Reply #11 on: January 10, 2006, 13:02:15 »
Quote
Хорошо. Сколько предлагаете (ну, от .. до)?
Только экспериментально :)
Quote
hqdn3d - это же кол-во главных кадров, по-моему, от квадратов тут не уйдёшь...
Нет. Это high quality denoise filter 3d. Уменьшает шум.
Для снижения битрейта помогает мало.


Если увеличить число проходов, то кодер сможет более грамотно распределить битрейт между статическими и динамическими сценами.

А может ты кодируешь домашнее видео с чудовишной шевеленкой? :)
Александр.

Offline One

  • Jr. Member
  • **
  • Posts: 87
  • Karma: +0/-0
DVD - (mencoder) -> MPEG4
« Reply #12 on: January 11, 2006, 14:35:07 »
В mencoder -aspect 720:576 - кричит, что нет у mencoder такого параметра...

PS Почему не получается с тем же качеством что и DVD сделать AVI с хотябы с тем же размером файла?! Что, такие большие потери при сжатии?!
« Last Edit: January 11, 2006, 14:36:56 by One »

Offline Terminator

  • Jr. Member
  • **
  • Posts: 80
  • Karma: +0/-0
    • Motor-club
DVD - (mencoder) -> MPEG4
« Reply #13 on: January 11, 2006, 14:45:49 »
Quote
В mencoder -aspect 720:576 - кричит, что нет у mencoder такого параметра...
Значит нету. Попробуй добавить в lavcopts autoaspect

Quote
PS Почему не получается с тем же качеством что и DVD сделать AVI с хотябы с тем же размером файла?! Что, такие большие потери при сжатии?!
[snapback]6814[/snapback]

Размер AVI очень сильно зависит от качества исходного DVD. Если там поганая экранка, то ничего хорошего не выйдет. Правда в этом случае можно практически без вреда для "качества" картинки, разрешение сделать вчетверо меньше.

Ты скажи что кодируешь?
« Last Edit: January 11, 2006, 14:54:21 by Terminator »
Александр.

Offline One

  • Jr. Member
  • **
  • Posts: 87
  • Karma: +0/-0
DVD - (mencoder) -> MPEG4
« Reply #14 on: January 12, 2006, 10:32:03 »
Я кодирую и фильмы и мультики. А почему разрешение можно уменьшить без потери качества?

И ещё, там mencoder выдаёт какие-то чатоты сжатия для звука и картинки... нет ли опции расчёта частот, если "плясать" от конечного размера файла?!

Offline Terminator

  • Jr. Member
  • **
  • Posts: 80
  • Karma: +0/-0
    • Motor-club
DVD - (mencoder) -> MPEG4
« Reply #15 on: January 12, 2006, 17:11:21 »
Quote
Я кодирую и фильмы и мультики. А почему разрешение можно уменьшить без потери качества?
У поганых экранок нет качества и соответственно уменьшение разрешения не теряет то чего небыло :)

Ты попробуй и сравни
mplayer -vf scale=<тут разные цифири> <фильма>

Quote
И ещё, там mencoder выдаёт какие-то чатоты сжатия для звука и картинки... нет ли опции расчёта частот, если "плясать" от конечного размера файла?!
[snapback]6826[/snapback]
Он не частоты выдаёт, а битрейт для разных рамеров выходного файла. Опции расчёта нет.
В комплекте вроде идёт скрипт который одной командой жмёт и битрейт сам вычислять умеет.
Александр.

Offline Safir

  • Sr. Member
  • ****
  • Posts: 402
  • Karma: +0/-0
    • http://
DVD - (mencoder) -> MPEG4
« Reply #16 on: January 12, 2006, 22:06:52 »
Попробуй Avidemux2 (http://fixounet.free.fr/avidemux/) - довольно занятная штука.

Offline Terminator

  • Jr. Member
  • **
  • Posts: 80
  • Karma: +0/-0
    • Motor-club
DVD - (mencoder) -> MPEG4
« Reply #17 on: January 13, 2006, 11:00:33 »
Вот чувак хорошо описывает процесс

Кодированием DVD в AVI занимается mencoder (входит в mplayer).
Можно ли распределить кодирование по компам - не знаю, но вопрос интересный. :)

В принципе есть несколько утилит, которые позволяют перегнать DVD в AVI
"в один клик" - по сути это просто оболочки к mencoder. Но качество того,
что они выдают - не очень хорошее. Дело в том, что для действительно
качественного перевода DVD в AVI требуется во-первых запуск mencoder в
несколько проходов (что увеличивает время кодирования), а во-вторых не
помешает ручная настройка в зависимости от характеристик фильма. :-D

Я с этим глубоко не ковырялся, но в общих чертах инструкция по ручному запуску
mencoder выглядит примерно так:

---cut---
# Источник (dvd, или dvd в каталоге на винте, или файл):
src="/path/to/file.avi"
src="dvd://3 -dvd-device /path/to/saved/dvd/"
src="dvd://3 -chapter 2-6"
src="dvd://3"

# Если в исходном dvd/файле несколько аудио потоков нужно выбрать нужный по
# названию или по номеру.

# Язык:
lang="-aid 128"
lang="-alang ru"

# Проверить корректность выбранного языка можно запустив mplayer:
mplayer $src $lang

# Для того, чтобы создаваемый .avi влез на один/два CD нужно определить bitrate.
# Bitrate для видео зависит от: максимального размера файла S, длины фильма L и
# размера аудиотрека A примерно таким образом: (S-A)/L .
#
# Размер аудиотрека зависит от того, каким кодеком (mp3/ogg) и с каким
# качеством он будет конвертироваться (или будет просто копироваться без
# изменений, т.е., например, останется в формате ac3).

# Аудиокодек:
audio="-oac copy"
audio="-oac mp3lame -lameopts abr:br=128:mode=1 -srate 44100"
audio="-oac mp3lame -lameopts preset=medium"

# Создание аудиопотока с целью узнать его размер и общую длину фильма чтобы
# определить bitrate для видео. Варианты bitrate mencoder выведет сам в конце
# этого прохода примерно в таком виде:
#   Recommended video bitrate for 650MB CD: 673
#   Recommended video bitrate for 700MB CD: 735
#   Recommended video bitrate for 800MB CD: 860
#   Recommended video bitrate for 2 x 650MB CD: 1481
#   Recommended video bitrate for 2 x 700MB CD: 1605
#   Recommended video bitrate for 2 x 800MB CD: 1854
#
# Файл должен называться именно frameno.avi, тогда он будет автоматически
# использоваться как источник звука при "-oac copy" на последнем проходе.
# Это позволит избежать повторного кодирования в mp3 (если $audio="-oac copy",
# то можно вместо frameno.avi указать /dev/null чтобы не занимать место на
# диске и не тратить время на запись аудио на диск, т.к. на последнем проходе
# будет всё-равно откуда копировать звук - из frameno.avi или $src).

# Первый проход по всему фильму:
rm -f frameno.avi
mencoder $src $lang $audio -ovc frameno -o frameno.avi

# Bitrate (получен из предыдущего запуска mencoder):
bitrate=735

# Определение размера картинки и урезание её при необходимости. Цель этого
# урезания - избавиться от чёрных полос по краям изображения т.к. на
# кодирование этих полос будут потрачено слишком много байт, которые могли бы
# быть использованы для улучшения качества в центре кадра.
#
# mplayer умеет сам определять размер, и выводит его примерно в таком виде:
#   crop area: X: 0..479  Y: 104..373  (-vf crop=480:270:0:104) 0.9% 0 0 87%
#   crop area: X: 0..479  Y: 104..373  (-vf crop=480:270:0:104) 0.9% 0 0 86%
#   crop area: X: 0..479  Y: 104..373  (-vf crop=480:270:0:104) 1.0% 0 0 86%
# Нас интересует вот эта часть: ----------> ^^^^^^^^^^^^^^^^^^ .
#
# Первые два числа (480 и 270) это ширина/высота кадра.
# Они должны быть кратны 16 для лучшего качества.
# Если они не кратны (270) то их нужно уменьшить до ближайшего кратного 16-ти
# числа (270->256).
# Вторые два числа (0 и 104) это отступы слева и сверху.
# Они должны быть чётными для лучшего качества.
# Если ширина или высота были уменьшены до кратного 16-ти числа, то желательно
# скорректировать и отступы, чтобы не сдвинуть центр кадра. (В этом примере
# высота была уменьшена на 270-256=14, соотвественно для сохранения центра
# нужно увеличить второй отсуп на 14/2=7, т.е. установить его в 104+7=111,
# но поскольку отступ должен быть чётным то мы его уменьшим на 1, т.е. 110.)

# Определить crop (-frames нужен чтобы выйти из mplayer через несколько секунд):
mplayer $src -vf cropdetect -frames 100

# Crop (получен из предыдущего запуска mplayer и ручных рассчётов):
crop="480:256:0:106"

# Проверить что mplayer корректно определил crop:
mplayer $src -vf crop=$crop

# Если размер кадра слишком большой, имеет смысл масштабировать его до ~576
# по горизонтали (вертикаль должна вычисляться с сохранением пропорций):
# "scale=576:-2".
# Иначе имеет смысл оставить размер по горизонтали исходным, но по вертикали
# его всё-равно нужно масштабировать, иначе все плееры кроме mplayer будут
# проигрывать этот файл некорректно (см. "aspect=" в mplayer(1)):
# "scale=-1:-2".
#
# Более предпочтительный способ определить scale - использование скрипта
# calcbpp.pl. Желательно выбрать scale у которого этот скрипт выдаст bpp
# больше 20-ти, желательно 25-30. Скрипту нужно передать значение crop
# (после ручного "выравнивания"), изначальное соотношение сторон (4/3 или 16/9,
# его можно узнать из crop), bitrate и fps (посмотреть в выводе mplayer).

# Получить список подходящих scale и соотвествующих им bpp:
perl /usr/share/doc/mplayer-*/TOOLS/calcbpp.pl 480x256 16/9 $bitrate 29.97

# Scale (выбран из предыдущего запуска calcbpp.pl):
scale="464:176"

# Выбрать кодек и подобрать его настройки в зависимости от баланса между
# нужной скоростью обработки и качеством.
#
# Математически оценить качество изображения при использовании конкретного
# scale можно с помощью скрипта cq (ftp://rusunix.org/pub/warez/MPlayer/cq).
# Он выводит гистограмму использования разных quantizer'ов (чем чаще
# используется меньшие quantizer'ы, тем лучше - в идеале должно быть много
# quantizer'ов 2 и 3, причём лучше чтобы 2 было больше 3). Для работы ему
# нужен psnr-лог, который умеет делать кодек lavc (если ему дать параметр psnr).

# Видеокодек:
video="-ovc xvid -xvidencopts bitrate=$bitrate:4mv"
video="-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$bitrate:v4mv:mbd=2:trell:cmp=3:subcmp=3:mbcmp=3"
video="-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$bitrate:v4mv:mbd=2:trell"
video="-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$bitrate:v4mv:mbd=2:trell:cbp:mv0:mpeg_quant"

# Протестировать качество выбранного кодека (кодировать несколько секунд):
mencoder $src -oac copy $video:psnr -vf crop=$crop,scale=$scale -frames 500
mplayer test.avi
cq $(ls psnr_*.log | sort | tail -n 1)

# "Холостой" запуск для собирания статистики о фильме с целью более
# эффективного распределения переменного bitrate по всему фильму.
# За одно можно собрать и полную psnr-статистику для вывода полной гистограммы.

# Создать divx2pass.log (кодеку xvid нужно передать pass=1 вместо vpass=1):
mencoder $src -oac copy $video:psnr:vpass=1 -vf crop=$crop,scale=$scale \
    -o /dev/null

# Посмотреть статистику: :)
cq $(ls psnr_*.log | sort | tail -n 1)

# Ви не поверите, но уже таки можно делать .avi:
mencoder $src -oac copy $video:vpass=2 -vf crop=$crop,scale=$scale \
    -o result.avi

# Убрать мусор:
rm -f test.avi frameno.avi divx2pass.log psnr_*.log

# TODO 30->24 fps
# TODO deinterlace

#------------------------------------------------------------------------------

# Копирование DVD "as is" на винт для последующего конвертирования в .avi
# (чтобы во-первых DVD-диск не мучать несколькими проходами, во-вторых иметь
# возможность быстро отдать чужой DVD, в-третьих с винта конвертировать будет
# немного быстрее).
mplayer $src -dumpstream -dumpfile result.vob
src="result.vob"
---cut---

--
                        WBR, Alex.
Александр.

Offline One

  • Jr. Member
  • **
  • Posts: 87
  • Karma: +0/-0
DVD - (mencoder) -> MPEG4
« Reply #18 on: January 14, 2006, 13:38:04 »
Quote
В комплекте вроде идёт скрипт который одной командой жмёт и битрейт сам вычислять умеет.
[snapback]6837[/snapback]
В каком комплекте? Я думал там лишь mplayer и mencoder... Да и ставил я его, по-моему из исходников: где что валяется... уже не найдёшь. Может, подскажешь название сценарий?

к Safir: Знаю я её. Только я ей режу/клею. Просто док-ции к ней у меня нет, что не скажешь о плохо составленной, но имеющийся у MPlayer. У Тебя нет док-ции?

к Terminator: Спасибо большое за док-нт! - "С миру по нитке..." Здорово! Пойду пробовать!

Не в курсе, как обе звуковых дорожки (потока) запихать в avi, чтоб потом можно было в проигрывателе переключать нужный?

Offline Safir

  • Sr. Member
  • ****
  • Posts: 402
  • Karma: +0/-0
    • http://
DVD - (mencoder) -> MPEG4
« Reply #19 on: January 15, 2006, 10:06:31 »
http://fixounet.free.fr/avidemux/ -> раздел Docs. Есть даже русская (http://fixounet.free.fr/avidemux/doc/ru/index.html).
Вот так оть :). А в пакете действительно ничего нет, кроме стандартных README & Co.