Программно конвертировать видео в FLV
В настоящее время я работаю над веб-приложением, которое должно принимать видео, загруженное пользователями в любом формате (.avi,.mov и т.д.), и конвертировать их в FLV для воспроизведения в флеш-проигрывателе.
Поскольку сайт основан на OpenCms, лучшим решением будет готовый плагин для OpenCms, который позволил бы загружать и воспроизводить видео, выполняющие операцию перекодирования в фоновом режиме, но только набор классов Java для перекодирования будет отлично, а затем я мог бы сделать форму загрузки и воспроизведение частью самостоятельно.
Ответы
Ответ 1
В основном у вас есть два варианта, если вы хотите размещать, перекодировать и передавать FLV файлы (и не хотите покупать приложение для транскодирования видео): вы можете позвонить в FFMpeg/MEncoder или использовать внешний веб-сервис. Вы также можете полностью устранить проблему, разрешив им встраивать видео YouTube на свой сайт.
Если вы перейдете в локальный маршрут FFMpeg, я бы предложил просто использовать ProcessBuilder и создать командную строку для выполнения FFMpeg. Таким образом, вы получаете полный контроль над тем, что выполняется, вы избегаете JNI, который является абсолютным кошмаром для работы, и вы сохраняете код, специфичный для ОС, из вашего приложения. Вы можете найти FFMPeg со всеми колоколами и свистками для практически любой платформы. Там есть хороший шанс уже на вашем сервере.
Самое приятное в маршруте "Local FFMPeg" заключается в том, что вам не нужно платить за какой-либо дополнительный хостинг, и все работает локально, хотя администратор хостинга может начать жаловаться, если вы используете сумасшедший объем диска и CPU. Есть несколько других вопросов StackOverflow, которые рассказывают о некоторых из gotchas, использующих FFMpeg, чтобы создать flvs, которые вы можете играть в флеш-плеер.
Маршрут веб-сервиса хорош, потому что задействована меньшая настройка. Я не использовал Hey! Watch, но выглядит многообещающим. PandaStream легко настраивается, и он работает хорошо, плюс вы получаете все свои видео на S3 без каких-либо дополнительных усилий.
Ответ 2
Там есть отличный инструмент с открытым исходным кодом FFmpeg, который я использую для перекодировки моих видео. Я использую PHP для вызова оболочки, чтобы он ожил, но я не могу себе представить, что было бы слишком сложно заставить его играть с Java. (Возможно, это может быть хорошей отправной точкой для вас.)
Я еженедельно провожу свою установку на 30+ концертных вечеринках, и она всегда выходит как качественный материал. Единственная сложная часть для меня заключалась в том, чтобы скомпилировать ее для обработки самых разных видеоформатов. С яркой стороны это мне очень тяжело.
Ответ 3
Вы можете кодировать видео на Java с помощью Xuggler, который является Java API, который изначально использует код FFmpeg C за кулисами.
Ответ 4
Это может быть слегка касательным, но я нашел Panda Stream как очень полезное решение для всех видов проблем с кодированием видео.
Все, что вам нужно сделать, - загрузить видеофайл в экземпляр Amazon EC2 с Panda, и он будет кодировать видео в нужные вам форматы и качество и выдаст обратный вызов вашему серверу приложений с подробностями, когда это будет сделано, Затем вы можете использовать прилагаемый проигрыватель Flash Video или собственный плеер для воспроизведения видео на вашем сайте.
Он очень масштабируемый (благодаря Amazon EC2 и S3), экономически выгодное и настраиваемое решение по сравнению с вашим собственным.
Очень рекомендуется.
Update:
Архитектура Panda выглядит следующим образом:
Архитектура Panda Поток http://pandastream.com/images/panda_arch.gif
- Страница отображает Panda форму загрузки в iframe или всплывающем окне
- Загрузка видео с индикатором выполнения AJAX
- Обратный вызов API при завершении кодирования
- Видео, переданное пользователю
Ответ 5
Существует библиотека библиотека с открытым исходным кодом, используемая MPlayer, называемая mencoder, который поддерживает FLV, а также множество других кодеков.
Существует Java GUI, вы можете видеть, как было сделано
Это тоже может помочь.
Кажется, я не могу найти какой-либо пример, который не вызывается из консоли, поэтому он может быть вам не полезен.: S
Изменить
Также рассмотрите этот вопрос.
Ответ 6
Вы можете попробовать использовать онлайн-сервис, например HeyWatch, чтобы конвертировать ваше видео. Никогда не использовали его, но они требуют
"прозрачная загрузка, отправка видео прозрачно с вашего сайта"
Не Java-решение, но вам не нужно беспокоиться о том, на какой ОС находится ваше веб-приложение.
Если ОС не была проблемой, я согласен с ответом theBadDawg. Я не знаю и не повезло найти чистое Java-решение.
Ответ 7
Кодирование файлов в одном формате в другой требует много времени на разработку, чтобы получить право, поэтому в декодерах/кодировщиках так мало возможностей, которые способны выполнить эти умения. Те, которые хорошо известны и используются наиболее часто, - ffmpeg и mencoder.
Что бы вы могли захотеть, это посмотреть, работает ли платформа, на которой вы работаете (Windows/Mac OS X/Other unix), базовый набор вызовов API, которые вы можете использовать, которые способны декодировать файлы, и повторно -кодировать их. Windows имеет DirectShow, а Mac OS X - Quicktime. Не уверен, что вы можете получить доступ к этим API с помощью Java.
У FFMpeg есть доступная оболочка Java: FFMPEG Java, а также FOBS, который имеет JNI, доступный для их оболочки С++ вокруг ffmpeg. Последнее, что я нашел jFFmpeg, однако есть некоторые сообщения, которые я нашел в Google, предлагая, что проект может быть неактивным.
Лучше всего будет либо mencoder из mplayer, либо ffmpeg. Ffmpeg может быть установлен как отдельный двоичный код, а затем вызван из другого кода, используя команды "shell" по умолчанию. Если вы, тем не менее, не можете выполнять команды, вам может потребоваться использовать веб-сайт онлайн-конверсии, как предположил Марк Робинсон.
Ответ 8
FFMpeg лучше всего подходит для транскодирования видео.
Вы можете использовать java-обертки для ffmpeg -
http://fmj-sf.net/ffmpeg-java/getting_started.php
http://sourceforge.net/projects/jffmpeg/
Ответ 9
Если вы хотите сделать это с помощью java, вы можете сделать это очень легко, используя Xuggle.
У них отличный сайт, объясняющий, как делать все
документация находится здесь:
http://build.xuggle.com/view/Stable/job/xuggler_jdk5_stable/javadoc/java/api/index.html
и отличный учебник, рассказывающий вам, как делать то, что вы хотите, здесь:
http://blog.xuggle.com/2009/06/05/introduction-to-xuggler-mediatools/
Они обеспечивают простой способ сделать то, что вы хотите в первом учебнике, которое является простым транскодированием.
Я обнаружил, что он работает нормально для кодирования в flv. То, что он делает за кулисами, - это использование ffmpeg, поэтому все, что будет срабатывать ffmpeg, также завершится неудачей с помощью xuggle.
Соответствующий пример java-кода:
// create a media reader
IMediaReader reader = ToolFactory.makeReader("videofile.flv");
// add a viewer to the reader, to see the decoded media
reader.addListener(ToolFactory.makeWriter("output.mov", reader));
// read and decode packets from the source file and
// and dispatch decoded audio and video to the writer
while (reader.readPacket() == null)
;
Что я получил от
http://wiki.xuggle.com/MediaTool_Introduction
Если вам нужен полноценный рабочий код clojure... вот он:)
(import '(com.xuggle.mediatool ToolFactory))
(import '(com.xuggle.mediatool IMediaDebugListener IMediaDebugListener$Event))
(defn readerRecurse
"calls .readPacket until there nothing left to do2"
[reader]
(if (not (nil? (.readPacket reader))) ; here .readPacket actually does the processing as a side-effect.
true ; it returns null when it has MORE ro process, and signals an error when done...
(recur reader)))
(defn convert
"takes video and converts it to a new type of video"
[videoInput videoOutput]
(let [reader (ToolFactory/makeReader videoInput)]
(doto reader
(.addListener (ToolFactory/makeWriter videoOutput reader))
(.addListener (ToolFactory/makeDebugListener (into-array [IMediaDebugListener$Event/META_DATA]))))
(readerRecurse reader)))
теперь все, что вам нужно сделать, это что-то вроде:
(convert "/path/to/some_file.stupid_extention" "/path/to/awesome.flv")
и все готово!
Ответ 10
Вам также может быть интересно узнать, что теперь мы выпустили Panda в качестве размещенной службы, что упрощает настройку и масштабирование:)
http://pandastream.com
Ответ 11
yea, ffmpeg является лучшим для этой работы... Мы используем ffmpeg для конвертирования видео в течение длительного времени, и он работает со всеми видеоформатами. Существуют многочисленные варианты..