Вопрос или проблема
Я счастливый пользователь 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, так что это определенно не проблема сервера.
ИЗМЕНЕНИЕ2:
Единственный трюк, использованный minidlna
для FreeBox client
, можно увидеть здесь.
После дальнейших исследований я нашел этот предыдущий пост. Так что для генерации *.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
Также нужно убедиться, что используется опция avconv -map_chapters -1
, чтобы на выходном файле mkv не было глав. Я не смог воспроизвести ни один mkv файл с главами через UPnP (используя minidlna), хотя они хорошо воспроизводятся локально (или через USB) с Windows Media Player (Windows 8.1).
$ ffmpeg -i input.mkv -map_chapters -1 -c:v copy -c:a copy output.mkv
Поскольку я могу заставить клиента FreeBox легко зависнуть (нажатием кнопки перемотка вперед
дважды подряд, чтобы перезагрузить всю систему) при использовании фильмов в формате 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="aTitle" -metadata date="aYear" out.mp4
Некоторые фильмы использовали ac3 и/или DTS, что не сработало для меня, так что наличие aac
было приемлемым решением. Windows Media Player не любил 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”)
Ответ или решение
Чтобы правильно осуществить рип DVD-дисков для последующего воспроизведения через UPnP с использованием сервера minidlna на Mac Mini G4, важно учитывать несколько факторов, касающихся контейнеров, кодеков, bitrate и других параметров. Давайте подробно рассмотрим каждый аспект процесса.
1. Выбор контейнера и кодеков
Ваша ситуация требует использования AVI-контейнера по нескольким причинам:
- Совместимость: Учитывая, что ваш клиент (Freebox) не поддерживает MP4 и MKV, AVI будет наиболее подходящим вариантом.
- Кодеки: Для видео в AVI-контейнере, рекомендуется использовать MPEG-4 (или Xvid, если доступно). Кодек x264, к сожалению, не совместим с AVI-контейнером.
Касательно аудиокодека, желательно избежать DTS и AC3, так как они могут вызвать проблемы с воспроизведением на вашем клиенте. Наилучшие варианты:
- AAC с частотой 48000 Гц, стерео.
- MP3 с частотой 44100 Гц, стерео или моно при низком bitrate (128 кбит/с).
2. Оптимальные настройки кодирования
Исходя из вашего опыта, для видео существуют определённые параметры, которые обеспечат плавность воспроизведения:
- Video Codec: MPEG-4
- Bitrate: около 800 кбит/с
- GOP: 300 кадров
- B-frames: 2
Для звука используйте:
- Audio Codec: MP3 или AAC
- Bitrate: 128 кбит/с для MP3, 128-192 кбит/с для AAC.
3. Команда для рипа DVD в AVI
За основу можно взять следующую команду для ffmpeg
:
ffmpeg -i input.vob -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a aac -b:a 128k -pix_fmt yuv420p output.avi
Или для MP3:
ffmpeg -i input.vob -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a libmp3lame -b:a 128k -pix_fmt yuv420p output.avi
4. Устранение возможных проблем
- Проблемы с кодированием: Если возникнут проблемы с кодированным видео, попробуйте изменить параметры GOP или bitrate.
- Сложности с воспроизведением: Некоторые клиенты могут не поддерживать определённые кодеки или настройки. Если возникнут сложности с воспроизведением, убедитесь, что используете настройки, указанные выше.
- Перепроверка контейнеров: Если клиент продолжает отказываться воспроизводить AVI-файлы, попробуйте сгенерировать более простой файл с низким качеством и постепенно увеличивайте параметры.
5. Заключение
Понимание того, какие параметры кодирования будут наилучшими для вашей конкретной среды, является ключевым для успешного рипа DVD-дисков и их воспроизведения через UPnP. Использование приведённых выше команд для ffmpeg
, а также учёт особенностей вашего оборудования (клиента Freebox) помогут вам достичь наилучшего результата.
Эти рекомендации и команды помогут вам без проблем подготовить ваши DVD-диски для просмотра в вашей домашней сети. Если возникнут дополнительные вопросы или нужно будет уточнить определённые моменты, не стесняйтесь обращаться за помощью.