Последние темы Поиск
Общие форумы
Специализированные форумы
ПроцессорыРазгон и охлаждениеСистемные платыМодули памятиВидеосистемаTV- и FM-тюнеры, видеовход, видеовыходЦифровое видео: захват, монтаж, обработкаМониторы и другие устройства отображенияЦифровое фотоБеспилотные летательные аппаратыЦифровой звукProAudio: Профессиональное звуковое оборудованиеСтереосистемыДомашний кинотеатр: проигрыватели и источники сигналаДомашний кинотеатр: аудиосистемаДомашний кинотеатр: ТV и проекторыМагнитные и SSD накопителиОптические носители информацииСетевые носители информацииПериферияКорпуса, блоки питания, UPSСети, сетевые технологии, подключение к интернетуСистемное администрирование, безопасностьСерверыНоутбуки, нетбуки и ультрабукиПланшеты и электронные книгиМобильные телефоны, смартфоны, кпк, коммуникаторыМобильные гаджетыОператоры и технологии мобильной связиТелефония, телекоммуникации, офисные АТСБытовая техника
Программы
Игры
Авторские форумы
Прочие форумы
Форумы поддержки портала iXBT.com
Архивы конференции
Архив "О Конференции"Архив "Процессоры"Архив "Разгон и охлаждение"Архив "Системные платы"Архив "Модули памяти"Архив "Видеосистема"Архив "Видеозахват"Архив "Мониторы и другие устройства отображения"Архив "Цифровое изображение"Архив "Цифровой звук"Архив "Периферия"Архив "Корпуса, блоки питания, UPS"Архив "Коммуникации: сети и сетевые технологии"Домашний интернет, модемы (архив)Архив "Системное администрирование, безопасность"Архив "Мобильная связь"Программы Microsoft: Windows, Office, Server, Windows LiveАрхив "OС и системное ПО"Архив "Программы: Интернет"Архив "Программирование"Форум прикладных программистовАрхив "Электронные устройства и компоненты"Архив "Околокомпьютерный Флейм & Общий"Архив "Полемика (Злобный Флейм)"Околоавтомобильный ФлеймФорум ремонтниковВопросы компании IntelФотокамеры SamsungФорум о магазине приложений RuStoreФорум по продукции компании Huawei
Справка и сервисы
Другие проекты iXBT.com
peter_irich: Видео кодируется с повышенной частотой
peter_irich
Junior Member
Автор темы
1/5 ответов
Недавно на iXBT, с марта 2025
Россия, Санкт-Петербург
Инфо Ответить
p
peter_irich Junior Member Автор темы
1 месяц назад / 29 марта 2025 21:26
Здравстяуйте!
Когда-то я я написал скрипт для перекодирования mkv-файлов для уменьшения их размера, потом разбил его на два. 1-й декодирует исходный mkv и создаёт файл yuv4pegpipe.y4m, 2-й кодирует его в более сжатый mkv. Когда у меня был процессор AMF FX-8350, потом Ryzen 5 B3600 и для кодирования использовалась утилита x264, всё получалось, а когда я установил процессор AMD Ryzen 5 7500F и стал кодировать утилитой x265, то результат стал иметь fps=25, хотя у исходнго файла было 24, Для декодирования используется ffmpeg, я пробовал разные vsync (fps_mode), но это не помогло. Вот скрипт для декодирования, там главное - вызов ffmpeg.[spoiler=decoding]#!/bin/bash

[spoiler=decoding]#!/bin/bash

fout="/home/peter-irich/encode_y4m_from_mkv.out"
/bin/date > $fout
declare -a nam_arr
cntf=0
while read flnm ; do
nam_arr[$cntf]=$flnm
echo $cntf ${nam_arr[$cntf]}
echo $cntf ${nam_arr[$cntf]} >> $fout
let cntf++
done < /home/peter-irich/mkv.lst

dirs="/media/peter-irich/Seagate_4TB/nobody/mkv_files"
cnti=0
cd $dirs
while [ $cnti -lt $cntf ] ; do
namf=${nam_arr[$cnti]}
namm=`echo $namf | /usr/bin/cut -d "." -f 1`

/bin/date > $namm.time
echo "namm="$namm >> $namm.time
echo "namm="$namm >> $fout
/bin/date > $namm.time
/bin/date >> $fout

/usr/bin/mediainfo $dirs/$namm.mkv > $namm.info
# /usr/bin/mediainfo $dirs/$namm.mkv >> $fout
naud=`/usr/bin/mediainfo $dirs/$namm.mkv | /bin/grep -c ^Audio`
nw1=`/usr/bin/mediainfo $dirs/$namm.mkv | /bin/grep Width | \
/usr/bin/tr -s " " | /usr/bin/cut -d " " -f 3`
nw2=`/usr/bin/mediainfo $dirs/$namm.mkv | /bin/grep Width | \
/usr/bin/tr -s " " | /usr/bin/cut -d " " -f 4`
if [ "$nw2" = "pixels" ] ; then
nw=$nw1
else
let nw2=10#${nw2}
let nw=1000*nw1+nw2
fi
nh1=`/usr/bin/mediainfo $dirs/$namm.mkv | /bin/grep Height | \
/usr/bin/tr -s " " | /usr/bin/cut -d " " -f 3`
nh2=`/usr/bin/mediainfo $dirs/$namm.mkv | /bin/grep Height | \
/usr/bin/tr -s " " | /usr/bin/cut -d " " -f 4`
echo $nw1 $nw2 $nw "nh1="$nh1 "nh2="$nh2 $nh
echo $nw1 $nw2 $nw "nh1="$nh1 "nh2="$nh2 $nh >> $fout
if [ "$nh2" = "pixels" ] ; then
nh=$nh1
else
let nh2=10#${nh2}
let nh=1000*nh1+nh2
fi
#echo $nw1 $nw2 $nw $nh1 $nh2 $nh
echo $namm.mkv "naud="$naud $nw $nh
echo $namm.mkv "naud="$naud $nw $nh >> $fout
#/usr/bin/ffmpeg -i $dirs/$namm.mkv -an -sn -map 0 -vsync 2 \
#-fps_mode vfr
#/usr/bin/ffmpeg -i $dirs/$namm.mkv -an -sn -map 0 -vsync 1 \
#-strict strict -f yuv4mpegpipe ${namm}.y4m > ${namm}_y4m.err 2>&1
/usr/bin/ffmpeg -i $dirs/$namm.mkv -an -sn -map 0 -fps_mode cfr \
-f yuv4mpegpipe ${namm}.y4m > ${namm}_y4m.err 2>&1

echo $namm "y4m was build"
echo $namm "y4m was build" >> $namm.time
echo $namm "y4m was build" >> $fout
/bin/date >> $namm.time
/bin/date >> $fout

let cnti++
done

#cd /home/peter-irich
#/usr/bin/sync
#/usr/bin/umount /media/peter-irich/Seagate_4TB
#/usr/bin/udisksctl power-off -b /dev/sdb
##/usr/bin/umount /media/peter/Seagate_5TB
##/usr/bin/udisksctl power-off -b /dev/sdc
#/usr/bin/sudo /usr/sbin/shutdown -P +0
[/spoiler]
Вот скрипт для кодирования, в нем главное - вызов x265.
[spoiler=coding]#!/bin/bash

fout="/home/peter-irich/encode_mkv_from_y4m.out"
/bin/date > $fout
declare -a nam_arr
cntf=0
while read flnm ; do
nam_arr[$cntf]=$flnm
echo $cntf ${nam_arr[$cntf]}
echo $cntf ${nam_arr[$cntf]} >> $fout
let cntf++
done < /home/peter-irich/mkv.lst

dirs="/media/peter-irich/Seagate_4TB/nobody/mkv_files"
cnti=0
cd $dirs
while [ $cnti -lt $cntf ] ; do
namf=${nam_arr[$cnti]}
namm=`echo $namf | /usr/bin/cut -d "." -f 1`

/bin/date > $namm.time
echo "namm="$namm > $namm.time
echo "namm="$namm >> $fout
/bin/date > $namm.time
/bin/date >> $fout

/usr/bin/mediainfo $dirs/$namm.mkv > $namm.info
/usr/bin/mediainfo $dirs/$namm.mkv >> $fout
naud=`/usr/bin/mediainfo $dirs/$namm.mkv | /bin/grep -c ^Audio`
nw1=`/usr/bin/mediainfo $dirs/$namm.mkv | /bin/grep Width | \
/usr/bin/tr -s " " | /usr/bin/cut -d " " -f 3`
nw2=`/usr/bin/mediainfo $dirs/$namm.mkv | /bin/grep Width | \
/usr/bin/tr -s " " | /usr/bin/cut -d " " -f 4`
if [ "$nw2" = "pixels" ] ; then
nw=$nw1
else
let nw2=10#${nw2}
let nw=1000*nw1+nw2
fi
nh1=`/usr/bin/mediainfo $dirs/$namm.mkv | /bin/grep Height | \
/usr/bin/tr -s " " | /usr/bin/cut -d " " -f 3`
nh2=`/usr/bin/mediainfo $dirs/$namm.mkv | /bin/grep Height | \
/usr/bin/tr -s " " | /usr/bin/cut -d " " -f 4`
echo $nw1 $nw2 $nw "nh1="$nh1 "nh2="$nh2 $nh
echo $nw1 $nw2 $nw "nh1="$nh1 "nh2="$nh2 $nh >> $fout
if [ "$nh2" = "pixels" ] ; then
nh=$nh1
else
let nh2=10#${nh2}
let nh=1000*nh1+nh2
fi
echo $nw1 $nw2 $nw $nh1 $nh2 $nh
echo $namm.mkv "naud="$naud $nw $nh
echo $namm.mkv "naud="$naud $nw $nh >> $fout

/usr/bin/x265 --log-level warning --input-res ${nw}x${nh} --fps 24.000 \
--preset veryslow --csv-log-level 2 --csv ${namm}.log \
-o ${namm}_cmpr_v.mkv ${namm}.y4m > ${namm}_cmpr_v.err 2>& 1
/bin/ls -l ${namm}.y4m >> $namm.time
# /bin/rm -f ${namm}.y4m

echo $namm "cmpr_v.mkv was build"
echo $namm "cmpr_v.mkv was build" >> $fout
echo "$namm cmpr_v.mkv was build" >> $namm.time
/bin/date >> $namm.time
/bin/date >> $fout
cnt=0
while [ $cnt -lt $naud ] ; do
prf=""
if [ $cnt -lt 10 ] ; then
prf="0"
fi
nmb=${prf}$cnt
echo $nmb
echo $nmb >> $fout
echo $nmb >> $namm.time

/usr/bin/ffmpeg -i $dirs/$namm.mkv -map 0:a:$cnt -c:a ac3 \
${namm}_$nmb.ac3 > ${namm}_$nmb.err 2>&1
/usr/bin/mkvmerge -o ${namm}_$nmb.mka ${namm}_$nmb.ac3

let cnt++
/bin/date >> $namm.time
/bin/date >> $fout
done

echo "mkv_end" >> $namm.time
echo "mkv_end" >> $fout
let cnti++
done

cd /home/peter-irich
/usr/bin/sync
/usr/bin/umount /media/peter-irich/Seagate_4TB
/usr/bin/udisksctl power-off -b /dev/sdb
/usr/bin/sudo /usr/sbin/shutdown -h +0
[/spoiler]
Я не нашёл, как добиться от x265, чтобы она кодировала с частотой исходного файла, хотя смотрел и в Интернете.
М.б., тут есть знатоки этого процесса и подскажут, в чём причина и что делать?
vertur
Member
2272/13178 ответов, #8 в рейтинге
17 лет на iXBT, с марта 2008
Чаще пишет в "Программирование" (52%)
Гондурас, MN = мразь
Инфо Ответить
v
vertur Member
30 дней назад / 30 марта 2025 23:02
peter_irich

TLDR... , то результат стал иметь fps=25, хотя у исходнго файла было 24, ... TLDR
Как подсчитали fps ?

Если это поле взято из метаданных контейнера - то там может быть погрешность из-за целочисленных округлений (она возникает из-за неудачного выбора значения поля timescale внутри MovieHeaderBox 'mvhd', и возможно нестандартного значения поля rate).

Каждый ключевой фрейм внутри видеопотока имеет свой точный timestamp - вот из них надо и делать вычисления (это долго).
peter_irich
Junior Member
Автор темы
2/6 ответов
Недавно на iXBT, с марта 2025
Россия, Санкт-Петербург
Инфо Ответить
p
peter_irich Junior Member Автор темы
27 дней назад / 02 апреля 2025 08:41
Прошу прощения за задержку с ответом.
fps показывают программы mediainfo и ffprobe, кроме того, я звуковую дорожку сохраняю отдельно и при запуске пережатого mkv просто видно, что видео идёт быстрее звукового сопровождения.
И я не понял, почему спойлер не сработал, я всё делал из меню.
Ваш ответ:

Нет значка Нет значка Вот тут! Лампочка Восклицание Вопрос Класс! Улыбка Злость Огорчение Поговорим? Краснею Подмигивание Ругаю ОдобряюBIUdelSxsupxsuboffsp spoilerqurlimgvideo• list1. list1 codeprecenter-hr-rusQWE→ЙЦУ
файлыочистить
Ваше имя: Авторизуйтесь Предпросмотр В полную форму
вставить выделенную цитату в окно ответа
Если Вы считаете это сообщение ценным для дискуссии (не обязательно с ним соглашаться), Вы можете поблагодарить его автора, а также перечислить ему на счет некоторую сумму со своего баланса (при отзыве благодарности перечисленная сумма не будет вам возвращена).
Также вы можете оценить сообщение как неудачное.
В течение суток можно 20 раз оценить сообщения разных участников (купите Premium-аккаунт, либо оплачивайте оценки сверх лимита).
Если Вы считаете это сообщение ценным для дискуссии (не обязательно с ним соглашаться), Вы можете поблагодарить его автора, а также перечислить ему на счет некоторую сумму со своего баланса (при отзыве благодарности перечисленная сумма не будет вам возвращена).
Также вы можете оценить сообщение как неудачное.
В течение суток можно 20 раз оценить сообщения разных участников (купите Premium-аккаунт, либо оплачивайте оценки сверх лимита).