Вопрос или проблема
Я пытаюсь конвертировать видео формата flv в mp4 с помощью ffmpeg.
Я проверил вопросы о конвертации из flv, такие как этот и этот, но это не помогло.
Команды, которые я выполнил:
ffmpeg -i input.flv -c:v libx264 output.mp4
также:
ffmpeg -i input.flv -c:v libx264 -crf 19 -strict experimental output.mp4
также:
ffmpeg -i input.flv -codec copy output.mp4
также:
ffmpeg -i input.flv -c copy -copyts output.mp4
также:
ffmpeg -i input.flv -vcodec libvpx -acodec libvorbis output.mp4
также:
ffmpeg -analyzeduration 2147483647 -probesize 2147483647 -i input.flv -c:v libx264 output.mp4
Я получаю следующую ошибку из всех вышеперечисленных вариантов:
[flv @ 0xaaab0f4ec060] Несоответствие пакета 1703445535 198421 198574
[flv @0xaaab0f4ec060] Не удалось найти параметры кодека для потока 0 (Видео:
h264, none): не заданный размер. Рассмотрите возможность увеличения значения для
‘analyseduration’ (0) и ‘probesize’ (5000000) опций
Вход #0, flv, из ‘input.flv’: Продолжительность: 00:00:07.12, старт: 0.000000, битрейт:
16070 кбит/с Поток #0:0: Видео: h264, none, 1k tbr, 1k tbn
Выход #0, mp4, в ‘output.mp4’: Выходной файл #0 не содержит ни одного потока
Пожалуйста, обратите внимание, что я не могу воспроизвести видео с помощью vlc. Мне удалось воспроизвести видео после загрузки FLV-Media-Player
Я думаю, что моему видео нужно какое-то предварительное преобразование, но я не знаю, как это сделать.
ОБНОВЛЕНИЕ:
Используя инструмент MediaInfoOnline для обработки моего видео flv, я получил следующую информацию (с инструментом не было обнаружено ошибок):
Общее
Полное имя : input.flv
Формат : Flash Video
Размер файла : 12.2 МБ
Общий битрейт режим : Постоянный
Видео
Формат : AVC
Формат/Информация : Кодек видео высокого разрешения
Профиль формата : High@L4
Настройки формата : CABAC / 1 референсный кадр
Настройки формата, CABAC : Да
Настройки формата, референсные кадры : 1 кадр
ID кодека : 7
Режим битрейта : Постоянный
Битрейт : 16.0 Мбит/с
Ширина : 1920 пикселей
Высота : 1080 пикселей
Соотношение сторон : 16:9
Режим частоты кадров : Переменный
Стандарт : NTSC
Цветовая палитра : YUV
Субдискретизация цветности : 4:2:0
Глубина цвета : 8 бит
Тип сканирования : Прогрессивное
Диапазон цвета : Полный
Цветовые первичные : BT.709
Передающие характеристики : BT.709
Коэффициенты матрицы : BT.709
Мне наконец удалось найти рабочее решение. Сначала я установил flvmeta
$ git clone https://github.com/noirotm/flvmeta.git
$ cd flvmeta
$ cmake .
$ make
$ sudo make install
Затем я выполнил следующую команду:
$ flvmeta -t -f input.flv output_meta.flv
После этого следующая команда работает как ожидалось:
$ ffmpeg -i output_meta.flv -c:v libx264 -crf 19 -strict experimental output.mp4
Ответ или решение
Ваша проблема с конвертацией FLV-видео в MP4 с помощью FFmpeg, скорее всего, связана с нехваткой метаданных или некорректной структурой файла FLV. Ошибки, которые вы упоминаете, указывают на проблемы анализа потока видео, что может быть вызвано поврежденными данными в исходном FLV-файле.
Как вы уже отметили, вы смогли преодолеть эту проблему, используя инструмент flvmeta
. Позвольте мне подробнее описать процесс, который вы выполнили, а также предложить некоторые рекомендации для других пользователей, столкнувшихся с аналогичной проблемой.
Решение проблемы с конвертацией FLV в MP4
-
Установка flvmeta:
Вы правильно выбрали использоватьflvmeta
, который позволяет исправить метаданные FLV-файлов. Для установки flvmeta выполните следующие команды:git clone https://github.com/noirotm/flvmeta.git cd flvmeta cmake . make sudo make install
-
Обновление метаданных видеофайла:
После установкиflvmeta
, используйте следующую команду для обновления метаданных вашего FLV-файла:flvmeta -t -f input.flv output_meta.flv
Этот шаг добавит необходимые метаданные, которые могут отсутствовать в вашем исходном файле.
-
Конвертация в MP4 с помощью FFmpeg:
После успешного создания нового FLV-файла с корректными метаданными, используйте следующую команду FFmpeg для конвертации в MP4:ffmpeg -i output_meta.flv -c:v libx264 -crf 19 -strict experimental output.mp4
Дополнительные рекомендации:
-
Проверка качества видео:
Использование параметра-crf
(Constant Rate Factor) позволяет контролировать качество конечного файла. Значение 19 обеспечит хорошее качество, но вы можете настроить его в диапазоне 18-23 в зависимости от ваших потребностей. -
Использование параметров анализа:
Если вы столкнетесь с подобными проблемами в будущем, можно попробовать увеличить параметры-analyzeduration
и-probesize
для FFmpeg, чтобы дать больше времени для анализа входной дорожки. Например:ffmpeg -analyzeduration 2147483647 -probesize 2147483647 -i input.flv -c:v libx264 output.mp4
-
Проверка файла:
Если видео не воспроизводится, рекомендуется использовать инструменты какMediaInfo
, чтобы проверить детали вашего видеофайла.
Заключение
Вы уже нашли решение вашей проблемы, используя flvmeta
, что является отличным вариантом. Сочетая этот подход с FFmpeg, вы сможете успешно конвертировать FLV-файлы в MP4. Если в будущем у вас возникнут другие проблемы, советую начать с проверки метаданных видео и корректного их обновления.