Конвертация видео файлов на сервере
Пришло время столкнутся с кодированием видео на сервере. Заливается стандартный AVI , и нужно из него получить MP4 (иногда и FLV).
Нормальная, обычная ситуация, только свои проблемы тоже есть. Нет стандартного нормального решения, все что используется, работает не так как хочется. Ко всему этому все советуют в качестве конвертора использовать то ffmpeg, то mencoder, то vlc. Было перепробовано все! И выбор пал все таки на ffmpeg.
С mencoder’ом и vlc были проблемы в некорректном создании контейнера MP4, то еще что то. Особо углубляться в проблемные штуки не хочется, а лучше показать правильное решение.
Самой главной проблемой при работе с ffmpeg то, что нельзя указать только ширину видео. Нужно указывать точно WIDTH x HEIGHT. То есть, чтобы пропорционально найти высоту видео, нужно ее подсчитать.
На помощь пришел shtirlic.com, спасибо ему за это. Вырезано и доработано:
TARGETWIDTH=480
(( TARGETHEIGHT=480 * ${SIZES[1]} / ${SIZES[0]} ))
if [[ $TARGETHEIGHT > 270 ]]
then
TARGETHEIGHT=270
fi
if [[ $(( TARGETWIDTH % 2 )) = 1 ]]
then
(( TARGETWIDTH++ ))
fi
if [[ $(( TARGETHEIGHT % 2 )) = 1 ]]
then
(( TARGETHEIGHT++ ))
fi
SIZE="${TARGETWIDTH}x${TARGETHEIGHT}"
Вот имеем и ширину, и высоту. Далее сам запуск конвертации:
- -threads 8 – eсли процессор мощный, то скорость конвертирования будет быстрее
- -vcodec libx264 – видео кодек для MP4
- -acodec libfaac – аудио кодек для MP4
- -async 1 – главный параметр если вы конвертируете звук 5.1 в стерео. Иначе возможен ассинхрон звука и видео
- -f mp4 – собственно контейнер MP4 (для FLV естественно -f flv)
- указывайте файлы в кавычках, мало ли какие названия могут попасться
Конвертация запущена, и успешно получаем MP4. Но, meta данные хранятся в конце файла, а нужно перенести их в начало, дабы плеер получил всю информацию по файлу и стал воспроизводить его сразу. По этой информации Интернет напичкан статьями. И здесь она тоже будет.
Для этого нам понадобится утилита qt-faststart:
Все. Данные перенесены. Файл готов к просмотру.
Есть конечно утилита MP4Box, но она не захотела работать с файлами от ffmpeg, но зато работала с файлами созданными с помощью mencoder.
Если требуется постоянная конвертация видео, то используйте отдельный сервер для этого. Если нет такой возможности, то не грузите сервер, а перед очередной конвертацией проверяйте наличие ffmpeg в памяти:
then
exit;
fi
Запихиваем все в скрипт файл
if [ ! -z $(ps ax |grep -o "ffmpeg -[i]") ]
then
exit;
fi
if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ]
then
exit;
fi
PATH=$1
FILE_AVI=$2
FILE_MP4=$3
cd "$PATH"
SIZES=$( ffmpeg -i "$FILE_AVI" 2>&1 | grep -o "[0-9]\{2,\}x[0-9]\{2,\}[, ]" | tr -d , | cut -d "x" -f1,2 --output-delimiter=" " )
TARGETWIDTH=480
(( TARGETHEIGHT=480 * ${SIZES[1]} / ${SIZES[0]} ))
if [[ $TARGETHEIGHT > 270 ]]
then
TARGETHEIGHT=270
fi
if [[ $(( TARGETWIDTH % 2 )) = 1 ]]
then
(( TARGETWIDTH++ ))
fi
if [[ $(( TARGETHEIGHT % 2 )) = 1 ]]
then
(( TARGETHEIGHT++ ))
fi
SIZE="${TARGETWIDTH}x${TARGETHEIGHT}"
ffmpeg -i "$FILE_AVI" -threads 8 -vcodec libx264 -s $SIZE -b 900k -acodec libfaac -ar 44100 -ab 128k -async 1 -ac 2 -f mp4 "_$FILE_MP4"
qt-faststart "_$FILE_MP4" "$FILE_MP4"
rm "_$FILE_MP4"
и с радостью его запускаем:
/home/cnvrt /home/video test.avi test.mp4
21.08.2009, 22:42 Рубрика: other
- 21.08.2009 - Конвертация видео файлов на сервере
|
Мельников (02.01.2012, 16:57:45) пишет: |
|
максим (18.10.2011, 18:58:27) пишет: |
|
nemesis
(25.03.2011, 21:28:25) пишет: |
|
Руслан (14.10.2010, 06:48:32) пишет: |
|
Ответ:
|
- конвертация avi в flv на сервере
- конвертация видео на сервере
- php конвертация видео
- ffmpeg
- ffmpeg ширина
- php сжатие и конвертация видео на сервере
- конвертация видео php
- конвертирование видео на сервере
- vlc
- vlc
- ffmpeg конвертация на сервер
- vlc конвертировать
- PHP
- ffmpeg async
- php конвертирование видео
- ffmpeg высота
- vlc
- ffmpeg видео по ширине
- ffmpeg
- кодирование видео на сервере
- vlc
- конвертирование видео php
- конвертировать VLC в AVI
- ffmpeg vsync
- ffmpeg конвертирование видео
- как правильно конвертировать видео
- FFmpeg php .mp4 .flv
- ffmpeg avi to mp4
- как конвертировать в vlc
- php конвертировать видео
- ffmpeg указать ширину width
- конвертировать файлы на сервере flv
- Сервер конвертирования видео
- ffmpeg конвертация видео
- конвертировать vlc
- vlc mp4
- как конвертировать VLC в AVI
- vlc конвертация
- vlc
- flv переместить мета данніе
- php ffmpeg mp4
- vlc
- avi vlc
- ffmpeg php конвертация
- c
- ffmpeg php конвертирование видео
- конвертировать видео на сервере
- ffmpeg qt
- Конвертация видео на php