ffmpeg -> утилита для кодирования видео, это набор свободных библиотек, позволяющий кодировать видео в различные форматы. Flash поддерживает чтение видео в стандартах H.263 (FLV) и H.264 (MP4, MOV и т.д.). Рассмотрим, как с помощью FFmpeg кодировать видео в эти форматы:
* ffmpeg – утилита командной строки для конвертирования формата
видеофайла. С её помощью можно также захватывать видео в реальном
времени с TV-карты;
* ffserver – HTTP (RTSP в настоящее время разрабатывается) потоковый
сервер для видео/радиовещания;
* ffplay – простой медиаплеер, основанный на SDL и библиотеках FFmpeg;
* libavcodec – библиотека, в которой содержатся все аудио/видеокодеки.
Большинство кодеков были разработаны “с нуля” для обеспечения
наилучшей производительности;
* libavformat – библиотека мультиплексирования и демультиплексирования
в медиаконтейнер;
* libavutil – вспомогательная библиотека, содержащая стандартные,
общие подпрограммы для различных компонентов ffmpeg. Включает в себя:
adler32, crc, md5, sha1, lzo-декомпрессор, Base64-кодер/декодер,
des-шифратор/дешифратор rc4-шифратор/дешифратор и
aes-шифратор/дешифратор;
* libpostproc – библиотека, содержащая стандартные подпрограммы
обработки видео;
* libswscale – библиотека, предназначенная для масштабирования видео.
* libavfilter – является заменой vhook, которая позволяет изменять
видеопоток между энкодером и декодером на лету.
Кодирование – это преобразование информации из одного формата в другой.
1) снимем CD диск (т.е. преобразуем с нашего диска 9 дорожку)
mplayer -fs cdda://9 -ao -pcm:file=track9.wav
2) снимем DVD диск (т.е. преобразуем с нашего диска 9 дорожку)
mplayer dvd://9 -ao -pcm:file=track9.wav
3) перекодируем во FLAC
flack track9.wav -> в этоге у меня получился файл, размер которого при стандартной степени сжатия составит около половины WAV
уровни сжатия: -0 (быстрое сжатие) -8 (максимальное сжатие) -q10 (максимальное сжатие)
3) утилитой lame
lame -h -V 6 track9.wav track9.mp3 -> создастся Mp3 с переменным битрейком. Доступны уровни от 0 до 9: чем меньше число, тем больше файл и лучше качество.
4) Постоянный битрейк, или CBR не всегда отдает этим битам должное, вот почему лучше использовать постоянный битрейк. При этом простые участки, например, с тишиной, записываются на минимальной (низком) битрейке, а при сложном звучании соответственно подрастает.
Алгоритмы сжатия с потерей данных [lossy] приводят к необратимым потерям информации. (пример: mp3,jpeg,ogg)
Полностью сберечь всю информацию можно, применяя алгоритмы сжатия без потерь [lostless]. (пример: zip,png — в музыке: FLAC (Free Lossless Audio Codec = свободный аудиокодек для сжатия без потери данных))
5) получение информации о файлах
ffmpeg -i green.avi
(Пример: )
keiz@mobikulum:~/test_avi$ ffmpeg -i MVI_4466.AVI
FFmpeg version r11872+debian_0.svn20080206-18, Copyright (c) 2000-2008 Fabrice Bellard, et al.
configuration: –enable-gpl –enable-libfaad –enable-pp –enable-swscaler –enable-x11grab –prefix=/usr –enable-libgsm –enable-libtheora –enable-libvorbis –enable-pthreads –disable-strip –enable-libdc1394 –enable-shared –disable-static
libavutil version: 49.6.0
libavcodec version: 51.50.0
libavformat version: 52.7.0
libavdevice version: 52.0.0
built on Jul 2 2009 03:48:11, gcc: 4.3.2
Input #0, avi, from ‘MVI_4466.AVI’:
Duration: 00:00:32.0, start: 0.000000, bitrate: 14590 kb/s
Stream #0.0: Video: mjpeg, yuvj422p, 640×480 [PAR 0:1 DAR 0:1], 30.00 tb(r)
Stream #0.1: Audio: pcm_s16le, 44100 Hz, mono, 705 kb/s
Must supply at least one output file
:)
Смотреть желательно со строки [Stream] -> здесь приводятся сведения о видео- и аудио-потоках, содержащихся в исследуемых файлах.
Эти сведения необходимо для правильной оценки кодируемой информации. Порой имеющиеся файлы можно оставить как есть или перенести в другой формат. Это должно войти в привычку.
6) Если хотим просматривать своё видео в формате PAL (PAL
Основной телевизионный стандарт в Европе (Россия, Франция – SECAM). Используется также в Великобритании, Австралии и Южной Африке. Название происходит от “Phase Alternate Line”. Стандарт PAL использует метод добавления цвета к телевизионному сигналу черного и белого цвета. Создает на экране 625 строк с частотой 25 кадров в секунду.)
ffmpeg -i my_vid.avi -target pal-vcd anoncer_pal.mpg
ffmpeg -i my_vid.avi -target dv anoncer_dv.mpg
7) Формат FLV предназначен для потокового видео, однако существует
возможность использовать его и для локального хранения и
воспроизведения видео.
сконвертируем AVI-файл в FLV-формат
ffmpeg -i uploaded_file.avi output_file.flv
-b bitrate -> битрейт, параметр определяющий качество, по умолчанию 200кбит/с
-t duration -> продолжительность проигрывания
-ss start_pos -> смещение от начала исходного видеофрагмента (можно задать как количество секунд, так и время в формате ЧЧ:ММ:СС.Д)
уберем первые несколько секунд ролика, которое, не несут смысловой нагрузки (пример 16секундо и зададим битрейт в 512кбит/с)
ffmpeg -i uploaded_file.avi -ss 00:00:16:0 -b 512k output_file.flv
8) Формат 3GP (сокращение от англ. 3rd generation (mobile) phone) – это
видеофайлы для мобильных телефонов третьего поколения. Некоторые
современные мобильные телефоны (не обязательно 3G) имеют функции записи
и просмотра аудио и видео в формате 3GP. Этот формат – упрощённая
версия ISO 14496-1 Media Format, который похож на MOV, используемый
QuickTime. 3GP сохраняет видео как MPEG-4 или H.263. Аудио сохраняется
в форматах AMR-NB или AAC-LC. Готовые видеоролики в формате имеют малый
размер по сравнению с другими форматами видео, но, к сожалению, за счет
жертвы качеством.Чтобы произвести конвертацию файла в формат 3GP, нужно проделать почти
то же самое, что и с конвертацией файла в FLV-формат, но только задать
соответствующее расширение выходного файла и дополнительные настройки
кодеков.
узнаем установлен ли у нас кодес aac:
ffmpeg -formats | grep aac
нужные: установить libfaac, libx264
ffmpeg -i input_file.avi -s qcif -vcodec h263 -acodec aac -ac 1 -ar 8000 -r 25 -ab 32 -y out_file.3gp
Обратное преобразование в оригинальный avi-файл:
ffmpeg -i input_clip.3gp -f avi -vcodec xvid -acodec mp3 -ar 22050 output_file.avi
9) MPEG-4 – это международный стандарт, используемый преимущественно для
сжатия цифрового аудио и видео.
Кодирование в H.264:
ffmpeg -i input_file.avi -vcodec h264 -threads 0 -r 25 -g 50 -b 5000k -bt 500k -acodec mp3 -ar 44100 -ab 64k out_file.mp4
10) вытаскиваем саундтрек из фильма или аудиодорожки
а) получаем сведения о файле
б) определяем параметры звуковой дорожки
в) узнаем формат кодирования звука в требуемом файле
пример, звук в нашем файле идентифицируется так:
Stream #0.1:Audio: mp3, 44100Hz, stereo, s16, 80kb/s
теперь извлекаем звук из видеоролика
ffmpeg -i input_file.flv -vn -acodec copy soudtrack.mp3
-vn -> указываем что нам не нужно обрабатывать видео
copy -> следует кодировать выходной файл тем же самым кодеком, которым он расходируется.
теперь извлекаем аудио из AVI в высоким качеством звуковой дорожки для записи: (если понравилась какая либо музыка будь-то в фильме или клипе)
ffmpeg -i input_file.avi -vn -acodec pcm_s16le -ar 44100 -ac 2 output_file.wav (несжатая двухканальная аудиозапись с частотой дискретизации 44100Гц и 16-битным качеством)
||
ffmpeg -i input_file.wmw -vn -acodec copy output_file.wma
преобразуем wma в mp3
mplayer -quiet -vo null -vc dummy -af volume-0,resample=44100:0:1 -ao pcm:waveheader:file=output.wav output.wma lame -V0 -h -b 192 –vbr-new output.wav output.mp3
11) удаляем аудиодорожку (ненормативная лексика) из ролика, т.е. запись остается без аудиосодержимого.
ffmpeg -i input_censored_file.flv -an -vcodec copy output_censored_file.flv
-an -> не обрабатываем звук
12) сделаем маленькое превью изображения кадра, чтобы заинтересовать посетителя и дать предварительную информацию о содержимом. (очень удобно и прикольно)
ffmpeg -i video_input_file.flv -an -ss 30 -vframes 1 -s 340.180 -y -f mjpeg screenshot.jpg (создаем графический файл в формате JPEG, взяв кадр на 30-й секунде)
анимированное превью в формате GIF (укажем количество кадров, цветов и формат выходного файла)(можно делать прикольные аватарки)
ffmpeg -i input_file.avi -an -pix_fmt rgb24 -ss 40 -vframes 64 -s 128.128 -loop_output 0 -f gif -y screenshot.gif
13) разложение видеоряда на кадры (глупая затея но весело)
ffmpeg -i video.mpg image%d.jpg
Поддерживаемые графические форматы: PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF, SGI
14) склеивание изображений в видеоряд
ffmpeg -f image2 -i image%d.jpg video.mpg
15) кодирование видеоряда для Apple iPod/iPhone
ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320×180 -title X final_video.mp4
ffmpeg -i some_movie.avi -f mp4 -vcodec libxvid -maxrate 1000 \
-qmin 3 -qmax 5 -bufsize 4096 -g 300 -acodec libfaac \
-mbd 2 -s 320×240 -ab 128 -b 400 some_movie.mp4
ffmpeg -i some_movie.avi -f mp4 -vcodec xvid -maxrate 1000 \
-qmin 3 -qmax 5 -bufsize 4096 -g 300 -acodec aac \
-mbd 2 -s 320×180 -padtop 30 -padbottom 30 \
-ab 128 -b 400 some_movie.mp4
Hiqh Quality 640×352 – формат .flv, для публикации на сайте
for f in *.avi; do ffmpeg -y -threads 8 -i $f -s 640×352 -aspect 16:9 -r 24 -b 360k -bt 416k -vcodec libx264 -pass 1 -vpre fastfirstpass -an $f.flv && ffmpeg -y -threads 8 -i $f -s 640×352 -aspect 16:9 -r 24 -b 360k -bt 416k -vcodec libx264 -pass 2 -vpre hq -acodec libfaac -ac 2 -ar 44100 -ab 64k $f.flv; done
HD 720p (2mbps) – формат .flv, для публикации на сайте
for f in *.avi; do ffmpeg -y -threads 8 -i $f -s 1280×720 -aspect 16:9 -r 24 -b 1536k -bt 1792k -vcodec libx264 -pass 1 -vpre fastfirstpass -an $f.flv && ffmpeg -y -threads 8 -i $f -s 1280×720 -aspect 16:9 -r 24 -b 1536k -bt 1792k -vcodec libx264 -pass 2 -vpre hq -acodec libfaac -ac 2 -ar 44100 -ab 128k $f.flv; done
iPhone 480×272 – формат .mp4
for f in *.avi; do ffmpeg -y -threads 8 -i $f -s 480×272 -aspect 16:9 -r 24 -vcodec libx264 -pass 1 -b 360k -bt 416k -vpre iphone -f mp4 -an $f.mp4 && ffmpeg -y -threads 8 -i $f -s 480×272 -aspect 16:9 -r 24 -vcodec libx264 -pass 2 -b 360k -bt 416k -vpre iphone -f mp4 -acodec libfaac -ac 2 -ar 44100 -ab 64k $f.mp4; done
‘-i‘ – source file (в нашем случае мы используем batch-конструкцию, для перекодирования очереди .avi-файлов;
‘-threads‘ – количество ядер компьютера;
‘-vpre‘ отвечает за выбор preset;
‘-y‘ – overwrite;
‘-s‘ – размер видео;
‘-aspect‘ – соотношение сторон;
‘-vcodec‘ – кодек (взят libx254);
‘-pass 1‘, и ‘-pass 2‘ – используем 2 прохода кодирования, для получения лучшего качества;
‘-r‘ – frame rate;
‘-b‘ – video bitrate;
‘-bt‘ – максимальная bitrate чувствительность – bitrate tolerance (максимально допустимый bitrate);
‘-f‘ – формат контейнера;
‘-acodec‘ – аудио-кодек (у нас faac);
‘-an‘ – блокировка звука, для ускорения кодирования мы не кодируем аудио в pass 1;
‘-ac‘ – количество каналов звука;
‘-ar‘ – частота звука в герцах;
‘-ab‘ – audio bitrate.
Остается пояснить конструкцию комманды
for f in *.РАСШИРЕНИЕ_ФАЙЛОВ; do ffmpeg -i $f -pass 1 ПАРАМЕТРЫ_ДЛЯ_PASS_1 ПРОМЕЖУТОЧНЫЙ_ФАЙЛ && ffmpeg -i $f ПАРАМЕТРЫ_ДЛЯ_PASS_2 КОНЕЧНЫЙ_ФАЙЛ; done
или
для всех переменны f в *.avi файлах; использовать ffmpeg с первыми параметрами и потом ffmpeg со вторыми параметрами; завершить исполнение
16) кодирование видеоряда для Sone PSP
ffmpeg -i source_video.avi -b 300 -s 320×240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_video.mp4
17) преобразование WAV in MP3
ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 vinal_video.mp3
18) узнать количество дорожек в целой группе фильмов
$ for f in *.avi; do echo -n “$f / ” ; mplayer -endpos 0 -vo null “$f” 2> /dev/null | grep “Audio stream found”|wc -l ; done
for f in *.avi ;do mencoder -alang ru -ovc copy -oac copy “$f” -o “$f.t” && mv “$f.t” “$f” ; done
19) избавиться от ненужных дорожек
for f in *.avi ;do mencoder -alang ru -ovc copy -oac copy “$f” -o “$f.t” && mv “$f.t” “$f” ; done
20) преобразование MKV видеофайлов в формат AVI
для начала нам нужно установитьв систему пакет mkvtoolnix, в него входит нужная нам утилита mkvextract
распаковываем mkv
mkvextract tracks input.mkv 1:temp_video.avi 2:temp_audio.ac3 2:output.srt
объединяем в avi
ffmpeg -i temp_audio.ac3 -i temp_video.avi -vcodec copy -acodec copy output.avi
! Если ffmpeg в процессе кодирования выдает ошибку и прекращает работу, делаем так:
mencoder temp_video.avi -audiofile temp_audio.ac3 -ovc copy -oac copy -o output.avi
||
mencoder input.mkv -ovc copy -oac copy -of avi -o output.avi
||
mencoder input.mkv -oac mp3lame -lameopts vbr=3 -ovc xvid -xvidencopts fixed_quant=4 -of avi -o output.avi
Если возникает ошибка “Too many audio packets in the buffer”, то можно
попробовать двухэтапную схему:
Выдергиваем несжатую аудиодорожку:
mplayer input.mkv -ao pcm:fast:file=audio.wav -vc null -vo null
Перекодируем видео, подставив звук через “-audiofile audio.wav”:
mencoder input.mkv -ffourcc divx -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=6000 \
-audiofile audio.wav -oac mp3lame -lameopts vbr=3 -o output.avi
Для конвертации для просмотра на КПК нужно уменьшить vbitrate до 400 и добавить
опции масштабирования “-sws 2 -vf scale=352:-3”.
ffmpeg -i <your_input.mkv> -sameq -vcodec libx264 -ab 128k -acodec libfaac -r 23.98 <your_output.mp4>
Unknown encoder ‘libx264’
keiz@ekz:~/mkv_avi$ sudo apt-cache search libx264
libx264-85 – x264 video coding library
libx264-dev – development files for libx264
keiz@ekz:~/mkv_avi$
mencoder input.mkv -oac copy -ovc copy -of avi -o output.avi
ffmpeg -i 17.mkv -vcodec ffv1 -an 17.avi
(MKV IN AVI)
ffmpeg -i film.mkv -vcodec copy -acodec copy film.avi