ffmpeg: как конвертировать libaom-av1 в формат whatsapp

ffmpeg: как конвертировать libaom-av1 в формат whatsapp

Я пытаюсь конвертировать видео, которое имеет видеоформат 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

Связанный контент