14

Мне нужно закодировать короткое видео в формате, который можно воспроизводить с помощью Windows Media Player на Windows XP без установки каких-либо дополнительных кодеков. Для процесса перекодирования я использую ffmpeg.

Я уже пробовал кодек msmpeg4v2 но качество ужасное (по сравнению с исходным видео вы видите большие "блоки"), поэтому я ищу другие кодеки, которые работают из коробки и имеют по крайней мере "нормальное" качество.

Поскольку комментарии указывали, что это может быть не кодек, а проблема с битрейтом, вот команда, которую я использовал:

ffmpeg -i x.flv -vcodec msmpeg4v2 -acodec adpcm_ima_wav x.avi

Выход:

Input #0, flv, from 'x.flv':
  Metadata:
    moovPosition    : 39337765
    avcprofile      : 100
    avclevel        : 30
    aacaot          : 2
    videoframerate  : 25
    audiochannels   : 2
  Duration: 00:06:19.52, start: 0.000000, bitrate: 836 kb/s
    Stream #0:0: Video: h264 (High), yuv420p, 702x396 [SAR 2596:3679 DAR 354:283], 25 tbr, 1k tbn, 50 tbc
    Stream #0:1: Audio: aac, 48000 Hz, stereo, s16
w:702 h:396 pixfmt:yuv420p tb:1/1000000 sar:2596/3679 sws_param:
Output #0, avi, to 'x.avi':
  Metadata:
    moovPosition    : 39337765
    avcprofile      : 100
    avclevel        : 30
    aacaot          : 2
    videoframerate  : 25
    audiochannels   : 2
    ISFT            : Lavf53.32.100
    Stream #0:0: Video: msmpeg4v2 (MP42 / 0x3234504D), yuv420p, 702x396 [SAR 2596:3679 DAR 354:283], q=2-31, 200 kb/s, 25 tbn, 25 tbc
    Stream #0:1: Audio: adpcm_ima_wav ([17][0][0][0] / 0x0011), 48000 Hz, stereo, s16, 384 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> msmpeg4v2)
  Stream #0:1 -> #0:1 (aac -> adpcm_ima_wav)
Press [q] to stop, [?] for help
frame= 9485 fps=436 q=31.0 Lsize=   31197kB time=00:06:19.48 bitrate= 673.5kbits/s
video:12628kB audio:17913kB global headers:0kB muxing overhead 2.149820%

4 ответа4

11

Поскольку вы ничего не указали, ваш видеопоток настроен на использование q=2-31, 200 kb/s . В результате получается среднее значение в 673.5kbits , что немного , по крайней мере, для кодеков, отличных от h.264.

Попробуй заставить

  • например, определенный битрейт с -b:v 1000K . В старых версиях FFmpeg вы можете использовать только -b .
  • например, фиксированный уровень качества с -qscale 2 . Здесь значение может варьироваться от 1 до 31. Значения в здравом уме для qscale находятся в диапазоне от 2 до 5 или около того. Просто попробуйте и посмотрите, что дает лучший результат.

Кодеки, которые действительно поддерживаются в Windows по умолчанию , таковы:

Сегодня используются сотни аудио и видео кодеков. Некоторые из них были созданы Microsoft, но подавляющее большинство кодеков было создано другими компаниями, организациями или частными лицами. По умолчанию операционная система Windows и проигрыватель содержат ряд наиболее популярных кодеков, таких как Windows Media Audio, Windows Media Video и MP3.

Также см. Мультимедийные типы файлов, которые поддерживает проигрыватель Windows Media для получения дополнительной информации.

С FFmpeg вы можете попробовать mpeg1video (MPEG-1) или mpeg2video (MPEG-2), или msmpeg4 (MPEG-4 Part II), но я не уверен, поддерживается ли он вообще универсально. Если вы хотите быть в безопасности, вы должны использовать MPEG-1 или MPEG-2.

6

У меня была похожая проблема с файлом aac/h264 .mp4, который изначально нормально воспроизводился в проигрывателе Windows Media (Windows 7). После того как я отредактировал в VirtualDub и сохранил в формате .avi, а затем преобразовал обратно в aac/h264 .mp4 с использованием параметров по умолчанию ffmpeg, он больше не будет воспроизводиться в проигрывателе Windows Media.

Используя MediaInfo для сравнения исходного и конечного файлов, я заметил, что использовался другой профиль кодирования и разные настройки подвыборки цветности (4:2:0, окончательный 4:4:4). Перекодировав его с помощью ffmpeg, используя следующую опцию, WMP смог правильно воспроизвести файл:

ffmpeg  -i edited.avi -pix_fmt yuv420p fixed.mp4
2

Википедия FFMPEG рекомендует следующее:

ffmpeg -r 30 -i foo.flv -codec:v mpeg4 -flags:v +qscale -global_quality:v 0 -codec:a libmp3lame foo.avi
0

Поскольку оба кодека уже поддерживаются контейнером AVI, вы можете просто сделать

ffmpeg -i x.flv -vcodec copy -acodec copy x.avi

это предполагает, что ваша XP поддерживает h.264, в противном случае я бы пошел с файлом wmv, тем же квантователем, и позволил бы ffmpeg заполнить кодеки. Это должно дать вам почти такое же качество, как оригинал:

ffmpeg -i x.flv -sameq x.wmv

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .