Решено: Уменьшить размер видео

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Ответить
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Решено: Уменьшить размер видео

Сообщение azsx »

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

Shell

Video
ID : 1
Format : AVC
Format profile : High@L4.1
Codec ID : avc1
Полный вывод

Shell

mediainfo выпускной.mp4
General
Complete name : выпускной.mp4
Format : MPEG-4
Format profile : Base Media / Version 2
Codec ID : mp42 (mp42/mp41)
File size : 5.48 GiB
Duration : 1 h 16 min
Overall bit rate mode : Variable
Overall bit rate : 10.3 Mb/s
Encoded date : UTC 2019-06-18 07:17:18
Tagged date : UTC 2019-06-18 07:53:21
TIM : 00:00:00:00
TSC : 25
TSZ : 1

Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : High@L4.1
Format settings : CABAC / 4 Ref Frames
Format settings, CABAC : Yes
Format settings, Reference frames : 4 frames
Format settings, GOP : M=3, N=25
Codec ID : avc1
Codec ID/Info : Advanced Video Coding
Duration : 1 h 16 min
Bit rate : 9 997 kb/s
Width : 1 920 pixels
Height : 1 080 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 25.000 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Interlaced
Scan type, store method : Separated fields
Scan order : Top Field First
Bits/(Pixel*Frame) : 0.193
Stream size : 5.31 GiB (97%)
Language : English
Encoded date : UTC 2019-06-18 07:17:19
Tagged date : UTC 2019-06-18 07:17:19
Color range : Limited
Color primaries : BT.709
Transfer characteristics : BT.709
Matrix coefficients : BT.709
Codec configuration box : avcC

Audio
ID : 2
Format : AAC LC
Format/Info : Advanced Audio Codec Low Complexity
Codec ID : mp4a-40-2
Duration : 1 h 16 min
Source duration : 1 h 16 min
Bit rate mode : Variable
Bit rate : 317 kb/s
Maximum bit rate : 430 kb/s
Channel(s) : 2 channels
Channel layout : L R
Sampling rate : 48.0 kHz
Frame rate : 46.875 FPS (1024 SPF)
Compression mode : Lossy
Stream size : 173 MiB (3%)
Source stream size : 173 MiB (3%)
Language : English
Encoded date : UTC 2019-06-18 07:17:19
Tagged date : UTC 2019-06-18 07:17:19
Вопросы.
1. А как получить какое то образное понимание о форматах видео и аудио? То есть в какой формат конвертировать, чтобы более менее гарантировано показывал на современных теликах и двд плеерах?
2. Что вообще фраза значит "уменьшить размер"? Может логичнее разбить файл на две части? Как это сделать? Или тут кодек не самый сильный, надо другой взять (какой)?
3. Какой софт для этого есть? Может есть что в консоли?
Последний раз редактировалось azsx 22.08.2019 17:08, всего редактировалось 2 раза.
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2645
ОС: Gentoo

Re: Уменьшить размер видео

Сообщение ormorph »

Судя по всему нужно сжать, попробуйте ffmpeg, кодек -vcodec libx264.
Когда то делал скрипт захвата с экрана и конвертирование в сжатый формат, можете глянуть параметры сжатия в настройках:
тыц
Есть и ебилд для gentoo тыц.
Скрипт использует диалог yad.
Спасибо сказали:
Аватара пользователя
Vascom
Сообщения: 1699
ОС: Fedora 32

Re: Уменьшить размер видео

Сообщение Vascom »

Перекодируй из avc в h264. Уменьши битрейт, 10Мбит/сек это много. Во сколько раз уменьшишь битрейт, во столько же раз уменьшится размер файла.
Аудиодорожку тоже перекодируй с уменьшением битрейта, например в mp3 256кбит/сек.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Уменьшить размер видео

Сообщение Bizdelnick »

Vascom писал:
09.08.2019 08:05
Перекодируй из avc в h264.
Гениальный совет. Погуглить, что такое AVC, не пробовали?

azsx, степень сжатия H.264/AVC зависит от многих настроек, поэтому для простоты в ffmpeg есть параметр CRF, позволяющий её варьировать, не вдаваясь в детали. Попробуйте поиграться с этим параметром, например
ffmpeg -i выпускной.mp4 -c:v libx264 -preset slow -tune film -crf 30 -c:a copy выпускной.mkv
Подробнее.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2645
ОС: Gentoo

Re: Уменьшить размер видео

Сообщение ormorph »

Пиксели уменьшить, до 720p смотреть scale.
1080p многовато будет...
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: Уменьшить размер видео

Сообщение Hephaestus »

azsx писал(а):
09.08.2019 04:42
1. А как получить какое то образное понимание о форматах видео и аудио?
Почитать документацию к ffmpeg, например.
Или к mplayer. В комплекте с mplayer есть (по крайней мере, раньше был) кодировщик mencoder.
Сам этот кодировщик лично мне не очень нравится, но в документации есть главы о кодировании с его помощью, там, кроме всего прочего, изложена некоторая теория на эту тему.
azsx писал(а):
09.08.2019 04:42
То есть в какой формат конвертировать, чтобы более менее гарантировано показывал на современных теликах и двд плеерах?
Понятие "современный" само по себе не даёт никаких гарантий. Всё зависит от устройства.
Телевизор может уметь нужный кодек, но не уметь нужный контейнер. Или наоборот.
А на DVD-плеере гарантированно играется только DVD-видео (и то не всякое), а уж всё остальное - опционально.
azsx писал(а):
09.08.2019 04:42
2. Что вообще фраза значит "уменьшить размер"?
Это надо спросить у тех, кто поставил Вам эту задачу.
Можно снизить битрейт - размер файла станет меньше.
Можно применить другой кодек (с более сильным сжатием) - размер файла станет меньше.
Можно повыкидывать из файла ненужное (из файла с фильмом убрать звуковые дорожки на японском/китайском, например) - размер файла станет меньше.
Можно уменьшить размер кадра. Если там высокое разрешение, а большого экрана нет и не предвидится.

Как видите, вариантов больше одного.
Каждый из них подразумевает ухудшение качества в разной степени. Это желательно довести до сведения пользователя.
Какой вариант применить в конкретном случае, зависит от файла и хотелок пользователя.
azsx писал(а):
09.08.2019 04:42
Может логичнее разбить файл на две части? Как это сделать?
Можно. Тем же кодировщиком. Указать точку отсчета и длительность, при этом по возможности позаботившись о сохранении качества.
azsx писал(а):
09.08.2019 04:42
3. Какой софт для этого есть? Может есть что в консоли?
ffmpeg, mencoder. Оба консольные. Первый, на мой взгляд, гораздо функциональней.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Vascom
Сообщения: 1699
ОС: Fedora 32

Re: Уменьшить размер видео

Сообщение Vascom »

Bizdelnick писал:
09.08.2019 08:46
Vascom писал:
09.08.2019 08:05
Перекодируй из avc в h264.
Гениальный совет. Погуглить, что такое AVC, не пробовали?

azsx, степень сжатия H.264/AVC зависит от многих настроек, поэтому для простоты в ffmpeg есть параметр CRF, позволяющий её варьировать, не вдаваясь в детали. Попробуйте поиграться с этим параметром, например
ffmpeg -i выпускной.mp4 -c:v libx264 -preset slow -tune film -crf 30 -c:a copy выпускной.mkv
Подробнее.
Ну опечатался, из avc1. Сути это не меняет.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Уменьшить размер видео

Сообщение Bizdelnick »

Vascom писал:
09.08.2019 17:50
Ну опечатался, из avc1.
Всё-таки рекомендую погуглить.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Vascom
Сообщения: 1699
ОС: Fedora 32

Re: Уменьшить размер видео

Сообщение Vascom »

Вот ещё, не царское это дело.
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Уменьшить размер видео

Сообщение azsx »

каждое перекодирование у меня занимает много времени (аппаратного кодека нет). Вот жду второй раз, в первый сделал 3,1 гигабайт. Хочу в 2 уместиться с 5,5 гигабайт
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2645
ОС: Gentoo

Re: Уменьшить размер видео

Сообщение ormorph »

Сделал небольшую вырезку из своего скрипта.
Для наблюдения за ходом прогресса, используя диалог yad.
progess.sh
Spoiler

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

#!/bin/bash

CONV(){
	stdbuf -o0 tr '\r' '\n' | while read video_out
	do
		MASS=($video_out)

	    if  [ "${MASS[0]}" = 'Duration:' ] ; then
		    DURATION="${MASS[1]:0:8}"
	    fi

	    if [[ "$video_out" =~ ^[[:print:]]+time=+[[:print:]]*$ ]] ;then
		MASS=${video_out//*time=/}
		MASS=(${MASS//./ })
  		TIME=$MASS
	  	echo "# The compression process takes $DURATION"
                echo "# The compression process takes $DURATION"

                HMS1=(${DURATION//:/ })
                HMS2=(${TIME//:/ })

	  	#Remove the first zero
	  	HMS1=(${HMS1[@]#0})
                HMS2=(${HMS2[@]#0})

		#calculation percentage
                SEK1=$((${HMS1[0]}*3600+${HMS1[1]}*60+${HMS1[2]}))
                SEK2=$((${HMS2[0]}*3600+${HMS2[1]}*60+${HMS2[2]}))
                PERCENT=$(($SEK2*100/$SEK1))
                echo "$(($PERCENT))"
	    fi
	done
}

process(){
	CONV
	echo "# Compression completed!"
	echo "100"
}

process|yad --progress \
	--auto-close \
	--title="videofile processing" \
	--text="Compression process start" \
	--percentage=0
Далее перемещаем скрипт в каталог доступный переменной PATH, даем права на выполнение.
Использование:

Shell

$ ffmpeg -i inputfile.mp4 -acodec libmp3lame -ab 192k -ac 2 -vcodec libx264 -vf scale=-1:720 outfile.mp4 2>&1|progress.sh
Далее можно наблюдать за ходом прогресса, вроде можно заменить yad на zenity.
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Уменьшить размер видео

Сообщение azsx »

Результат после эксперементов не однозначный.

Shell

/home/ty/ff/ffmpeg-git-20190804-amd64-static/ffmpeg -i выпускной.mp4 -vf scale=-1:720 -c:v libx264 -crf 25 -preset veryslow -c:a copy vypus6.mp4
вот такая строка уменьшила размер видео с 5,5 гигабайт до 967 мегабайт (crf=18 -- 2.2 гигабайта). Но в то же время именно на моём lg файл не читается. В интернетах пишут по разному, но в одном месте уточняется, что lg читает только divx 3-6 версии от модели.
А у меня avc x264.
Вот и не понятно, какой формат то мелкий и самый лучший для теликов.
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2645
ОС: Gentoo

Re: Уменьшить размер видео

Сообщение ormorph »

Если андроид, то просто можно поставить плеер, который будет читать. Типа xplayer или 321 Player.
У меня телик этот формат нормально воспроизводил. На счёт звука, то параметр -c:a copy, просто использует тот же формат звука что и в исходном файле. По этому как бы нужно смотреть поддерживается ли данный формат вашим устройством. А так везде должен читаться mp3.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Уменьшить размер видео

Сообщение Bizdelnick »

azsx писал(а):
18.08.2019 06:50
именно на моём lg файл не читается
Попробуйте указать профиль, например -prifile:v baseline.
Current profiles include: baseline, main, high, high10, high422, high444.
Жать будет хуже, зато файл прочитается на всех устройствах, поддерживающих данный профиль. По ссылке, которую я давал выше, это описано.
Добавлено (08:34):
azsx писал(а):
18.08.2019 06:50
В интернетах пишут по разному, но в одном месте уточняется, что lg читает только divx 3-6 версии от модели.
А исходный файл читается? Там же и был изначально H.264. Если тоже не читается, и перекодирование с профилем baseline не поможет, то Вам сюда.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Уменьшить размер видео

Сообщение azsx »

Shell

ffmpeg -i выпускной.mp4 -c:v mpeg4 -vtag divx -qscale:v 8 -c:a libmp3lame -qscale:a 4 output8.avi
решение вот такое. 8 -- подобрал опытным путём, влез в 3.3 гб. То есть это сконвертировал видео в формат, который играет даже на моём телевизоре lg.
Спасибо сказали:
Ответить