![]() |
|
![]() |
#1 | |||
Fedoraвод
![]() ![]()
|
![]() Пользователи винды радуются по любому возможному поводу когда находят любое преимущество их операционной системы над nix системами. Но эти плюсы часто являются минусами, так как кажущийся плюс на самом деле это не знание возможностей пингвина и только.
Итак на повестке дня - создание видео для онлайн просмотра. Обязательные условия - минимальный размер, хорошее качество и быстрая конвертация. Инструменты: mencoder, ffmpeg, x264, MP4Box, и mediainfo. Соглашусь что многовато, но оно того стоит. Приступим. Для начала нужно поставить на вашу линукс систему x264, мануалы есть для всех дистрибутивов, проблем возникнуть не должно, затем ставим mencoder, причем в опциях нужно указать поддержку x264 и aac, затем ставим ffmpeg, также указываем всевозможные отключенные опции, будь то несвободные библиотеки и все те же x264 и aac. Прошу заметить что пользователям убунты придется компилировать ffmpeg из исходников, так как в репозиториях он настолько обрезан что ничего с ним дельзя будет делать (зачем это сделано - для меня загадка). Итак если вы прошли успешно эти три пункта - то я вас обрадую, самое сложное позади. Осталось только поставить пакеты mediainfo и gpac (в состав которого входит MP4Box). В убунту все это ставится с помощью sudo apt-get install ... , причем в репах они вполне работоспособны. Приступим к описанию самого процесса конвертации видео. Берем любой видео файл, например video.avi или video.mkv. Этап обработки будет следующий, нам нужно переконвертировать видеоряд в h264 а звук в aac, и запихнуть все это в flv. Это делается при помощи ffmpeg с помощью одной строчки: Код:
ffmpeg -i video.mkv -vcodec libx264 -b 500k -vpre hq -acodec libfaac -ab 112k -ac 2 -threads 0 -f flv video.flv Но это одна сторона медали, есть у менкодера и существенный недостаток, который мешает использовать его напрямую для создания flv. Все дело в том что он не может муксить h264 видео в контейнер flv, предальски доказывая что они не совместимы, но мы то знаем где собака порылась ))) Да и фиг с ним, главное чтобы в mp4 муксил, а дальше перемуксить при помощи ffmpeg будет не проблема. Но тут кроется второй подводный камень, хоть в конфигах и указано что mencoder подддерживает мукс в mp4 - это не так, на выходе фактически мы получаем avi с названием видео.mp4, что является очень большой досадой. Но опятьже - фиг с ним, значит будет конвертить h264/aac и муксить в avi, делается это следующей командой: Код:
mencoder -oac faac -faacopts br=112:object=2 -channels 2 -srate 48000 \ -ovc x264 -x264encopts threads=auto:crf=27 \ video.mkv -o "video.avi" А нам нужен flv. Можно попытаться перемуксить в flv при помощи ffmpeg, команда выглядит вот так: Код:
ffmpeg -i video.avi -vcodec copy -acodec copy -threads 0 -f flv "video.flv" полученное с помощью менкодера видео разбиваем на потоки, например тем же менкодером: Код:
mencoder temp.avi -ovc copy -oac copy -of rawvideo -o video.h264 -nosound mencoder temp.avi -ovc copy -oac copy -of rawaudio -o audio.aac далее нам нужно собрать эту солянку в mp4 контейнер, припомощи MP4Box. Для этого нам нужно знать частоту кадров нашего видеоряда. Поскольку частоту кадров мы не меняли прикодировании менкодером то она будет такой же как и у исходного видео. Тут на помощь придет утилита mediainfo. Можно посмотреть fps через её гуи и поставить в командную строку, но я не сторонник такого метода, пусть лучше скрипт сам все смотрит, синтаксис будет следующим: Код:
FR=$(mediainfo --Inform="Video;%FrameRate%" "tmp/temp.avi"); MP4Box -add video.h264 -fps "$FR" -add audio.aac output.mp4 Итак, мы имеем mp4 видео, его нам нужно перемуксить в flv, как я писал выше, делается это вот как Код:
ffmpeg -i output.mp4 -vcodec copy -acodec copy -threads 0 -f flv temp.flv Но это не все, у нашего файла есть оин маленький недостаток, у него не прописаны метаданные, которые нужны для перемотки (стриминга) в неподгруженную область видео. Т.е. видео бужет показывать, и перематывать по загруженной области, а неподгруженную - нет. Исправить это можно утилитой yamdi, ставится она из репозиториев и успешно фунциклирует. Прогон ей выглядит вот как Код:
yamdi -i temp.flv -o temp2.flv -l ![]() Это был заключительный этап создания видео. С первого взгляда покажется все очень сложным и муторным, и не каждый отважится набирать столько команд в консоли. А я вам отвечу - и не нужно, создаем пустой файл под названием flv.sh, делаем его исполняемым и закидываем в него следующее Код:
rename 's/ /_/gi' *.mkv *.avi *.srt *.mp4 mkdir out; mkdir tmp; for f in *.mkv *.avi *.flv *.mp4; do if [ -f "$f" ] then { mencoder -oac faac -faacopts br=112:object=2 -channels 2 -srate 48000 \ -ovc x264 -x264encopts threads=auto:crf=27 \ "$f" -o "tmp/temp.avi" mencoder "tmp/temp.avi" -ovc copy -oac copy -of rawvideo -o "tmp/video.h264" -nosound mencoder "tmp/temp.avi" -ovc copy -oac copy -of rawaudio -o "tmp/audio.aac" FR=$(mediainfo --Inform="Video;%FrameRate%" "tmp/temp.avi"); MP4Box -add "tmp/video.h264" -fps "$FR" -add "tmp/audio.aac" "tmp/output.mp4" ffmpeg -i "tmp/output.mp4" -vcodec copy -acodec copy -threads 0 -f flv "tmp/temp.flv" yamdi -i "tmp/temp.flv" -o "out/${f%.avi}.flv" -l rm "tmp/temp.avi" ; rm "tmp/video.h264" ; rm "tmp/audio.aac" ; rm "tmp/output.mp4" ; rm "tmp/temp.flv" ; } else echo "нет файла: $f" fi done sleep 1800s; Вот как все легко и просто. Скорость конвертирования данным методом на 30 - 50 % выше чем при использовании только ffmpeg. Качество выходного вайла регулируется опцией crf=27 в команде менкодера, эта опция принимает значение от 0 до 50, 0 - исходное качество, 50 - наихудшее качество, я для себя остановился на 27, качество практически не страдает и скорость конвертиования примерно 10-12 минут на 23 минутный ролик )) Скажу еще что такое кодирования на виндовс займет примерно в 4 раза больше времени, что не может не радовать все линкусоидов )) Пингвины рулят как всегда! Всем пис, задавайте вопросы если что не понятно, рад буду ответить ЗлойЪ, Специально для Бормотухи.НеТ |
|||
Последний раз редактировалось Serberg; 08.09.2010 в 20:53.. |
||||
![]() |
![]() |
#3 | |||
Опытный пользователь
![]() ![]()
|
![]() Здравствуйте Злой! А Вы можете описать подробно, как этот скрипт использовать если стоит Windows 7
У меня не получается. Я создаю файл только с расширением .cmd туда вставляю этот скрипт, и ложу вместе с video запускаю его. И в итоге быстро появляются две пустые папки tmp и out. ![]() ![]() Код:
rename 's/ /_/gi' *.mkv *.avi *.srt *.mp4 mkdir out; mkdir tmp; for f in *.mkv *.avi *.flv *.mp4; do if [ -f "$f" ] then { mencoder -oac faac -faacopts br=112:object=2 -channels 2 -srate 48000 \ -ovc x264 -x264encopts threads=auto:crf=27 \ "$f" -o "tmp/temp.avi" mencoder "tmp/temp.avi" -ovc copy -oac copy -of rawvideo -o "tmp/video.h264" -nosound mencoder "tmp/temp.avi" -ovc copy -oac copy -of rawaudio -o "tmp/audio.aac" FR=$(mediainfo --Inform="Video;%FrameRate%" "tmp/temp.avi"); MP4Box -add "tmp/video.h264" -fps "$FR" -add "tmp/audio.aac" "tmp/output.mp4" ffmpeg -i "tmp/output.mp4" -vcodec copy -acodec copy -threads 0 -f flv "tmp/temp.flv" yamdi -i "tmp/temp.flv" -o "out/${f%.avi}.flv" -l rm "tmp/temp.avi" ; rm "tmp/video.h264" ; rm "tmp/audio.aac" ; rm "tmp/output.mp4" ; rm "tmp/temp.flv" ; } else echo "нет файла: $f" fi done sleep 1800s; |
|||
![]() |
![]() |
#4 | |||
Fedoraвод
![]() ![]()
|
![]() Tauren, это скрипт командной оболочки bash, которая является той самой ненавистной всеми командной строкой линукса, хотя на самом деле это манна небесная и нужно за неё руки целовать разработчикам.
По умолчанию в винде он работать не будет. Возможно есть порт bash"а на винду, так как большинство опен сорс программ легко переписать под любую операциоку. Но я не вкурсе этих дел. Гугли сам. Если найдешь баш под винду то думаю что с небольшими переделками он заработает. Но это будет что то подобное некрофилии, так как обрабатывает видео не сам скрипт а программы, про которые здесь написано, а скрипт просто управляет ими. Это подводит к логическому результату, что не стоит вообще этим заниматься, так как придется из винды сделать по сути линукс. ЗЫ папки создаются только по случайному стечению обстоятельств, при которых консольные команды создания папок в баш и кмд винды одинаковы. |
|||
Последний раз редактировалось Злой; 17.02.2012 в 21:17.. |
||||
![]() |
Cказали cпасибо: |
![]() |
#6 | |||
Fedoraвод
![]() ![]()
|
![]() Tauren, открою маленький секрет, способ конвертации в hd онлайн видео всего один, независимо от операционной системы.
Во всех программах используется кодек x264, при желании можно только им видео конвертировать. Но это не всегда удобно. Если без винды никак то почитай вот это http://www.bormotuhi.net/showthread.php?t=10441 |
|||
![]() |
Cказали cпасибо: |
![]() |
#12 | |||
Новичок
![]() ![]()
|
![]() Спасибо за ответ.
Я уже откопал свой старый пост с другого форума. Для новых версий ffmpeg я использовал это: ffmpeg -i input.mp4 -acodec copy -vcodec libx264 -preset slow -tune film -profile main -crf 29 -threads 0 output.mp4 Меняя параметры -preset и -crf можно менять размер и соответственно качество ролика. |
|||
![]() |
![]() |
Метки |
ffmpeg, mencoder, ubuntu, x264 |
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[Вопрос] DLE2WP (конвертация баз DLE в WP) | FreeD | WordPress | 1 | 26.02.2015 23:37 |
нужна быстрая конпка бана | dyukin | vBulletin 4.x | 7 | 12.06.2011 22:52 |
[Вопрос] Альбом+быстрая загрузка+настройка | Pavlushka | vBulletin 3.х | 6 | 08.08.2010 14:04 |
[Вопрос] Конвертация БД. ITA forum -> vB | kadet | vBulletin 3.х | 0 | 26.07.2010 07:58 |
11 женских пунктиков: они сведут с ума любого мужчину! | Strannik | Различия полов и их особенности | 0 | 04.10.2009 00:06 |