MyTetra Share
Делитесь знаниями!
Преобразование видео в формат монтажного кодека с помощью ffmpeg
Время создания: 16.09.2021 01:03
Текстовые метки: ffmpeg, монтажный кодек, видеоредактор, mjpeg, pcm, adpcm, wav, avi
Раздел: Компьютер - Linux - Видео - FFmpeg
Запись: xintrea/mytetra_syncro/master/base/1631743433ds040cjbcr/text.html на raw.github.com

Для того, чтобы использовать видеофайл в видеоредакторах, его вначале нужно подготовить. Если вставлять в видеоредактор файл в исходном (сыром) виде, существует большая вероятность возникновения проблем при работе внутри видеоредактора. Все видеоредакторы плохо работают с кодеками MP4 (mpeg4), h264/h265 и прочими, обеспечивающие максимальное сжатие, и использующие кейфреймы. Для видеомонтажа надо перегнать видеофайл в кодек, в котором каждый кадр является ключевым, а не разностью между последним ключевым кадром и набором преобразований потока по времени.



Видеокодек


Для бытового использования, в качестве монтажного кодека хорошо подходит видеокодек mjpeg. Он является альтернативой между размером видеофайла и качеством картинки. По сути, он представляет собой последовательнось кадров виде отдельных jpeg-изображений. Для профессионального мотажа его лучше не использовать, а использовать видеокодек со сжатием без потерь, например ffvhuff - Huffyuv FFmpeg или huffyuv. Но тогда придется иметь весьма мощный компьютер с быстрым дисковым вводом-выводом и большим объемом жесткого диска, ибо файлы со сжатием без потерь просто гигантские (10MB mp4 обычно превращаются в 1GB hufyyuv для FullHD разрешения).



Звуковой кодек


Часто в "сырых" видео используется кодек AAC и другие кодеки на основе психоакустического сжатия, или имеющие переменный битрейт. Такие аудиокодеки не подходят для видеомонтажа. С ними гарантированно возникнут проблемы даже на этапе загрузки видео в видеоредактор (получится рассинхрон видео и звука). А вторая рассинхронизация будет создана в момент сохранения видео после редактирования в итоговый файл.


Беспроблемными кодеками являются кодеки семейства PCM (pulse code modulation) или ADPCM (adaptive pulse code modulation). Это простые кодеки, которые имеют постоянный битрейт и представляют собой просто последовательность числовых значений аудио-сигнала во времени (PCM) или высчитываемое значение аудиосигнала на основе дельты от предыдущего значения (ADPCM). WAV-файлы обычно имеют именно такой формат кодирования. В любом случае, PCM/ADPCM кодеки - это хороший выбор в качестве звукового кодека для видеомонтажа.


Конвертор ffmpeg имеет в своем составе ADPCM-кодек adpcm_ima_wav, который понимает любая программа видеомонтажа.



Контейнер


В качестве монтажного контейнера проще всего использовать формат AVI. Это простой и известный всем видеомонтажным программам формат, не содержащий сжатия. Упакованные в такой контейнер видео и аудио потоки легко извлекаются в момент загрузки данных.



Команда перекодирования видеофайла


Посмотреть информацию о видеофайле (например, чтобы узнать FPS исходника и его разрешение), можно с помощью команды:



ffmpeg -i file.mp4



Посмотреть все аудио и видео кодеки, поддерживаемые ffmeg можно командой:



ffmpeg -codecs



Посмотреть опции кодека mjpeg можно командой:



ffmpeg -h encoder=mjpeg



Для перекодирования видеофайла в монтажный кодек можно воспользоваться следующей командой:



ffmpeg -i input.mp4 -c:v mjpeg -q:v 1 -qmin 1 -c:a adpcm_ima_wav output.avi



В данной команде форматы видео и аудио кодеков определяются опцией -c:..., а формат контейнера ffmpeg вычисляет исходя из расширения файла (в данном случае получится avi-контейнер).


Опция -q:v 1 устанавливает максимальное качество генерируемого видеопотока.


Опция -qmin 1 описана в man ffmpeg-all, и она устанавливает минимальный video quantizer scale (VBR). Как она коррелирует с опцией -q не совсем понятно, но про нее известно, что она должна выставляться в единицу для того, чтобы опция -q:v 1 работала на максимальное качество.


Опция -huffman optimal не влияет на качество, но по описанию должна оптимизировать размер получаемого файла (на деле ее эффект не виден, см. таблицу ниже).


Примеры работы опций:




Размер файла

Исходный mp4 файл

302 Mb

Mjpeg без опций качества

998 Mb

Mjpeg с опцией -q:v 1

3780 Mb

Mjpeg с опциями -q:v 1 и -qmin 1

5830 Mb

Mjpeg с опциями -q:v 1 -qmin 1

и -huffman optimal

5830 Mb



Чтобы ускорить перекодирование, можно добавить перед именем выходного файла опцию -threads N, где N - количество потоков. Однако похоже, что для кодека mjpeg более чем двукратного роста скорости кодирования (от кодирования без этой опции) невозможно добиться. Видимо, это как-то связано с реализацией многопоточности либо в кодеке, либо в самом ffmpeg.


Так же в этом разделе:
 
MyTetra Share v.0.58
Яндекс индекс цитирования