mp4 psp-edition (Чем кодируют и какие особенности формата)

Вопросы, приемы и проблемы обработки видео

Модератор: Модераторы разделов

Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

mp4 psp-edition

Сообщение alkesta »

Собственно тему начал с вопроса "У кого-то реально получилось сделать mp4 x264, который работает на PSP нативными средствами из Linux? Поделитесь опытом.", а в результате сам нашел все ответы. Получилось маленькое Howto.

Все протестировано на Sony PSP 3008 прошивка 6.20

FFMpeg
ffmpeg из RPMFusion собран без libfaac. Соотвественно нужно пересобрать пакет. Для нормальной пересборки в Fedora 14, кроме пакетов из BuildRequires нужно поставить пакет libstdc++-static. Команда для пересборки:

Код: Выделить всё

$ rpmbuild -ba ffmpeg.spec --with faac


Команда:

Код: Выделить всё

$ ffmpeg -i /path/to/InputVideo.avi -f psp -r 29.97 -b 564k -ar 24000 -ab 64k -s 368x208 OutputVideo.mp4

дает на выходе видео которое работает на PSP, кодированное Mpeg4 кодеком, с ограничением Ширина*Высота < 76800, иначе PSP пишет: "Не поддерживаемые данные".

Полноценный x264-файл можно сделать командой:

Код: Выделить всё

$ ffmpeg -i INPUTFILE -ac 2 -ar 48000 -acodec libfaac -ab 128k -r 25 -s 480x272 -vcodec libx264 -vpre slower -vpre main -level 30 -refs 3 -flags2 -bpyramid -b 512k -maxrate 10M -bufsize 10M -threads 0 -timestamp now -metadata title="TITLE OF MOVIE" -aspect 480:272 OUTPUT.mp4

двухпроходный вариант:

Код: Выделить всё

$ ffmpeg -i INPUTFILE -an -pass 1 -r 25 -s 480x272 -vcodec libx264 -vpre slower_firstpass -vpre main -level 30 -refs 3 -flags2 -bpyramid -b 512k -maxrate 10M -bufsize 10M -threads 0 -aspect 480:272 OUTPUT.mp4 && ffmpeg -i INPUTFILE -ac 2 -ar 48000 -acodec libfaac -ab 128k -pass 2 -r 25 -s 480x272 -vcodec libx264 -vpre slower -vpre main -level 30 -refs 3 -flags2 -bpyramid -b 512k -maxrate 10M -bufsize 10M -threads 0 -timestamp now -metadata title="TITLE OF MOVIE" -aspect 480:272 OUTPUT.mp4

Весь нюанс - в параметрах -refs 3 -flags2 -bpyramid которые не соотвествуют профилю H.264/MPEG-4 AVC Main Profile Level 3 заявленному Sony как поддерживаемый.

Допустимые разрешения - любые кратные 16-ти в плоть до 480x272. После 480x272 возможны только 3 разрешения: 720x480, 640x480 и 720x576 (предусмотрены для вывода на телевизор).

Необходимость параметра -f psp мной не выявлена.

HandBrake
HandBrake - http://handbrake.fr/
Пресет для HandBrake - PSP.plist (проверено на HandBrake-0.9.5):

Код: Выделить всё

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <dict>
        <key>AudioList</key>
        <array>
            <dict>
                <key>AudioBitrate</key>
                <string>128</string>
                <key>AudioEncoder</key>
                <string>AAC (faac)</string>
                <key>AudioEncoderActual</key>
                <string>faac</string>
                <key>AudioMixdown</key>
                <string>Stereo</string>
                <key>AudioSamplerate</key>
                <string>48</string>
                <key>AudioTrack</key>
                <integer>1</integer>
                <key>AudioTrackDRCSlider</key>
                <real>0</real>
                <key>AudioTrackDescription</key>
                <string>Unknown</string>
            </dict>
        </array>
        <key>ChapterMarkers</key>
        <false />
        <key>Default</key>
        <false />
        <key>FileFormat</key>
        <string>MP4 file</string>
        <key>Folder</key>
        <false />
        <key>Mp4HttpOptimize</key>
        <false />
        <key>Mp4LargeFile</key>
        <false />
        <key>Mp4iPodCompatible</key>
        <false />
        <key>PictureAutoCrop</key>
        <integer>1</integer>
        <key>PictureBottomCrop</key>
        <integer>0</integer>
        <key>PictureDeblock</key>
        <integer>4</integer>
        <key>PictureDecomb</key>
        <integer>0</integer>
        <key>PictureDecombCustom</key>
        <string></string>
        <key>PictureDecombDeinterlace</key>
        <true />
        <key>PictureDeinterlace</key>
        <integer>0</integer>
        <key>PictureDeinterlaceCustom</key>
        <string></string>
        <key>PictureDenoise</key>
        <integer>0</integer>
        <key>PictureDenoiseCustom</key>
        <string></string>
        <key>PictureDetelecine</key>
        <integer>0</integer>
        <key>PictureDetelecineCustom</key>
        <string></string>
        <key>PictureHeight</key>
        <integer>0</integer>
        <key>PictureKeepRatio</key>
        <true />
        <key>PictureLeftCrop</key>
        <integer>0</integer>
        <key>PictureLooseCrop</key>
        <true />
        <key>PictureModulus</key>
        <string>16</string>
        <key>PicturePAR</key>
        <string>0</string>
        <key>PicturePARHeight</key>
        <integer>1</integer>
        <key>PicturePARWidth</key>
        <integer>1</integer>
        <key>PictureRightCrop</key>
        <integer>0</integer>
        <key>PictureTopCrop</key>
        <integer>0</integer>
        <key>PictureWidth</key>
        <integer>480</integer>
        <key>PresetBuildNumber</key>
        <integer>2011010401</integer>
        <key>PresetDescription</key>
        <string>HandBrake&apos;s normal, full resolution settings for Sony PSP devices.</string>
        <key>PresetName</key>
        <string>Sony PSP</string>
        <key>SubtitleList</key>
        <array>
        </array>
        <key>Type</key>
        <integer>1</integer>
        <key>UsesPictureFilters</key>
        <integer>1</integer>
        <key>UsesPictureSettings</key>
        <integer>1</integer>
        <key>VideoAvgBitrate</key>
        <integer>340</integer>
        <key>VideoEncoder</key>
        <string>H.264 (x264)</string>
        <key>VideoFramerate</key>
        <string>25 (PAL Film/Video)</string>
        <key>VideoFrameratePFR</key>
        <false />
        <key>VideoGrayScale</key>
        <false />
        <key>VideoQualitySlider</key>
        <real>20</real>
        <key>VideoQualityType</key>
        <integer>1</integer>
        <key>VideoTargetSize</key>
        <integer>300</integer>
        <key>VideoTurboTwoPass</key>
        <true />
        <key>VideoTwoPass</key>
        <true />
        <key>anamorphic</key>
        <true />
        <key>par_height</key>
        <integer>0</integer>
        <key>par_width</key>
        <integer>0</integer>
        <key>x264Option</key>
        <string>subme=6:mixed-refs=0:weightb=0:8x8dct=0:trellis=2:me=umh:b-pyramid=none:partitions=none:direct=temporal:weightp=0:b-adapt=2</string>
    </dict>
</array>
</plist>


Gstreamer
Gstreamer тоже кодирует проигрываемое на PSP-3000 видео. В этой связи пропатчил Arista (фронтэнд использующий Gstreamer, мультипоточный - кодирует очень быстро).

Thumbnail
Чтобы список файлов на PSP выглядел красиво и информативно, нужен Thumbnail. В списке видеофайлов, вместо белых квадратиков будут показаны картинки из фильма.
Ширина и высота картинки - 160x120, формат дефолтный JPEG, расширение .THM, название файла точно такое же как название видеофайла (пример: Sintel.mp4 Sintel.THM). Видеофайл и Thumbnail должны лежать в директории /VIDEO.
Самое удобное - это сделать скриншот с понравившегося стоп-кадра фильма. Отредактировать в Gimp (откадрировать и смасштабировать до 160x120). Затем переименовать NAMEOFFILE.jpg в NAMEOFFILE.THM

Заметки по ходу изучения вопроса:
Ограничение по времени воспроизведения: 6 часов и 30 минут:
(User's guide (System Software Version 6.10)) писал(а):You can play files of the following types on the PSP™ system.
Memory Stick™ Video Format
- MPEG-4 Simple Profile (AAC)
- H.264/MPEG-4 AVC Main Profile (CABAC) (AAC) and Baseline Profile (AAC)
MP4
- MPEG-4 Simple Profile (AAC)
- H.264/MPEG-4 AVC Main Profile (CABAC) (AAC) and Baseline Profile (AAC)
AVI
- Motion JPEG (Linear PCM)
- Motion JPEG (μ-Law)
Hints
Depending on the data type, some data items cannot be played.
The system cannot play video data containing video recorded for longer than approximately 6 hours and 30 minutes.
Some files distributed over the Internet may have playback limitations. For details, contact the content provider.

видео:
  • - PSP-3001 Codec: H.264/MPEG-4 AVC Main Profile Level 3 [8 (PDF)], но имеющий свои особенности - ref=3, b-pyramid=none, weightp=0, weightb=no [6]
    - x264 работает только на консолях с прошивкой выше 2.00 (до 2.00 работал только Mpeg-4)
    - Отсутствие CAVLC (Context-adaptive variable-length coding) (the PSP is abble to read CAVLC h264 video stream but only for files coded in Level 1.3 and with a resolution of 320x240) [9].
    - Битовый поток: <= 1500кбит/с для 3000-й серии и <= 768кбит/с для 1000-й серии
    - Кадров в секунду: 14.985 и 29.97 [4] (Хотя файлы с торpентов имеют 25fps и нормально работают на 6.20)
    - Ширина и высота видео должны быть кратны 16.
    - Произведение ширина * высота <= 64000 [1] или <=76800 [2],[3],[4] или для новых прошивок (оффициальная 5.00 и выше [6]) ширина<=480, высота<=272. Оптимальные разрешения 320x240, 368x208, 400x192 [4], 480x240 [6]. Также возможны 640x480 и 720x480 [6].

Звук:
  • - Частота дискретизации звука 24кГц для MPEG-4 или 48кГц для H.264.
    - Профиль Low Complexity (LC-AAC /MPEG-4) [6]
    - Битрейт: оптимальный 128kbps, максимальный 768kbps [6].


Ссылки по теме:
1. Mencoder: Кодирование в Sony PSP видео формат
2. Bug 583189 - [mp4mux] add PSP hack mode:Comment 9
3. ffmpeg: How do I encode videos which play on the PSP?
4. PQDVD:PSP Video Guide
5. libx264-98 Update: post #3
6. Robert Swain: PSP video guide
7. Install and use the latest FFmpeg and x264
8. Sony PSP-3001: Specifications (PDF)
9. CAVLC vs CABAC for IPOD vs PSP
10. HandBrake: PSP - Need Help With Settings
11. Robert Swain: x264 to FFmpeg option mapping
12. xucker.jp: ffmpeg commands: PSP
13. Corley Kinnane: psp-encode/
Спасибо сказали:

Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Re: mp4 psp-edition

Сообщение alkesta »

для ffmpeg v >= 0.7 поменялся синтаксис:

Код: Выделить всё

ffmpeg -i The.Golden.Compass.BluRay.2007.1080p.BDRip.DXVA.mkv -map 0:0 -map 0:3 \
-acodec libvo_aacenc -ac 2 -ab 128k -ar 48000 -alang rus \
-vcodec libx264 -x264opts level=30:me=umh:subme=6:ref=3:b-pyramid=0:weightb=0:weightp=0:b-adapt=2:vbv-maxrate=10000:vbv-bufsize=10000 \
-metadata title="The Golden Compass" \
-metadata artist="Nicole Kidman, Daniel Craig, Dakota Blue Richards, Ben Walker" \
-metadata album="" \
-metadata date="2007" \
-metadata comment="PSP fw > 6.20 compatible file format" \
-timestamp now -threads 0 -r 24000/1001 -b 512k -s 480x272 -aspect 480:272 Golden_Compass.mp4
Спасибо сказали: