Здравствуйте, буквально на днях начал заниматься любительской видеосъемкой, немного погрузился в теорию, но вопросов естественно очень много. Буду благодарен если поможете разобраться с некоторыми, например касательно работы кодеков и обрезки файлов:
Есть видеофайл с камеры GoPro 9, размером 149,4 мегабайта, с такими характеристиками:
видео: H.265, 16:9, 60fps, 3840*2160, битрейт 7554994
аудио: aac, битрейт 189148
Открываю этот файл в программе OpenShot на Linux, и без какого-либо редактирования в качестве эксперимента сразу же экспортирую, указываю абсолютно такие же параметры видео и аудио как у исходного файла, в том числе битрейт и тп, но в итоге получаю файл размером 172,2 мегабайта с такими параметрами:
видео: H.265, 16:9, 60fps, 3840*2160, битрейт 8714722
аудио: aac, битрейт 128520
Собственно вопросы:
1. Что вообще произошло "под капотом" работы кодеков при экспорте? В моем понимании в данном случае не должно было произойти ничего, а в итоге откуда-то появилась разница в битрейтах, размерах файлов.
2. Что с качеством видео на экспортированном файле? Визуально разницы нет, а на самом деле?
3. И наконец - моя основная задача просто обрезать видео, что бы во всем остальном оно осталось при прежних параметрах, дак как это делать в итоге?
1. у видео кодеков ещё масса параметров, влияющих на качество и объем файла. Но самый поверхностный – битрейт. Увеличился битрейт – файл стал тяжелее.
2. качество при каждом перекодировании — падает. Поэтому лучше избегать перекодирования там, где оно необязательно. Например, когда только лишь вырезаете часть по времени, перекодировать не нужно, т.к. картинка остаётся та же самая. Поэтому п.3:
3. просто обрезать видео лучше без перекодирования. Это можно сделать прямо из командной строки могучим инструментом ffmpeg. Примерная команда:
ffmpeg \
-ss 15 \ # пропустить 15 секунд от начала
-i Source.mp4 \ # имя исходного файла
-t 30 \ # продолжительность 30 сек.
-c copy \ # кодек "копия" - не перекодировать
Result.mp4 # что получится - в этот файл
только удалите все комментарии – после слешей должен сразу быть перенос строки. Этот вариант, пожалуй, самый быстрый из возможных.
1. я же как раз и задал целевой битрейт аналогичный исходному видео, почему он увеличился в итоге?
2. почему при перекодировании качество падает? я же вроде и h256 в h265 кодирую, то есть по факту ничего измениться не должно?
3. Спасибо буду пользоваться
blast3r, бирейт не всегда можно соблюсти прям точно.
В любом случае происходит сначала распаковка каждого кадра в массив значений пикселей, а потом заново применяется компрессия кодеком с новыми, пусть и похожими, параметрами. Там масса ньюансов ещё есть. Например, параметр кодека, отвечающий за баланс скорости обработки / качества сжатия.