Anatoly Vorobey (avva) wrote,
Anatoly Vorobey
avva

Categories:

видеофайлы (компьютерное, линукс)

Ох, как же я измучился с этими плейерами и конвертерами разных видеоформатов за последние два дня.

Привык, что mplayer хоть и монстр, зато играет практически всё, что ему дают. Ну и хорошо. А тут скачал за последние пару дней много фильмов и мультфильмов. Некоторые из них хочу смотреть и другим показывать на телевизоре в гостиной, а не на компьютерном экране. Там у меня DVD-плейер; правда, DVD-writer'а у меня нет, но плейер умеет также показывать фильмы, записанные на CD в формате SVCD. Казалось бы, простая задача: есть исходный файл .AVI, нужно получить образ для записи SVCD на диск. Наверняка где-то должна быть умная программа, которой даёшь файл и она всё, что нужно делает, правда? Ага, как же.

Ненормальное количество библиотек и утилит (я о Линуксе говорю, кстати), совершенно непонятно, какие из них лучше, как их использовать. Документация везде очень убогая, предполагает, что читатель все технические термины знает как свои пять пальцев. В общем, много времени утекло, пока я не разобрался наконец, что мне нужно что-то вроде следующей командной строки:


ffmpeg -i input.avi -f yuv4mpegpipe - |yuvscaler -v 0 -n p -O SVCD -M WIDE2STD |mpeg2enc -v 0 -f 4 -n p -F 1 -o output.mpv


Эта последовательность команд вытаскивает видео-поток из input.avi, переводит его в промежуточный формат yuv пакета mjpegtools (ох, какую я ошибку допустил, попробовав вначале делать это через промежуточные файлы... этот .yuv съел у меня всё свободное место на диске за пару минут), потом yuvscaler переводит его в размеры, подходящие для SVCD, одновременно сжимая из формата 16:9 в телевизионный формат 4:3 (опция -M WIDE2STD), потом mpeg2enc переводит это всё в формат MPEG-2, причём надо ему ещё сказать правильный framerate (опция -F 1 в данном случае), который в промежуточном формате yuv не сохраняется, так что нужно самому посмотреть в исходном файле и подобрать нужную опцию. И ещё много всяких нужных опций подобрать.

Потом надо то же самое сделать для звука, только с mp2enc вместо yuvscaler и mpeg2enc, а потом ещё надо использовать mplex для мультиплексирования всего этого вместе в один файл, а потом vcdimager, чтобы из этого файла сделать образ для CD. Всего шесть программ.

Но тут ещё оказалось, что ffmpeg не умеет читать файлы субтитров (которые к данному фильму у меня лежат в формате VobSub отдельно). И вообще никто практически не умеет. Умеет mplayer, который их правильно показывает. Что ж, пришлось разбираться в опциях mplayer, чтобы заставить его вместо показа экспортировать видео и звук в каких-нибудь удобных форматах. Там свои сотни опций, но к счастью оказалось, что есть скрипт mencvcd, внутри пакета mplayer, который запускает все нужные программы: mplayer с опциями экспорта видео в yuv и аудио в wav, yuvscaler и mpeg2enc как описано выше, mp2enc для кодирования звука, и потом mplex и vcdimager. Правда, у этого скрипта свои 20 опций, которые он использует для того, чтобы правильно передавать опции всем остальным, но уже хотя бы только 20. После нескольких попыток он стал правильно переводить видео (сохраняя нужные размеры, а не искажая картинку при переводе в размеры SVCD), и сейчас корпит над этим злосчастным фильмом.

Но как это всё, простите, через задницу. И нигде нет нормального подробного guide'а, который объяснил бы процесс и все термины для новичков. Есть несколько страниц в сети, в разной степени устаревших, с очень плохими объяснениями или вообще без объяснений, с инструкциями типа "делай так и не задумывайся, что это делает и как работает". Одна из них рассказывает про то, как это всё делать с помощью transcode, ещё одного огромного пакета для перевода всего во всё; он у меня вообще работать отказался.

И с этими субтитрами дурацкими. Вот в моём случае я ужимаю широкоформатный (16:9) фильм к размеру 4:3 . Снизу и сверху от картинки на экране будут чёрные полосы. Вот туда же самое место субтитры поместить, чтобы не мешали картинке! Но не получается никак, потому что субтитры накладывает mplayer ещё до того, как yuvscaler пережимает картинку в новый размер и добавляет чёрные полосы. Если делать это правильно, то, по-моему, о субтитрах должен знать mplex, мультиплексер, который соединяет картинку и звук (а может и несколько картинок): ему бы эти файлы VobSub дать, чтобы он их поставил на чёрные полосы. Но он не умеет. И в Windows то же самое, кажется: субтитры накладывает программа-плейер до того, как программа-encoder получает картинку и меняет размерность.


Теперь я знаю о таких вещах, как AVI, MPEG-2, SVCD, NTSC/PAL (резолюции разные у них в SVCD! 480x480 и 480x576), aspect ratio, framerate, MP2, и ещё многих словах и сокращениях, гораздо больше, чем мне хотелось бы знать.

В Windows, кстати, здесь рассказывают, как то же самое сделать (перевести divx записанный в avi в образ SVCD, наложив субтитры VobSub при этом). Тоже не подарочек, между прочим.

А ещё у меня есть очень наивный вопрос. Что мне нужно, чтобы я мог видео-файлы играть на компьютере (причём стандартными какими-нибудь плейерами, тем же mplayer в Линуксе, или Windows Media Player в Windows) а показывались они при этом чтобы сразу на телевизоре? Такое ведь делается как-то? Что нужно для этого купить с точки зрения hardware, что куда воткнуть, что установить с точки зрения software (особенно в Линуксе было бы полезно)? Если кто-то расскажет или даст ссылку хорошую, буду благодарен.
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 26 comments
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →