Я использую ffmpeg для поворота видео на 90 или 180 градусов в сценарии Python. Это прекрасно работает. Но мне любопытно, почему выходной файл будет меньше байтов, чем входной файл.
Вот команды, которые я использую:
180 градусов:
ffmpeg -i ./input.mp4 -preset veryslow -vf "transpose=2,transpose=2,format=yuv420p" -metadata:s:v rotate=0 -codec:v libx264 -codec:a copy ./output.mp4
90 градусов:
ffmpeg -i ./input.mp4 -vf "transpose=2" ./output.mp4
Например, файл GoPro Hero 3 MP4 изначально имел размер 2,0 ГБ. Полученный выходной файл был 480,9 МБ. Другой файл GoPro был 2.0, и его результирующий файл был 671,5 МБ. Возможно, это из-за того, что файлы GoPro были 2.0, но содержат пустое пространство, что-то вроде того, как некоторые файловые системы NTFS создают минимальный файл 4 КБ, даже если в нем меньше байтов?
Если это не GoPro Hero 3, как мне повернуть файлы на 90 или 180 градусов, но убедиться, что размер выходного файла такой же? Или ожидается потеря данных? Потеря данных связана с форматом?
Обратите внимание, что качество видео не повреждено, и это хорошо. Итак, мне интересно узнать больше о том, почему это происходит, тогда я могу прочитать раздел документации ffmpeg, который имеет к этому отношение.
Спасибо!