Классический форум-трекер
canvas not supported
Нас вместе: 4 244 398

Качество картинки на видео после перекодирования


 
 
RSS
Начать новую тему   Ответить на тему    Торрент-трекер NNM-Club -> Форум Видео -> Обработка Аудио & Видео
Автор Сообщение
uncleandy ®
Стаж: 14 лет 8 мес.
Сообщений: 116
Ratio: 112.297
100%
Заметил что перекодированные видео бывают двух типов относительно качества изображения.

Первые - с хорошим качеством. У них, при отсутствии движения в кадре очень четкая прорисовка каждой мелочи. Отличный контраст. Поэтому картинка очень радует.

Вторые - у которых картинка равномерно слегка размазана. На небольшом ТВ смотреть нормально, но при просмотре на компьютере это сильно заметно.

Пытался перекодировать свои DVD с помощью программки handbrake в H.264. Почему-то все фильмы получились именно второго типа - с размазыванием всей картинки. :( Кто-нибудь знает какой параметр кодирования влияет на этот эффект?

Спасибо.
7777777
Стаж: 14 лет 3 мес.
Сообщений: 6
Ratio: 0.444
russia.gif
uncleandy
А исходные файлы в каком качестве? Попробуйте переконвертировать с ани конвертором.Наберите в поиски.
Abel
Стаж: 14 лет 6 мес.
Сообщений: 22
Ratio: 1.428
100%
Откуда: Елец, Липецкая обл.
russia.gif
Такое происходит при сильном "ужимании" видео. Так, MPEG-2 при битрейте от 5000 Kbps и более имеет отличную чёткость, с понижением битрейта всё более заметна этакая дымка, перерастающая в откровенный "смаз". В MPEG-4 это происходит при 1500 Kbps и ниже. Это особенности алгоритмов всех кодеков. Усугубляется перекодировкой из одного формата в другой. Не жмитесь - не "жмите" видео сильно1

_________________
Abel
veranyon
Стаж: 14 лет 7 мес.
Сообщений: 448
Ratio: 63.471
100%
russia.gif
Лично я кодирую при помощи x264. сабж поддерживает crf режим кодирования, что сразу же срубает все сомнения. ставлю crf 16 и всех делов.

Код:
#!/bin/bash
# x264-enc.sh

pass="${1}"
rc="${2}"
mproptions=("${@:3}")

time="$(date +%F_%H-%M-%S)"
name="${time}_${pass}-${rc}.mkv"
log="${name}.log"
pipe="${time}.y4m"
multipasslog="${time}_multipass.log"
mplayer="/usr/bin/mplayer"
x264="/usr/bin/x264"
mpr=($mplayer -fixed-vo -quiet -nosound -nosub -benchmark -lavdopts threads=1 -vo yuv4mpeg:file="${pipe}" -vf-clr "${mproptions[@]}")

xo=(
"${pipe}"
# Frame-type options:
--keyint 750
--min-keyint 25
--bframes 16
--b-adapt 2
--b-pyramid normal
--ref 16
--deblock 0:0
# Ratecontrol:
--rc-lookahead 250
--aq-mode 1
--aq-strength 1.0
--stats "${multipasslog}"
# Analysis:
--partitions all
--direct auto
--weightp 2
--me umh
--merange 32
--subme 10
--psy-rd 1.0:0.0
--trellis 2
--no-fast-pskip
--no-dct-decimate
# Input/Output:
--slow-firstpass
--threads auto
--psnr
--ssim
${x}
)
mx() {
  rm -vf "${pipe}"
  mkfifo "${pipe}"||exit 1
  xfo=($x264 "${xo[@]}" ${2} -o "${1}")
  echo -e "\n${mpr[@]}\n${xfo[@]}\n"
  "${mpr[@]}" &
  time "${xfo[@]}"
}

rm -v "${multipasslog}"*
{ time {
case "${pass}" in
  crf)  xo+=(--crf "${rc}")
    mx "${name}"
    ;;
  1p)  xo+=(--bitrate "${rc}")
    mx "${name}"
    ;;
  2p)  xo+=(--bitrate "${rc}" --pass)
    mx /dev/null 1
    mx "${name}" 2
    ;;
  3p)  xo+=(--bitrate "${rc}" --pass)
    mx /dev/null 1
    mx /dev/null 3
    mx "${name}" 3
    ;;
  *)  echo "Wrong usage"
    ;;
esac
echo "Encoding time:"
} } 2>&1|tee "${log}"
rm -v "${pipe}" "${multipasslog}"*


ну и x264-enc.sh crf 16 исходник.avi

на самом деле, скрипт универсален.
как пример: x264-enc.sh 3p 1600 исходник.avi
Но все же лучше в crf
Если все же вэриэйбл, то ни в коем случае не в два прохода, а в три. тогда есть смысл в этом самом вэриэйбл.
ну и замеры делать надо, что бы точно прицелиться на нужный битрейт. есть msu под винду. msu hd платна.

можно и скрипт для сравнивания качества:
Код:
#!/bin/bash
# rrrrrr.sh

sources=("${@}")

time="$(date +%F_%H-%M-%S)"
frames="${f:-2000}"
compScreens="${s:-20}"
dir="c${time}"
mplayer="/usr/bin/mplayer"

framesInSource="$(echo "`$mplayer -frames 0 -msglevel identify=6:all=-1 -really-quiet -vo null -ao null ${sources[0]} 2>&1|grep -e ID_VIDEO_FPS= -e ID_LENGTH=|awk -F'=' '{print $2}'|tr '\n' '*'`1"|bc -ql|awk -F'.' '{print $1}')"
if [ "${framesInSource}" -lt "${frames}" ]
then
  echo "Video has only ${framesInSource} frames"
  frames="${framesInSource}"
fi

every="$[${frames}/${compScreens}]"

n='1'
screensl=( )
while [ "${n}" -lt "${frames}" ]
do
  screensl+=("${n}")
  n="$[${n}+${every}]"
done

echo -e "Will use frames:\n ${screensl[@]}"

screensl="$(for i in "${screensl[@]}"; do printf "%08g " "$i";done)"
mkdir "${dir}"
n='0'
for v in "${sources[@]}"
do
  time {
  video=(${v})
  mkdir "${dir}/${n}"
  cd "${dir}/${n}"
  $mplayer -nosound -benchmark -lavdopts threads=1 -vf-clr -vo png:z=2 -noaspect -frames "${frames}" "${video[@]}"
  cd ../..
  # compare every nth frame
  for s in ${screensl}
  do
    mv "${dir}/${n}/${s}.png" "${dir}/${s}_${n}.png"
  done

  rm -r "${dir}/${n}"
  mogrify -verbose -quality 99 "${dir}/"*"_${n}.png"
  echo "done ${n}"
  } &
  n="$[${n}+1]"
done


rrrrrr.sh исходник.mkv конечный.файл.который.сравниваем.с.исходником.mkv
то есть, экспериментируем над маленьким кусочком видео.
можно еще шахматы сделать))):
Код:
#!/bin/bash
# x264-chess.sh

NumberOfParts="${1}"
PartLength="${2}"
mproptions=("${@:3}")

time="$(date +%F_%H-%M-%S)"
tname="x264-test_${NumberOfParts}x${PartLength}f.mkv"
pipe="${time}.y4m"
mplayer="/usr/bin/mplayer"
x264="/usr/bin/x264"
mkvmerge="/usr/bin/mkvmerge"

SourceLength="$(
  $mplayer -frames 0 -msglevel identify=6:all=-1 -really-quiet -vo null -ao null "${mproptions[@]}"\
  |grep ID_LENGTH=|sed 's/.*=\(.*\)\..*/\1/'
  )"
every="$[${SourceLength}/${NumberOfParts}]"

echo -e "\nLossless encoding ${NumberOfParts} parts with ${PartLength} frames taken through every ${every} seconds from video with duration ${SourceLength} seconds, sample will have $[${PartLength}*${NumberOfParts}] frames:\n"

mx() {
  rm -vf "${pipe}"
  mkfifo "${pipe}"||exit 1
  $mplayer -fixed-vo -quiet -nosound -nosub -benchmark -lavdopts threads=1 -vo yuv4mpeg:file="${pipe}" -vf-clr "${@:2}" &
  $x264 --crf 0 --threads auto "${pipe}" -o "${1}"
}

if [ -f "${tname}" ]
then
  echo -e "\nYou already have sample, delete it if you want new:\nrm ${tname}\n"
else
  n='0'
  TestVideo=( )
  time {
  while [ "${n}" -lt "${NumberOfParts}" ]
  do
    mx "${n}${tname}" -frames "${PartLength}" -ss "$[${n}*${every}]" "${mproptions[@]}"
    TestVideo+=("${n}${tname}")
    n="$[${n}+1]"
  done
  mx "a_${tname}" "${TestVideo[@]}"
  # you can play with 'mplayer -idx' without remuxing
  $mkvmerge -o "${tname}" "a_${tname}"
  }
  echo "Sizes:"
  du -s "${TestVideo[@]}" "a_${tname}" "${tname}"
  rm -v "${TestVideo[@]}" "a_${tname}" "${pipe}"
fi


x264-chess.sh 20 100 исходник.avi
(льем в один контейнер 20 кусков по 100 кадров потока)

под виндой можно и через megui. там всё есть.
Под маком есть X-code - замечательная вещь. всё можно собрать. и x264 и mencoder etc. больше, чем этот самый megui.
тот же imgmagick, который под цигвином не то. а msu hd (ssim замеры) платен и в этих самых варезах вы не найдете бесплатный вариант.
Показать сообщения:   
Начать новую тему   Ответить на тему    Торрент-трекер NNM-Club -> Форум Видео -> Обработка Аудио & Видео Часовой пояс: GMT + 3
Страница 1 из 1