1

Я счастливый пользователь minidlna (версия 1.0.24) на старом Mac Mini G4. Это работает довольно хорошо в моей среде. Поскольку minidlna не позволяет транскодировать, я хотел бы скопировать набор DVD (в основном мультфильмы) для просмотра. Однако я не смог понять, как правильно их кодировать с единственной целью - обслуживать их через UPnP.

  • У моего поставщика DSL есть встроенный клиент (Freebox ADSL, прошивка 1.5.20), который просто отказывается обслуживать файлы ISO Media, MP4 Base Media v1 [IS0 14496-12:2003] (* .mp4).
  • У меня есть планшет с Windows 8, который не поддерживает EBML file / Matroska (* .mkv) контейнеры.

Поэтому мне нужно использовать контейнер AVI для моей настройки. Теперь сложная часть состоит в том, какие параметры кодирования мне нужно использовать для копирования DVD в контейнер AVI ?

Видео: я проверил и работает видеопоток mpeg4 и x264. Насколько я понимаю, x264 не вариант, так как я использую контейнер AVI. Так, каковы варианты для хорошего качества видео потока mpeg4? Используя метод проб и ошибок, я обнаружил, что видео было немного изменчивым, используя контейнер mkv со следующим потоком:

Stream #0.0(eng): Video: h264 (High), yuv420p, 1280x568 [PAR 1:1 DAR 160:71], 25 fps, 25 tbr, 1k tbn, 50 tbc (default)

Аудио: у меня была проблема с файлом, содержащим:

Stream #0.1(fre): Audio: dca (DTS), 48000 Hz, 5.1, s16, 1536 kb/s (default)

в то время как любой из этих аудио работал:

Stream #0.1(fre): Audio: aac, 48000 Hz, stereo, s16 (default)
Stream #0.1: Audio: mp3, 44100 Hz, mono, s16, 128 kb/s (default)

Какой аудио вариант я должен выбрать?

Бонусный пункт: какую полную avconv (ffmpeg) можно преобразовать напрямую из DVD (* .vob) в такой AVI? Я бы не хотел использовать mencoder , поскольку он был недавно удален из Debian.

РЕДАКТИРОВАТЬ: Это совершенно не по теме, но это может прояснить комментарии ниже. После нескольких испытаний я обнаружил, что проблема с контейнером MPEG-4 действительно на стороне клиента. Я не знаю, почему клиент отказывается отображать это. Мне удалось взять контейнер * .mp4 и перекодировать его, используя: mkvmerge -o out.mkv in.mp4 , и теперь файл правильно отображается (и его можно воспроизвести!) на стороне клиента. Тот же * .mp4 хорошо выглядит в проигрывателе Windows 8 Media по умолчанию, так что это определенно не проблема сервера.

EDIT2: единственный трюк, используемый minidlna для FreeBox client можно увидеть здесь.

Рекомендации:* Создание видео в формате MP4 для потоковой передачи по протоколу HTTP.

1 ответ1

0

После еще одного исследования я узнал этот предыдущий пост. Поэтому для генерации файла * .mp4 уловка заключается в использовании:

$ ffmpeg -i input.avi -c:v libx264 -crf 22 -c:a libfaac -movflags faststart output.mp4

Однако -movflags faststart имеет смысл только в случае генерации mp4. Глядя на man ffmpeg из системы debian/jessie, я смог найти предложенный однострочник копирования DVD:

$ ffmpeg -i snatch_1.vob -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a libmp3lame -b:a 128k snatch.avi

Сгенерированный файл воспроизводится гладко в моей настройке, я могу быстро перематывать вперед и назад, поэтому я предполагаю, что AVI правильно проиндексирован (или, по крайней мере, совместим с тем, что необходимо в протоколе UPnP ).

Судя по нескольким сведениям, доступным в Интернете, Freebox V5 поддерживает только ограниченный набор форматов и кодеков:

  • стандартный кодек видео кодек аудио разрешение максимальная приемная
  • ts (mpeg ts) mpeg4 ac52 1280 × 720
  • ts (mpeg ts) h264 ac52 1280 × 720
  • avi xvid mp3 1280 × 720 и 1440 × 1080

Однако есть частичная поддержка Matroska (* .mkv), в этом случае это было проще установить кодеки MKV от здесь. Итак, в конце я использовал HandBrake (GUI) для конвертации DVD в mp4 (высокий профиль + веб-оптимизация), а затем перекодировать в mkv:

$ mkvmerge -q -o out.mkv --compression 0:none --compression 1:none in.mp4

Также необходимо убедиться, что вы используете -map_chapters -1 avconv, чтобы убедиться, что в сгенерированном выходном файле mkv нет главы. Мне не удалось воспроизвести ни один файл mkv с главами через UPnP (используя minidlna), хотя они хорошо воспроизводятся локально (или через USB) с помощью проигрывателя Windows Media (Windows 8.1).

$ ffmpeg -i input.mkv -map_chapters -1 -c:v copy -c:a copy output.mkv

Поскольку я могу легко вызвать сбой клиента FreeBox (дважды нажмите кнопку fast forward , чтобы перезагрузить всю систему), используя фильмы Full HD (1920x), мне нужно немного уменьшить масштаб видео (1280x):

$ ffmpeg -i in.mp4 -c:v libx264 -crf 23 -vf scale=1280:-1 -c:a aac -strict experimental -sn -movflags faststart -metadata title="in" out.mp4 

Некоторые фильмы использовали ac3 и / или DTS, которые не работали для меня, поэтому aac было приемлемым решением. Проигрыватель Windows Media не любил ac3 поверх UPnP, а FreeBox V5 (прошивка 1.5.20) не любил звук DTS .

Поэтому, когда вход представляет собой AVI-контейнер со звуковым потоком ac3, вам необходимо преобразовать его в mp4 (на самом деле mkv для FreeBox):

$ ffmpeg -i input_with_ac3.avi -c:v copy -c:a copy output.mp4

Если вы хотите mkv и не хотите сначала конвертировать его в mp4, а затем mkv, вам нужно обойти эту ошибку:

[matroska @ 0x1b62100] Невозможно записать пакет с неизвестной временной меткой av_interleaved_write_frame(): неверный аргумент

Смотрите, например, здесь:

$ ffmpeg -fflags +genpts -i input_with_ac3.avi -c copy out.mkv

Обновление: иногда использование mpeg4_unpack_bframes приводит к уменьшению размера файла. Смотрите док.

Обновление: обратите внимание, что если вы работаете в Linux, ntfs-3g умолчанию использует windows_names:off , поэтому вам не следует создавать новые файлы с символом «:» (Windows Media Player и VLC не поддерживают их). Смотрите здесь.


Обновление: FreeBox потребует определенного формата пикселей: -pix_fmt yuv420p . Также возможно использовать -profile:v high -level 4.0 так как файл * .ts, создаваемый коробкой, использует этот профиль (ffprobe -show_streams * .ts | grep "profile\| level")

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