Я пытаюсь конвертировать видео, которое имеет видеоформат libaom-av1
и opus
аудиоформат
Я конвертирую его в mp4 с помощью
ffmpeg -y -i test.mkv -c copy -c:a aac 1.mp4
сейчас 1.mp4
имеет размер2.4 mb
Но когда я пытаюсь поделиться этим whatsapp
, это отображается как9.4 MB
Теперь я хочу сохранить тот же размер около 1,5-2 МБ и поделиться whatsapp
сsame quality
Я тоже попробовал
ffmpeg -y -i test.mkv \
-c:v libx264 -crf 28 -preset medium -profile:v baseline -level 3.0 -pix_fmt yuv420p \
-c:a aac -ar 44100 -ac 2 -b:a 48k \
-movflags faststart \
1.mp4
но качество очень плохое
как я могу сделать
оригинальное видео ( test.mkv
) можно получить по адресуhttps://0x0.st/-Ad4.mp4
решение1
Вам необходимо понять, что на самом деле представляет собой libaom-av1.
Это чрезвычайно эффективный кодек. Примерно в 3 раза эффективнее libx264, который использует WhatsApp. Поэтому без ущерба для качества вам нужно иметь файл в WhatsApp как минимум в 3 раза больше, даже больше, если файл AV1 имеет модель шума. Даже H265 намного менее эффективен, чем AV1, примерно на 30-40% в зависимости от того, был ли файл AV1 закодирован с зернистостью пленки или нет.
Ничего не поделаешь. WhatsApp решает использовать древний H264 в качестве видеокодека. Изменить это нельзя. 9 МБ с x264 для файла AV1 размером 2,4 МБ кажутся вполне разумными.
Не по теме:
Если вы хотите попробовать AV1 самостоятельно, вот команда для кодирования любого видео в AV1 с использованием официального производственного кодировщика libsvtav1. Имейте в виду, что это займет довольно много времени (предустановка 6 — быстрая предустановка, перейдите к предустановке 4, если вам нужен еще меньший файл, что, однако, займет больше времени; предустановка 8 всего на 10% эффективнее, чем x265 medium, но при этом имеет такую же чрезвычайно высокую скорость):
ffmpeg -i input.mp4 -vcodec libsvtav1 -acodec copy -qp 23 -preset 6 -g 300 output.mkv
-g 300 сообщает кодеру о необходимости разместить ключевой кадр после 300 кадров, измените его в соответствии с вашей частотой кадров*5.
Вы также можете использовать референсный кодер libaom-av1, однако он не только намного медленнее svt, будучи не более эффективным, но и не может работать в многопоточном режиме. В этом случае он даже менее эффективен, чем команда svt выше, но и намного медленнее. Вы можете попробовать его, конечно:
ffmpeg -i input.mp4 -vcodec libaom-av1 -cpu-used 6 -acodec copy -crf 23 output.mkv