У меня было несколько видео, которые я оцифровал со старых кассет когда-то, захотел посмотреть на телевизоре и .. видео не воспроизводилось. Выяснилось, что (пере)кодировать надо с обязательным параметром -pix_fmt yuv420p в ffmpeg. Раз уж взялся, то решил разобраться и выяснилось, что у ffmpeg достаточно много плагинов, которые могут помочь с восстановлением видео и его коррекцией.
Например, в моих видео почему-то была пакость с деинтерлейсингом или как эта черезстрочная гадость называется, когда кажется, что изображение пронизывается черными горизонтальными движущимися полосами. Против этого есть плагин yadif, а строка с ним выглядит так
Код:
ffmpeg -i input.mp4 -vf yadif=1 -c:v libx264 -profile:v main -level:v 4.0 -pix_fmt yuv420p -crf 23 beautified.mkv
есть вариант добавить к строке --profile slow, чтобы кодировалось более вдумчиво, но мне лень ждать было, а качество сильно не потерялось.
Есть еще плагины, которые я задействовал, покажу итоговую солянку
Код:
ffmpeg -i deinterlaced_.mp4 -vf vidstabdetect=shakiness=10:accuracy=15:result="transforms.trf" -f null -
ffmpeg -i deinterlaced_.mp4 -vf "vidstabtransform=smoothing=1:input=transforms.trf,eq=brightness=0.05,nlmeans=s=2:p=5" -c:v libx264 -profile:v main -level:v 4.0 -pix_fmt yuv420p -crf 23 beautified.mkv
Тут все достаточно просто и, одновременно, крышесносно... первая строка собирает трассировку дрожания кадра, соответственно, в параметрах 10 и 15, их можно крутить... в итоге получаете файлик trf, который надо скормить следующей строке, для того же файлика .mp4
Во второй строке сглаживание трясучки - 1, имейте ввиду, что трястись могут начать другие элементы кадра, у меня, например, все стало стабильным, зато дата-время в кадре, встроенное видеокамерой, начало дергаться просто в припадках эпилепсии. Фильтр eq позволяет изменять сатурацию и яркость, как минимум, кассеты были старые, так что я немного яркость поднял, фильтр nlmeans с параметрами 2 и 5 убирает шумы.
Работает полнофильтровая строка адски медленно, особенно, если еще добавите --profile slow, а, возможно, захотите. Поэтому рекомендую сначала вырезать кусок видео с ключевым расколбасом изображения, например, секунд на 10, и посмотреть, как он будет выглядеть на выходе. У меня скорость кодирования в полном фарше была около 0.05, то есть речь шла о работе процессора несколько дней. Я в итоге убрал только черезстрочную эту пакость первым вариантом, поскольку перекодировать в понимаемый телевизором формат все равно надо было.