Кодирование видео для LightWorks

LightWorks — удобный кросс-платформенный видео-редактор для нелинейного монтажа видео. Мне очень нравятся идеи, вложенные в этот редактор: видно, что его используют для монтажа сложных кинематографических сцен.

Но есть одно но: LightWorks очень привередлив к форматам видео.

Мой телефон пишет видео в H.265 с какими-то хитрыми настройками компрессии. Видео с телефона нормально воспроизводит только mpv/mplayer, даже VLC ведёт себя странно. Не став мудрствовать лукаво я конвертнул видео в H.264 и всё каким-то чудом заработало. Но редактор безбожно тормозил. Позже выяснилось, что тормазит и Adobe Premiere Pro и другие редакторы.

Собака зарылась в том, что H.264 большой GOP (Group of Pictures), т. е. время до следующего ключевого/опорного кадра. Это значит, что при каждом перемещении ползунка по треку редактору нужно было кодировать много кадров, что в случае с H.264 не так-то просто. Решить эту проблему достаточно просто: нужно закодировать видео в All-Intra сжатии, когда каждый кадр кодируется независимо от других.

Но тут тоже возникла проблема: LightWorks наотрез отказался кушать lossless формат HuffYUV и даже All-Intra HVEC есть отказался. Я так бы и остался с тормозящим редактором, но мудрые знатоки с форумов подсказали решение: нужно закодировать видео в mjpeg и не париться. Что я и сделал:

# Windows Shell (cmd)
# Перекодировать один файл
ffmpeg -i file.mp4 \
    -pix_fmt yuvj422p -c:v mjpeg -q:v 1 -qmin 1 \
    -c:a pcm_s16le -r 30 -r:a 48000 \
    -b:a 384k -y file.avi
# Перекодировать все фейлы из папки (папка mjpeg должна существовать)
for %A IN (*.mp4) DO
    ffmpeg -i %A -pix_fmt yuvj422p -c:v mjpeg -q:v 1 \
        -qmin 1 -c:a pcm_s16le -r 30 -r:a 48000 -b:a 384k \
        -y "mjpeg/%A.avi"