Download FFmpeg
FFmpeg only provides source code. Below are some links that provide it already compiled and ready to go.
Linux Packages
Linux Static Builds
Windows EXE Files
macOS
Get the Sources
You can retrieve the source code through Git by using the command:
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
Cannot access Git or wish to speed up the cloning and reduce the bandwidth usage?
FFmpeg has always been a very experimental and developer-driven project. It is a key component in many multimedia projects and has new features added constantly. Development branch snapshots work really well 99% of the time so people are not afraid to use them.
Git Repositories
Since FFmpeg is developed with Git, multiple repositories from developers and groups of developers are available.
Release Verification
All FFmpeg releases are cryptographically signed with our public PGP key and should be verified for authenticity.
pub rsa2048 2011-04-26 [SC] FCF986EA15E6E293A5644F10B4322F04D67658D8 uid [ full ] FFmpeg release signing key sub rsa2048 2011-04-26 [E]
-
Import our public key into your local keyring:
$ curl https://ffmpeg.org/ffmpeg-devel.asc | gpg --import
$ gpg --verify ffmpeg-4.3.2.tar.xz.asc ffmpeg-4.3.2.tar.xz gpg: Signature made Sun 21 Feb 2021 06:35:15 AEST gpg: using RSA key FCF986EA15E6E293A5644F10B4322F04D67658D8 gpg: issuer "ffmpeg-devel@ffmpeg.org" gpg: Good signature from "FFmpeg release signing key " [full]
Releases
Approximately every 6 months the FFmpeg project makes a new major release. Between major releases point releases will appear that add important bug fixes but no new features. Note that these releases are intended for distributors and system integrators. Users that wish to compile from source themselves are strongly encouraged to consider using the development branch (see above), this is the only version on which FFmpeg developers actively work. The release branches only cherry pick selected changes from the development branch, which therefore receives much more and much faster bug fixes such as additional features and security patches.
FFmpeg 6.1 «Heaviside»
6.1 was released on 2023-11-11. It is the latest stable FFmpeg release from the 6.1 release branch, which was cut from master on 2023-10-29.
It includes the following library versions:
libavutil 58. 29.100 libavcodec 60. 31.102 libavformat 60. 16.100 libavdevice 60. 3.100 libavfilter 9. 12.100 libswscale 7. 5.100 libswresample 4. 12.100 libpostproc 57. 3.100
FFmpeg 6.0.1 «Von Neumann»
6.0.1 was released on 2023-11-10. It is the latest stable FFmpeg release from the 6.0 release branch, which was cut from master on 2023-02-19.
It includes the following library versions:
libavutil 58. 2.100 libavcodec 60. 3.100 libavformat 60. 3.100 libavdevice 60. 1.100 libavfilter 9. 3.100 libswscale 7. 1.100 libswresample 4. 10.100 libpostproc 57. 1.100
FFmpeg 5.1.4 «Riemann»
5.1.4 was released on 2023-11-10. It is the latest stable FFmpeg release from the 5.1 release branch, which was cut from master on 2022-07-13.
It includes the following library versions:
libavutil 57. 28.100 libavcodec 59. 37.100 libavformat 59. 27.100 libavdevice 59. 7.100 libavfilter 8. 44.100 libswscale 6. 7.100 libswresample 4. 7.100 libpostproc 56. 6.100
FFmpeg 4.4.4 «Rao»
4.4.4 was released on 2023-04-12. It is the latest stable FFmpeg release from the 4.4 release branch, which was cut from master on 2021-04-08.
It includes the following library versions:
libavutil 56. 70.100 libavcodec 58.134.100 libavformat 58. 76.100 libavdevice 58. 13.100 libavfilter 7.110.100 libswscale 5. 9.100 libswresample 3. 9.100 libpostproc 55. 9.100
FFmpeg 4.3.6 «4:3»
4.3.6 was released on 2023-04-16. It is the latest stable FFmpeg release from the 4.3 release branch, which was cut from master on 2020-06-08.
It includes the following library versions:
libavutil 56. 51.100 libavcodec 58. 91.100 libavformat 58. 45.100 libavdevice 58. 10.100 libavfilter 7. 85.100 libswscale 5. 7.100 libswresample 3. 7.100 libpostproc 55. 7.100
FFmpeg 4.2.9 «Ada»
4.2.9 was released on 2023-04-21. It is the latest stable FFmpeg release from the 4.2 release branch, which was cut from master on 2019-07-21.
It includes the following library versions:
libavutil 56. 31.100 libavcodec 58. 54.100 libavformat 58. 29.100 libavdevice 58. 8.100 libavfilter 7. 57.100 libswscale 5. 5.100 libswresample 3. 5.100 libpostproc 55. 5.100
FFmpeg 4.1.11 «al-Khwarizmi»
4.1.11 was released on 2023-06-07. It is the latest stable FFmpeg release from the 4.1 release branch, which was cut from master on 2018-11-02.
It includes the following library versions:
libavutil 56. 22.100 libavcodec 58. 35.100 libavformat 58. 20.100 libavdevice 58. 5.100 libavfilter 7. 40.101 libswscale 5. 3.100 libswresample 3. 3.100 libpostproc 55. 3.100
FFmpeg 3.4.13 «Cantor»
3.4.13 was released on 2023-06-12. It is the latest stable FFmpeg release from the 3.4 release branch, which was cut from master on 2017-10-11.
It includes the following library versions:
libavutil 55. 78.100 libavcodec 57.107.100 libavformat 57. 83.100 libavdevice 57. 10.100 libavfilter 6.107.100 libavresample 3. 7. 0 libswscale 4. 8.100 libswresample 2. 9.100 libpostproc 54. 7.100
FFmpeg 2.8.22 «Feynman»
2.8.22 was released on 2023-10-29. It is the latest stable FFmpeg release from the 2.8 release branch, which was cut from master on 2015-09-05. Amongst lots of other changes, it includes all changes from ffmpeg-mt, libav master of 2015-08-28, libav 11 as of 2015-08-28.
It includes the following library versions:
libavutil 54. 31.100 libavcodec 56. 60.100 libavformat 56. 40.101 libavdevice 56. 4.100 libavfilter 5. 40.101 libavresample 2. 1. 0 libswscale 3. 1.101 libswresample 1. 2.101 libpostproc 53. 3.100
FFmpeg + iPhone
Всем доброго времени суток.
Кто делал конвертацию видео для стриминга на мобильные устройства — не подскажете работающую строку для ffmpeg-а? В интернете полно вариантов — но все они отличаются, и какой из них реально работает — не знаю.
Конечная цель — получить один файл, который можно будет смотреть и на iPhone, и на iPad без сильных потерь качества.
- Вопрос задан более трёх лет назад
- 5288 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 3
ffmpeg -i file1.avi -vcodec libx264 -vpre libx264-ipod640 -b 500k -bt 500k -acodec libfaac -ab 96k -ac 2 -s 800×480 -threads 8 -g 24 -r 24 out.mp4
и мету вперед
qt-faststart out.mp4 outq.mp4
либо
mp4box -add out.mp4 outq.mp4
Ответ написан более трёх лет назад
Нравится 9 5 комментариев
AusTiN @AusTiN Автор вопроса
Пробую! Спасибо. Отпишусь, как закончится конвертация:)
AusTiN @AusTiN Автор вопроса
Взлетело, спасибо 🙂 Но качество хотелось бы повыше — видны артефакты на изображении…
500k увеличивайте до приемливого для себя
А универсальный способ вогнать субтитры еще не придумали? Конвертация srt/ass очень часто валится с ошибкой.
А как вогнать? Наложить на видео поверх чтоли? Мне кажется в этом мало смысла, лучше плеер поискать который отдельный srt файл применит.
Никто вам не напишет хорошей строки, потому, что половина человек не знает, что значит какая опция, другая половина слушает MP3 в 192 Кб/с и смотрит фильмы с любительской озвучкой или русскими субтитрами и ее это устраивает.
И вы будете на хорошем высокодетальном экране смотреть на джипеговские квадратики. А бедный Стив Джобс — вертеться в гробу.
Единственный способ — узнать значение всех опций программы и сделать тесты с разным качеством и кодеками, после чего выбрать подходящее.
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Кратко о себе
Я лично делаю так под айпад (ну не по новый), под айфон тоже должно быть хорошо видно, но не пробовал
ffmpeg -i $i.mkv -acodec aac -strict experimental -ab 128k -ac 2 -vcodec libx264 -b 1200k -s 1280×720 -r 30 -threads 0 $i.mp4
Ответ написан более трёх лет назад
Нравится 1 2 комментария
AusTiN @AusTiN Автор вопроса
Почему используете экспериментальный кодек aac (а не libfaac, как рекомендует сам ffmpeg)?
Как на мой взгляд — чуть шустрее
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- JavaScript
- +3 ещё
Как вставить видео с ютуба с локальным превью?
- 1 подписчик
- час назад
- 7 просмотров
iridiumtechru.github.io:$ cd ~
Сборка ffmpeg с libx264 (windows, ios, osx, android)
17 Apr 2018
Как собрать библиотеку с поддержкой кодека h264 на большинстве платформ.
Зачем?
Библиотеку ffmpeg я использую для воспроизведения потока с камер. Понадобилось сделать SIP телефонию с поддержкой h264. Для этого нужно было пересобрать все имеющиеся библиотеки. Все файлы для сборки либо потерялись, либо были нерабочими. Пришлось пройти этот ад снова.
Исходники
FFmpeg
Я использовал версию 2.8, которая лежала у меня с незапамятных времен. Можно использовать версию старше.
- http:
- git clone -b release/2.8 https://github.com/FFmpeg/FFmpeg.git
x264
- ftp
- git clone http://git.videolan.org/git/x264.git
Cборка x264
Первым делом собираем libx264. Если не требуется переходим сразу к сборке FFmpeg
Windows
- Ставим VS Studio 2015 или выше. Минимальная версия VS2013 u2.
- Ставим MSYS2.
- Открываем консоль разработчика. Пуск/Visual Studio (Version)/Developer Command Promt. В ней будут доступны пути до компилятора и компоновщика.
- Из открытой консоли открываем консоль MSYS2.
- C:\msys64\msys2_shell.cmd -mingw64 -full-path
- mingw32 или mingw64 в зависимости от архитектуры
- full-path — позволяет увидеть путь до компилятора (можно раскомментировать строчку set MSYS2_PATH_TYPE=inherit в msys2_shell.cmd)
- Переходим в папку с исходниками libx264.
CC=cl ./configure --enable-static --prefix=$PWD>/installed make make install
iOS
- Переходим в папку с исходниками libx264. Это будет корень LIBX264_ROOT.
- Сборка будет происходить в папке [LIBX264_ROOT]/Projects/iOS/. Создаем папку mkdir -p Projects/iOS .
- Переходим в папку проекта.
- Создаем build_x264.sh. Копируем в него скрипт.
- Запускаем сборку библиотек: sh ./build_x264.sh .
- Файлы будут лежать в [LIBX264_ROOT]/Projects/iOS/Temp.
- Запускаем сборку FAT-либок. sh ./build_x264.sh lipo
- FAT-либка будут лежать в [LIBX264_ROOT]/lib/ios.
build_x264.sh
#!/bin/sh CONFIGURE_FLAGS="--enable-static --enable-pic --disable-cli" ARCHS="arm64 armv7 armv7s" #x86_64 i386 # folders CWD=$(pwd) TEMP_DIR=$CWD/Temp mkdir -p $TEMP_DIR # Go to ROOT cd ../.. WORK_DIR=$(pwd) # output dir FAT=$WORK_DIR/lib/ios mkdir -p $FAT COMPILE="y" LIPO="y" #echo "temp dir=$TEMP_DIR" #echo "work dir=$WORK_DIR" # make this files executable chmod +x $WORK_DIR/version.sh chmod +x $WORK_DIR/tools/gas-preprocessor.pl chmod +x $WORK_DIR/config.sub chmod +x $WORK_DIR/config.guess if [ "$*" ] then if [ "$*" = "lipo" ] then # skip compile COMPILE= else ARCHS="$*" if [ $# -eq 1 ] then # skip lipo LIPO= fi fi fi if [ "$COMPILE" ] then #CWD=$PWD for ARCH in $ARCHS do echo "building $ARCH. " mkdir -p "$TEMP_DIR/$ARCH" CFLAGS="-arch $ARCH" ASFLAGS= if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ] then PLATFORM="iPhoneSimulator" CPU= if [ "$ARCH" = "x86_64" ] then CFLAGS="$CFLAGS -mios-simulator-version-min=7.0" HOST= else CFLAGS="$CFLAGS -mios-simulator-version-min=5.0" HOST="--host=i386-apple-darwin" fi else PLATFORM="iPhoneOS" if [ $ARCH = "arm64" ] then HOST="--host=aarch64-apple-darwin" XARCH="-arch aarch64" else HOST="--host=arm-apple-darwin" XARCH="-arch arm" fi CFLAGS="$CFLAGS -fembed-bitcode -mios-version-min=7.0" ASFLAGS="$CFLAGS" fi XCRUN_SDK=`echo $PLATFORM | tr '[:upper:]' '[:lower:]'` CC="xcrun -sdk $XCRUN_SDK clang" if [ $PLATFORM = "iPhoneOS" ] then export AS="$WORK_DIR/tools/gas-preprocessor.pl $XARCH -- $CC" else export -n AS fi CXXFLAGS="$CFLAGS" LDFLAGS="$CFLAGS" CC=$CC ./configure \ $CONFIGURE_FLAGS \ $HOST \ --extra-cflags="$CFLAGS" \ --extra-asflags="$ASFLAGS" \ --extra-ldflags="$LDFLAGS" \ --prefix="$TEMP_DIR/$ARCH" || exit 1 make clean make -j3 install || exit 1 done fi if [ "$LIPO" ] then echo "building fat binaries. " set - $ARCHS THIN=$TEMP_DIR echo "$THIN" cd $THIN/$1/lib for LIB in *.a do cd $WORK_DIR echo lipo -create `find $THIN -name $LIB` -output $FAT/$LIB 1>&2 lipo -create `find $THIN -name $LIB` -output $FAT/$LIB done cd $WORK_DIR #cp -rf $THIN/$1/include $WORK_DIR fi
OSX
- Алгоритм сборки для OSX совпадает с iOS. Немного отличается скрипт и рабочая папка [LIBX264_ROOT]/Projects/OSX/
- На моей машине для i386 сразу создавалась FAT-либка. Я просто копировал ее в [LIBX264_ROOT]/lib/osx/
build_x264.sh
#!/bin/sh CONFIGURE_FLAGS="--enable-static --enable-pic --disable-cli --disable-asm" ARCHS="x86_64 i386" # # directiries CWD=$(pwd) TEMP_DIR=$CWD/Temp mkdir -p $TEMP_DIR cd ../.. WORK_DIR=$(pwd) FAT=$WORK_DIR/lib/osx mkdir -p $FAT COMPILE="y" LIPO="y" echo "temp dir=$TEMP_DIR" echo "work dir=$WORK_DIR" chmod +x $WORK_DIR/version.sh chmod +x $WORK_DIR/tools/gas-preprocessor.pl chmod +x $WORK_DIR/config.sub chmod +x $WORK_DIR/config.guess if [ "$*" ] then if [ "$*" = "lipo" ] then # skip compile COMPILE= else ARCHS="$*" if [ $# -eq 1 ] then # skip lipo LIPO= fi fi fi if [ "$COMPILE" ] then #CWD=$PWD for ARCH in $ARCHS do echo "building $ARCH. " mkdir -p "$TEMP_DIR/$ARCH" CFLAGS="-arch $ARCH" ASFLAGS= PLATFORM="macosx" XCRUN_SDK=`echo $PLATFORM | tr '[:upper:]' '[:lower:]'` CC="xcrun -sdk $XCRUN_SDK clang" CXXFLAGS="$CFLAGS" LDFLAGS="$CFLAGS" CC=$CC ./configure \ $CONFIGURE_FLAGS \ $HOST \ --extra-cflags="$CFLAGS" \ --extra-asflags="$ASFLAGS" \ --extra-ldflags="$LDFLAGS" \ --prefix="$TEMP_DIR/$ARCH" || exit 1 make clean make -j3 install || exit 1 done fi # TODO i386 makes fat lib. need only cp Temp/i386/lib/*.a $WORK_DIR/lib/osx if [ "$LIPO" ] then echo "building fat binaries. " cp Temp/i386/lib/*.a $WORK_DIR/lib/osx #set - $ARCHS #THIN=$TEMP_DIR #echo "$THIN" #cd $THIN/$1/lib #for LIB in *.a #do # cd $WORK_DIR # echo lipo -create `find $THIN -name $LIB` -output $FAT/$LIB 1>&2 # lipo -create `find $THIN -name $LIB` -output $FAT/$LIB #done #cd $WORK_DIR #cp -rf $THIN/$1/include $WORK_DIR fi
Android
- Ставим Cygwin ( Mingw,MSYS2 ).
- Ставим Android NDK. Раньше качался отдельно, сейчас только через SDK Manager в Android Studio.
- Открываем консоль Cygwin.
- Переходим в папку с исходниками cd /cygdrive/// .
- Создаем папку mkdir -p Projects/Android .
- cd Projects/Android
- Создаем build_x264.sh. Копируем в него скрипт.
- Правим переменные NDK, SYSROOT, TOOLCHAIN, ARCH.
- Запускаем сборку библиотек: sh ./build_x264.sh .
build_x264.sh
#!/bin/sh NDK=C:/Users/UserName/AppData/Local/Android/sdk/ndk-bundle SYSROOT=$NDK/platforms/android-16/arch-arm/ TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64 ARCH=armeabi-v7a WORK_DIR=$(pwd) TEMP_DIR=$WORK_DIR/temp ROOT_DIR=$WORK_DIR/../.. PREFIX=$TEMP_DIR/$ARCH delete() < echo "================== Deleting libs" rm ./lib/android/*.a >copy_libs() < echo "================== Copy libs" OUT_DIR=$ROOT_DIR/lib/android/$ARCH mkdir -p $OUT_DIR cp $PREFIX/lib/*.a $OUT_DIR >build_armv7() < ./configure \ --prefix=$PREFIX \ --enable-static \ --enable-pic \ --host=arm-linux \ --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ --sysroot=$SYSROOT make clean make make install >cd ../.. echo $(pwd) build_armv7 copy_libs
Cборка FFmpeg
Windows
- Ставим VS Studio 2015 или выше. Минимальная версия VS2013 u2.
- Ставим MSYS2.
- Открываем консоль разработчика. Пуск/Visual Studio (Version)/Developer Command Promt. В ней будут доступны пути до компилятора и компоновщика.
- Из открытой консоли открываем консоль MSYS2.
- C:\msys64\msys2_shell.cmd -mingw64 -full-path
- mingw32 или mingw64 в зависимости от архитектуры
- full-path — позволяет увидеть путь до компилятора (можно раскомментировать строчку set MSYS2_PATH_TYPE=inherit в msys2_shell.cmd)
- Переходим в папку с исходниками ffmpeg.
./configure --toolchain=msvc --disable-shared --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-avdevice --disable-symver --enable-libx264 --enable-gpl --prefix=$PWD>/installed --extra-cflags="-IC:\\x264\\installed\\include" --extra-ldflags="-LC:\\x264\\installed\\lib"
- –disable-shared — статические библиотеки, –disable-static — динамические.
- –disable-asm — если будет ругаться на ассемблерные вставки. Я собирал без него на vs2015. Если использовать vs2010, то придется потанцевать с yasm(nasm), c99conv, c99wrap.
- –arch=x86_64 — если требуется собрать x64 архитектуру. Должен быть MSYS64 и libx264 с x64 архитектурой.
- –prefix — укажет папку куда выполнится make install.
- –extra-ldflags — не работает на win7. ругается на линковку libx264.a. Нужно перенести libx264 в корень ffmpeg, либо в temp папку, которую создает configure в корне при выполнении.
make make install
- если не использовать –prefix собраные либы будут лежать в подпапках рядом с исходниками.
iOS
- Переходим в папку с исходниками ffmpeg. Это будет корень FFMPEG_ROOT.
- Сборка будет происходить в папке [FFMPEG_ROOT]/Projects/iOS/. Создаем папку mkdir -p Projects/iOS .
- Переходим в папку проекта.
- Создаем build_ffmpeg.sh. Копируем в него скрипт.
- Правим пути до libx264 (если требуется).
- Запускаем сборку библиотек: sh ./build_ffmpeg.sh .
- Файлы будут лежать в [FFMPEG_ROOT]/Projects/iOS/Temp.
- Запускаем сборку FAT-либок. sh ./build_ffmpeg.sh lipo
- FAT-либка будут лежать в [build_ffmpeg]/lib/ios.
build_ffmpeg.sh
#!/bin/sh # ffmpeg_build.sh FFMPEG_SOURCE=ffmpeg-2.8 ARCHS="arm64 armv7s armv7" #x86_64 i386 CONFIGURE_FLAGS="--enable-cross-compile\ --disable-debug\ --disable-programs \ --disable-doc\ --disable-bzlib \ --enable-pic" # folders CWD=$(pwd) TEMP_DIR=$CWD/Temp mkdir -p $TEMP_DIR cd ../.. WORK_DIR=$(pwd) FAT=$WORK_DIR/lib/ios mkdir -p $FAT chmod +x ./configure chmod +x ./version.sh # absolute path to x264 library X264="$WORK_DIR/../x264/Project/iOS/Temp" echo "temp dir=$TEMP_DIR" echo "work dir=$WORK_DIR" echo "x264 dir=$X264" if [ "$X264" ] then CONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-gpl --enable-libx264" fi #echo "$CONFIGURE_FLAGS" COMPILE="y" LIPO="y" DEPLOYMENT_TARGET="7.0" if [ "$*" ] then if [ "$*" = "lipo" ] then # skip compile COMPILE= else ARCHS="$*" if [ $# -eq 1 ] then # skip lipo LIPO= fi fi fi if [ "$COMPILE" ] then # install dependences if [ ! `which yasm` ] then echo 'Yasm not found' if [ ! `which brew` ] then echo 'Homebrew not found. Trying to install. ' ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" \ || exit 1 fi echo 'Trying to install Yasm. ' brew install yasm || exit 1 fi if [ ! `which gas-preprocessor.pl` ] then echo 'gas-preprocessor.pl not found. Trying to install. ' (curl -L https://github.com/libav/gas-preprocessor/raw/master/gas-preprocessor.pl \ -o /usr/local/bin/gas-preprocessor.pl \ && chmod +x /usr/local/bin/gas-preprocessor.pl) \ || exit 1 fi # arch loop for ARCH in $ARCHS do echo "building $ARCH. " mkdir -p "$TEMP_DIR/$ARCH" #cd "$TEMP_DIR/$ARCH" CFLAGS="-arch $ARCH" if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ] then PLATFORM="iPhoneSimulator" CFLAGS="$CFLAGS -mios-simulator-version-min=$DEPLOYMENT_TARGET" else PLATFORM="iPhoneOS" CFLAGS="$CFLAGS -mios-version-min=$DEPLOYMENT_TARGET -fembed-bitcode" if [ "$ARCH" = "arm64" ] then EXPORT="GASPP_FIX_XCODE5=1" fi fi XCRUN_SDK=`echo $PLATFORM | tr '[:upper:]' '[:lower:]'` CC="xcrun -sdk $XCRUN_SDK clang" # force "configure" to use "gas-preprocessor.pl" (FFmpeg 3.3) if [ "$ARCH" = "arm64" ] then AS="gas-preprocessor.pl -arch aarch64 -- $CC" else AS="$CC" fi CXXFLAGS="$CFLAGS" LDFLAGS="$CFLAGS" if [ "$X264" ] then CFLAGS="$CFLAGS -I$X264/$ARCH/include" LDFLAGS="$LDFLAGS -L$X264/$ARCH/lib" fi if [ "$FDK_AAC" ] then CFLAGS="$CFLAGS -I$FDK_AAC/include" LDFLAGS="$LDFLAGS -L$FDK_AAC/lib" fi # build ./configure \ --target-os=darwin \ --arch=$ARCH \ --cc="$CC" \ --as="$AS" \ $CONFIGURE_FLAGS \ --extra-cflags="$CFLAGS" \ --extra-ldflags="$LDFLAGS" \ --prefix="$TEMP_DIR/$ARCH" \ || exit 1 make clean make -j3 install || exit 1 done fi if [ "$LIPO" ] then echo "building fat binaries. " #mkdir -p $FAT set - $ARCHS #CWD=`pwd` #cd $THIN/$1/lib #echo "==== $1" THIN=$TEMP_DIR echo "$THIN" cd $THIN/$1/lib/ for LIB in *.a do cd $WORK_DIR echo lipo -create `find $THIN -name $LIB` -output $FAT/$LIB 1>&2 lipo -create `find $THIN -name $LIB` -output $FAT/$LIB || exit 1 done cd $WORK_DIR cp -rf $THIN/$1/include $WORK_DIR fi
OSX
- Переходим в папку с исходниками ffmpeg. Это будет корень FFMPEG_ROOT.
- Сборка будет происходить в папке [FFMPEG_ROOT]/Projects/OSX/. Создаем папку mkdir -p Projects/OSX .
- Переходим в папку проекта.
- Создаем build_ffmpeg.sh. Копируем в него скрипт.
- Правим пути до libx264 (если требуется).
- Запускаем сборку библиотек: sh ./build_ffmpeg.sh .
- Файлы будут лежать в [FFMPEG_ROOT]/Projects/OSX/Temp.
- Запускаем сборку FAT-либок. sh ./build_ffmpeg.sh lipo
- FAT-либка будут лежать в [build_ffmpeg]/lib/osx.
build_ffmpeg.sh
#!/bin/sh FFMPEG_SOURCE=ffmpeg-2.8 ARCHS="x86_64 i386" # CONFIGURE_FLAGS="--enable-cross-compile\ --disable-debug\ --disable-programs \ --disable-doc\ --disable-bzlib \ --disable-asm \ --disable-vda \ --enable-pic" # folders CWD=$(pwd) TEMP_DIR=$CWD/Temp mkdir -p $TEMP_DIR cd ../.. WORK_DIR=$(pwd) FAT=$WORK_DIR/lib/osx mkdir -p $FAT chmod +x ./configure chmod +x ./version.sh # absolute path to x264 library X264="$WORK_DIR/../x264/Project/OSX/Temp" echo "temp dir=$TEMP_DIR" echo "work dir=$WORK_DIR" echo "x264 dir=$X264" if [ "$X264" ] then CONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-gpl --enable-libx264" fi #echo "$CONFIGURE_FLAGS" COMPILE="y" LIPO="y" DEPLOYMENT_TARGET="7.0" if [ "$*" ] then if [ "$*" = "lipo" ] then # skip compile COMPILE= else ARCHS="$*" if [ $# -eq 1 ] then # skip lipo LIPO= fi fi fi if [ "$COMPILE" ] then # install dependences if [ ! `which yasm` ] then echo 'Yasm not found' if [ ! `which brew` ] then echo 'Homebrew not found. Trying to install. ' ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" \ || exit 1 fi echo 'Trying to install Yasm. ' brew install yasm || exit 1 fi if [ ! `which gas-preprocessor.pl` ] then echo 'gas-preprocessor.pl not found. Trying to install. ' (curl -L https://github.com/libav/gas-preprocessor/raw/master/gas-preprocessor.pl \ -o /usr/local/bin/gas-preprocessor.pl \ && chmod +x /usr/local/bin/gas-preprocessor.pl) \ || exit 1 fi # arch loop for ARCH in $ARCHS do echo "building $ARCH. " mkdir -p "$TEMP_DIR/$ARCH" CFLAGS="-arch $ARCH" PLATFORM="macosx" XCRUN_SDK=`echo $PLATFORM | tr '[:upper:]' '[:lower:]'` CC="xcrun -sdk $XCRUN_SDK clang" CXXFLAGS="$CFLAGS" LDFLAGS="$CFLAGS" if [ "$X264" ] then CFLAGS="$CFLAGS -I$X264/$ARCH/include" LDFLAGS="$LDFLAGS -L$X264/$ARCH/lib" fi if [ "$FDK_AAC" ] then CFLAGS="$CFLAGS -I$FDK_AAC/include" LDFLAGS="$LDFLAGS -L$FDK_AAC/lib" fi # ./configure \ --target-os=darwin \ --arch=$ARCH \ --cc="$CC" \ --as="$AS" \ $CONFIGURE_FLAGS \ --extra-cflags="$CFLAGS" \ --extra-ldflags="$LDFLAGS" \ --prefix="$TEMP_DIR/$ARCH" \ || exit 1 make clean make -j3 install || exit 1 done fi if [ "$LIPO" ] then echo "building fat binaries. " #mkdir -p $FAT set - $ARCHS THIN=$TEMP_DIR echo "$THIN" cd $THIN/$1/lib/ for LIB in *.a do cd $WORK_DIR echo lipo -create `find $THIN -name $LIB` -output $FAT/$LIB 1>&2 lipo -create `find $THIN -name $LIB` -output $FAT/$LIB || exit 1 done cd $WORK_DIR cp -rf $THIN/$1/include $WORK_DIR fi
Android
- Ставим Cygwin ( Mingw,MSYS2 ).
- Ставим Android NDK. Раньше качался отдельно, сейчас только через SDK Manager в Android Studio.
- Открываем консоль Cygwin.
- Переходим в папку с исходниками cd /cygdrive/// .
- Создаем папку mkdir -p Projects/Android .
- cd Projects/Android
- Создаем build_ffmpeg.sh. Копируем в него скрипт.
- Правим переменные NDK, SYSROOT, TOOLCHAIN, ARCH.
- Запускаем сборку библиотек: sh ./build_ffmpeg.sh .
build_ffmpeg.sh
#!/bin/sh FFMPEG_SOURCE=ffmpeg-2.8 # start cygwin # cd /cygdrive///libs/$FFMPEG_SOURCE/Projects/Android # ./ NDK=C:/Users/UserName/AppData/Local/Android/sdk/ndk-bundle SYSROOT=$NDK/platforms/android-16/arch-arm/ TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64 ARCH=armv7-a FARCH=armeabi-v7a WORK_DIR=$(pwd) #TEMP_DIR=$WORK_DIR/temp TEMP_DIR=D:/Work/iridium/trunk/Android/libs/ffmpeg-2.8/Projects/Android/temp ROOT_DIR=$WORK_DIR/../.. PREFIX=$TEMP_DIR/$FARCH export TMPDIR=D:/tmp X264_DIR=D:/Work/iridium/trunk/Android/libs/x264/Projects/Android/temp/armeabi-v7a X264_CFLAGS="-I$X264_DIR/include" X264_LDFLAGS="-L$X264_DIR/lib" delete() < echo "================== Deleting libs" rm ./lib/android/*.a >copy_libs() < echo "================== Copy libs" #cp lib/osx/x86_32/usr/local/lib/*.a lib/android OUT_DIR=$ROOT_DIR/lib/android/$FARCH mkdir -p $OUT_DIR cp $PREFIX/lib/*.a $OUT_DIR >build_armv7() < ./configure \ --prefix=$PREFIX \ --enable-static \ --disable-shared \ --disable-doc \ --disable-programs \ --disable-avdevice \ --disable-bzlib \ --disable-doc \ --disable-symver \ --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ --target-os=linux \ --arch=arm \ --cpu=cortex-a8 \ --enable-cross-compile \ --sysroot=$SYSROOT \ --enable-gpl \ --enable-libx264 \ --extra-cflags="-Os -fpic -march=$ARCH -mfloat-abi=softfp -mfpu=vfpv3 -marm $X264_CFLAGS" \ --extra-ldflags="$X264_LDFLAGS" \ $ADDITIONAL_CONFIGURE_FLAG || exit 1 make clean make make install >cd ../.. build_armv7
Инструкция по установке и работе с программой FFMPEG на Windows
Программа FFMPEG предназначена для конвертирования видео и аудио файлов через специальные команды в командной строке Вашего компьютера/ноутбука, благодаря которым возможно самостоятельно:
1. Изменить формат и качество записи;
2. Изменить разрешение и битрейт для видео и аудио;
3. Нарезать фрагменты записи на отдельные записи;
4. Замедлить и ускорить воспроизведение видео и аудио;
5. Склеить видео и аудио в единый файл;
6. Удалить аудио из видео, а также извлечь аудио из видео.
(Более подробную информацию см. в шаге №5).
С ЧЕГО НАЧАТЬ?
Шаг №1. Скачиваем программу на Windows
Для начала Вам необходимо перейти на официальный сайт разработчиков и скачать файл программы. Ссылка на скачивание программы: https://yadi.sk/d/_ybZxA8VN2pBmQ
Шаг №2. Установка программы
Этот шаг требует особого внимания, так как работа с FFMPEG происходит через командную строку, поэтому разберём по пунктам алгоритм установки FFMPEG:
1. Вы скачали архивный файл и Вам необходимо его открыть;
2. Открываем скачанный архивный файл и находим папку «bin», внутри которой располагается файл-приложение «ffmpeg.exe»;
Примечание! Если у Вас нет архиватора для открытия файла, то можно скачать архиватор WinRar на официальном сайте разработчиков.
Ссылка на скачивание: https://winrar-pro-download.com


3. Извлекаем файл «ffmpeg.exe» в заранее созданную папку «ffmpeg» на корневом диске (как правило, это диск «C»);


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


5. Нажимаем на «Дополнительные параметры системы» и заходим в «переменные среды»;

6. Находим в окошке «системные примененные» пункт «Path», нажимаем «изменить»;

7. В появившемся окне нажимаем на кнопку «создать» и указываем путь к файлу ffmpeg. Для этого переходим в папку с ffmpeg и кликаем на строчку, выделенную красным (см. на картинке), после чего нажмите сочетание клавиш Ctrl+C;


8. После того, как нажали клавишу «Создать» (1), вставляем скопированное в строку (2) и нажимаем на «Ок» (3).

Шаг №3. Запускаем программу
1) Если вы используете ОС Windows10, то вам достаточно нажать на значок «поиск»(лупа) и ввести английскими буквами «cmd»:

(Прим. Если же Вы используете более ранние версии Windows (7,8), то Вам нужно зайти в меню «пуск» и строка «поиск» будет в самом низу).
2) Далее, заходим в командную строку и проверяем – работает ли программа. Для этого вводим: ffmpeg, после чего нажимаем кнопку Enter. Если Вы всё сделали правильно, у Вас будет примерно следующий отклик в командной строке:

(Прим. Если же у Вас появляются строки красного цвета, то вероятно – Вы сделали что-то не так. Попробуйте повторить алгоритм по новой).
Шаг №4. Используемые файлы
Для начала работы с видео-файлом необходимо, чтобы файл находился в директории доступных дисков. Например: имеется видео-файл «Testovii File.mp4». Я расположил его прямо на диск D.

Таким же образом разместите остальные файлы, с которыми вы собираетесь работать в ffmpeg.
Либо, если не хотите перетаскивать файл, вам нужно будет скопировать путь к файлу(об этом позже).
(Прим. Рекомендуется использовать английские буквы в названии файлов, с которыми собираетесь работать)
Теперь с файлами можно работать.
Запускаем командную строку. Как правило, по умолчанию в командной строке указан путь к корневой папке, например:

Чтобы начать обрабатывать файл, необходимо указать тот диск, где расположен нужный файл. В нашем случае, это Диск D. Для смены диска, в строке прописываем команду: D:
После чего нажимаем Enter и видим, что теперь у нас отображается Диск D:


Теперь мы можем начать работать с файлами. Любая команда начинается со слова ffmpeg в строке:

Далее будет представлен ряд простых команд, где input.mp4 – название исходного видео-файла; input.mp3 – название исходного аудио-файла; output.format – название полученного файла; а ключ «–i» -это то, что необходимо прописывать перед обрабатываемым файлом (input.mp4/input.mp3).
Шаг №5. Основные команды
1) Для того, чтобы перевести видео в другой видеоформат:
ffmpeg –i Z\input.avi output.mp4
(Прим. – Z\ — путь к файлу input.avi, пример: выбираем нужный файл в папке (1), кликаем на него, затем кликаем на строку с его расположение (2), и копируем правой кнопкой мышки; также следует помнить, что при попытке форматирования из более легкого файла(Mp4) в более тяжелый(avi) – полученный файл будет в более плохом качестве)
2) Для того, чтобы перевести видео в аудио:
ffmpeg –i Z\input.mp4 output.mp3
(Прим. – Если появляется красная строка при нажатии ENTER, то попробуйте поместить input.mp4 в Кавычки – «input.mp4»)
3) Для того, чтобы вырезать фрагмент из видео:
Способ : 1 – обрезать концовку.
ffmpeg -i input.mp4 –t 00:00:00 output.mp4
(Прим. -t 00:00:00 – указывается время продолжительности видео от начала)
Способ : 2 – вырезать кусок из любой точки.
ffmpeg -ss 00:00:00 -i input.mp4 -t 00:00:00 output.mp4
(Прим. –ss 00:00:00 – указывается время начала желаемого куска; -t 00:00:00 – указывается время продолжительности желаемого куска;
Если появляется красная строка, то попробуйте поместить input.mp4 в Кавычки – «input.mp4»)
P.S Применимо как к видео, так и к аудио файлам!
4) Команда для склеивания пустого видео файла и аудио файла:
ffmpeg -i input.mp3 -i input.mp4 output.mp4
(Прим. Если вы используете разные по длительности файлы, то у них вседа будет совпадать начало, а длительность конечного файла будет равна самому длинному исходному файлу, пример:
Аудиофайл.mp3 – длительность 00:05:00 + Видеофайл.mp4 – длительность 00:03:00 = финальный файл.mp4 – длительность 00:05:00)
5) Команда для удаления аудио из видео:
ffmpeg -i input.avi -vcodec copy –an output.avi
6) Команда для ускорения/замедления видео:
ffmpeg –i input.avi -vf setpts=X*PTS output.avi
(Прим. X больше 1 – замедление; X меньше 1 — ускорение)
7) Команда для ускорения/замедления аудио:
Ffmpeg –I input.mp3 -filter:a «atempo=X» –vn output.mp3
(Прим. X значение больше нуля – ускорение; X значение меньше нуля (0.5;0.8) – замедление)
8) Команда для ускорения/замедления файла с аудио и видео:
ffmpeg -i input.mp4 -filter_complex «[0:v]setpts=X*PTS[v];[0:a]atempo=Y[a]» -map «[v]» -map «[a]» output.mp4
(Прим. X больше 1 – замедление; X меньше 1 – ускорение;
Y значение больше нуля – ускорение; Y значение меньше нуля (0.5;0.8) – замедление)
9) Для того, чтобы изменить параметр «качество»:
ffmpeg -i input.avi -q X output.avi
(Прим. X от 23 до 50, где 50 – минимальное качество; данная опция помогает уменьшить размер файла)
ffmpeg -i input.mp4 -crf X output.mp4
10) Для того, чтобы изменить Битрейт:
Для аудио: ffmpeg -i input.mp4 -b:a 128k output.mp4
(Прим. Где 128k– цифра, обозначающая размер битрейта)
Для видео: ffmpeg -i input.mp4″ -b:v 1000k output.mp4
11) Для того, чтобы изменить разрешение видео:
ffmpeg -i input.mp4 -s X output.mp4
(Прим. X – разрешение, например: «-s 800×600»)
Для общего сжатия видео:
13) ffmpeg -i input.mp4 -codec:a copy -vcodec libx264 -preset fast -crf 32 output.mp4
В этой статье были рассмотрены:
— Способ установки ffmpeg для Windows
— Была представлена выжимка из самых распространённых команд, которая позволит использовать программу «ffmpeg» для решения, пусть не самых сложных, но всё-же возникающих задач.
Команды в программе ffmpeg не ограничиваются тем списком, что был представлен в данной статье. Как было сказано выше, в интернете существует более 200 страниц со всевозможными командами, призванными проводить манипуляции с видео\аудио-файлами, которыми, как правило, пользуются продвинутые пользователи.
Мы же предоставили краткий мануал по основным возможностям, и надеемся, что этот материал окажется полезным для наших пользователей!
