Как скопировать обложку видео при конвертации с помощью FFmpeg
При работе с видеофайлами важно не только трансформировать основной видеопоток, но и сохранить дополнительную информацию, такую как обложка. В данной статье мы рассмотрим, как правильно скопировать обложку, хранящуюся в видео потоке MJPEG, при помощи FFmpeg 7.1.
Проблема с захватом обложки
Когда вы пытаетесь указать обложку для копирования, используя следующий командный синтаксис:
ffmpeg -i "in.mkv" -map 0:v:0 -c:v:0 libx265 -map 0:v:m:codec=mjpeg? -c:v copy "out.mkv"
можно столкнуться с ошибкой:
Stream map '' matches no streams. To ignore this, add a trailing '?' to the map.
Failed to set value '0:v:m:codec=mjpeg?' for option 'map': Invalid argument
Error parsing options for output file Out.mkv.
Error opening output files: Invalid argument
Такое поведение может навести на мысль, что ваша версия FFmpeg не поддерживает выбор потоков по кодеку.
Механизмы выбора потоков
В последних версиях FFmpeg можно использовать различные спецификаторы потоков для выбора обложки. Однако, в некоторых случаях, определенные команды могут вернуть ошибку.
Я попробовал использовать другие спецификаторы, такие как:
-map 0:v:m:frame_rate=24/1
-map 0:m:language:spa
Все они заканчиваются одной и той же ошибкой. Это говорит о том, что возможна поломка в вашей сборке FFmpeg, либо способ выборки потоков, который вы используете, не подходит для данного кодека.
Обновление о другой методике
Недавно я также протестировал команду:
-map 0:t
которая предназначена для работы с вложениями. Тем не менее, обложка MJPEG оказывается исключением, поскольку команда 0:v
исключает вложенные видеопотоки. В конечном итоге это приводит к выводу, что возможности выбора потоков в данной сборке ограничены.
Стандартный способ конвертации обложки
Если вы не хотите усложнять задачу с выбором потоков, существует стандартный способ, при котором обложка конвертируется вместе с видео без дополнительных манипуляций:
ffmpeg -i input.mkv -c:v libx265 -c:a copy output.mkv
При использовании этого метода обложка автоматически сохраняется в выходном файле.
Проблемы с миниатюрами в Windows 11
Также стоит отметить, что на Windows 11 есть известная проблема с отображением миниатюр видео, закодированных с использованием кодека h.265. Видео могут отображаться как значки, но на самом деле миниатюры можно увидеть в медиаплеерах, таких как VLC. Для этого достаточно открыть видео в VLC и нажать CTRL + I
для просмотра информации или перенести файл на систему Linux.
Заключение
Выбор потоков в FFmpeg может быть сложным, особенно когда дело касается обложек и вложенных потоков. Если вы столкнулись с проблемами, попробуйте использовать стандартный подход конвертации, при котором обложка будет скопирована автоматически. А для пользователей Windows 11 полезно помнить о проблемах с отображением миниатюр и использовать альтернативные медиаплееры для решения этой проблемы.