
Recherche avancée
Médias (1)
-
Revolution of Open-source and film making towards open film making
6 octobre 2011, par
Mis à jour : Juillet 2013
Langue : English
Type : Texte
Autres articles (47)
-
Les autorisations surchargées par les plugins
27 avril 2010, parMediaspip core
autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs -
Publier sur MédiaSpip
13 juin 2013Puis-je poster des contenus à partir d’une tablette Ipad ?
Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir -
Other interesting software
13 avril 2011, parWe don’t claim to be the only ones doing what we do ... and especially not to assert claims to be the best either ... What we do, we just try to do it well and getting better ...
The following list represents softwares that tend to be more or less as MediaSPIP or that MediaSPIP tries more or less to do the same, whatever ...
We don’t know them, we didn’t try them, but you can take a peek.
Videopress
Website : http://videopress.com/
License : GNU/GPL v2
Source code : (...)
Sur d’autres sites (8092)
-
How to convert ffmpeg video frame to YUV444 ?
21 octobre 2019, par Edward SeverinsenI have been following a tutorial on how to use ffmpeg and SDL to make a simple video player with no audio (yet). While looking through the tutorial I realized it was out of date and many of the functions it used, for both ffmpeg and SDL, were deprecated. So I searched for an up-to-date solution and found a stackoverflow question answer that completed what the tutorial was missing.
However, it uses YUV420 which is of low quality. I want to implement YUV444 and after studying chroma-subsampling for a bit and looking at the different formats for YUV am confused as to how to implement it. From what I understand YUV420 is a quarter of the quality YUV444 is. YUV444 means every pixel has its own chroma sample and as such is more detailed while YUV420 means pixels are grouped together and have the same chroma sample and therefore is less detailed.
And from what I understand the different formats of YUV(420, 422, 444) are different in the way they order y, u, and v. All of this is a bit overwhelming because I haven’t done much with codecs, conversions, etc. Any help would be much appreciated and if additional info is needed please let me know before downvoting.
Here is the code from the answer I mentioned concerning the conversion to YUV420 :
texture = SDL_CreateTexture(
renderer,
SDL_PIXELFORMAT_YV12,
SDL_TEXTUREACCESS_STREAMING,
pCodecCtx->width,
pCodecCtx->height
);
if (!texture) {
fprintf(stderr, "SDL: could not create texture - exiting\n");
exit(1);
}
// initialize SWS context for software scaling
sws_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height,
pCodecCtx->pix_fmt, pCodecCtx->width, pCodecCtx->height,
AV_PIX_FMT_YUV420P,
SWS_BILINEAR,
NULL,
NULL,
NULL);
// set up YV12 pixel array (12 bits per pixel)
yPlaneSz = pCodecCtx->width * pCodecCtx->height;
uvPlaneSz = pCodecCtx->width * pCodecCtx->height / 4;
yPlane = (Uint8*)malloc(yPlaneSz);
uPlane = (Uint8*)malloc(uvPlaneSz);
vPlane = (Uint8*)malloc(uvPlaneSz);
if (!yPlane || !uPlane || !vPlane) {
fprintf(stderr, "Could not allocate pixel buffers - exiting\n");
exit(1);
}
uvPitch = pCodecCtx->width / 2;
while (av_read_frame(pFormatCtx, &packet) >= 0) {
// Is this a packet from the video stream?
if (packet.stream_index == videoStream) {
// Decode video frame
avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
// Did we get a video frame?
if (frameFinished) {
AVPicture pict;
pict.data[0] = yPlane;
pict.data[1] = uPlane;
pict.data[2] = vPlane;
pict.linesize[0] = pCodecCtx->width;
pict.linesize[1] = uvPitch;
pict.linesize[2] = uvPitch;
// Convert the image into YUV format that SDL uses
sws_scale(sws_ctx, (uint8_t const * const *)pFrame->data,
pFrame->linesize, 0, pCodecCtx->height, pict.data,
pict.linesize);
SDL_UpdateYUVTexture(
texture,
NULL,
yPlane,
pCodecCtx->width,
uPlane,
uvPitch,
vPlane,
uvPitch
);
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, texture, NULL, NULL);
SDL_RenderPresent(renderer);
}
}
// Free the packet that was allocated by av_read_frame
av_free_packet(&packet);
SDL_PollEvent(&event);
switch (event.type) {
case SDL_QUIT:
SDL_DestroyTexture(texture);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(screen);
SDL_Quit();
exit(0);
break;
default:
break;
}
}
// Free the YUV frame
av_frame_free(&pFrame);
free(yPlane);
free(uPlane);
free(vPlane);
// Close the codec
avcodec_close(pCodecCtx);
avcodec_close(pCodecCtxOrig);
// Close the video file
avformat_close_input(&pFormatCtx);EDIT :
After more research I learned that in YUV420 is stored with all Y’s first then a combination of U and V bytes one after another as illustrated by this image :
(source : wikimedia.org)However I also learned that YUV444 is stored in the order U, Y, V and repeats like this picture shows :
I tried changing some things around in code :
// I changed SDL_PIXELFORMAT_YV12 to SDL_PIXELFORMAT_UYVY
// as to reflect the order of YUV444
texture = SDL_CreateTexture(
renderer,
SDL_PIXELFORMAT_UYVY,
SDL_TEXTUREACCESS_STREAMING,
pCodecCtx->width,
pCodecCtx->height
);
if (!texture) {
fprintf(stderr, "SDL: could not create texture - exiting\n");
exit(1);
}
// Changed AV_PIX_FMT_YUV420P to AV_PIX_FMT_YUV444P
// for rather obvious reasons
sws_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height,
pCodecCtx->pix_fmt, pCodecCtx->width, pCodecCtx->height,
AV_PIX_FMT_YUV444P,
SWS_BILINEAR,
NULL,
NULL,
NULL);
// There are as many Y, U and V bytes as pixels I just
// made yPlaneSz and uvPlaneSz equal to the number of pixels
yPlaneSz = pCodecCtx->width * pCodecCtx->height;
uvPlaneSz = pCodecCtx->width * pCodecCtx->height;
yPlane = (Uint8*)malloc(yPlaneSz);
uPlane = (Uint8*)malloc(uvPlaneSz);
vPlane = (Uint8*)malloc(uvPlaneSz);
if (!yPlane || !uPlane || !vPlane) {
fprintf(stderr, "Could not allocate pixel buffers - exiting\n");
exit(1);
}
uvPitch = pCodecCtx->width * 2;
while (av_read_frame(pFormatCtx, &packet) >= 0) {
// Is this a packet from the video stream?
if (packet.stream_index == videoStream) {
// Decode video frame
avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
// Rearranged the order of the planes to reflect UYV order
// then set linesize to the number of Y, U and V bytes
// per row
if (frameFinished) {
AVPicture pict;
pict.data[0] = uPlane;
pict.data[1] = yPlane;
pict.data[2] = vPlane;
pict.linesize[0] = pCodecCtx->width;
pict.linesize[1] = pCodecCtx->width;
pict.linesize[2] = pCodecCtx->width;
// Convert the image into YUV format that SDL uses
sws_scale(sws_ctx, (uint8_t const * const *)pFrame->data,
pFrame->linesize, 0, pCodecCtx->height, pict.data,
pict.linesize);
SDL_UpdateYUVTexture(
texture,
NULL,
yPlane,
1,
uPlane,
uvPitch,
vPlane,
uvPitch
);
//.................................................But now I get an access violation at the call to
SDL_UpdateYUVTexture
... I’m honestly not sure what’s wrong. I think it may have to do with settingAVPicture pic
’s memberdata
andlinesize
improperly but I’m not positive. -
ffmpeg can not use Android LTE ?
26 février 2018, par 심상원I am using ffmpeg version 3.3.6 to develop an app that displays images of IP cameras on Android.
The code to process receiving the video is completed. The development environment to date is in the same wifi environment as the camera.
However, if you attempt to connect to the camera with the same code in the LTE environment, the
av_read_frame
will terminate with an immediate exit requested error message.What is the reason for LTE error ?
-
using ffmpeg for development, libavutil/error environment not OK
26 février 2018, par luoyangheroI want to build a latest ffmpeg development library. I refered the docker script
’https://github.com/jrottenberg/ffmpeg/blob/master/docker-images/3.4/Dockerfile’,
and I changed the docker file to a shell file. Download all source files,
compile all dependency source and ffmpeg 3.4.1 source.
The following is my changed shell script.#!/bin/sh
export PKG_CONFIG_PATH=/opt/ffmpeg/lib/pkgconfig
LD_LIBRARY_PATH=/opt/ffmpeg/lib
PREFIX=/opt/ffmpeg
MAKEFLAGS="-j4"
export FFMPEG_VERSION=3.4.1
export FDKAAC_VERSION=0.1.5
export LAME_VERSION=3.99.5
export LIBASS_VERSION=0.13.7
export OGG_VERSION=1.3.2
export OPENCOREAMR_VERSION=0.1.4
export OPUS_VERSION=1.2
export OPENJPEG_VERSION=2.1.2
export THEORA_VERSION=1.1.1
export VORBIS_VERSION=1.3.5
export VPX_VERSION=1.6.1
export X264_VERSION=20170226-2245-stable
export X265_VERSION=2.3
export XVID_VERSION=1.3.4
export FREETYPE_VERSION=2.5.5
export FRIBIDI_VERSION=0.19.7
export FONTCONFIG_VERSION=2.12.4
export LIBVIDSTAB_VERSION=1.1.0
SRC=/usr/local
OGG_SHA256SUM="e19ee34711d7af328cb26287f4137e70630e7261b17cbe3cd41011d73a654692 libogg-1.3.2.tar.gz"
OPUS_SHA256SUM="77db45a87b51578fbc49555ef1b10926179861d854eb2613207dc79d9ec0a9a9 opus-1.2.tar.gz"
VORBIS_SHA256SUM="6efbcecdd3e5dfbf090341b485da9d176eb250d893e3eb378c428a2db38301ce libvorbis-1.3.5.tar.gz"
THEORA_SHA256SUM="40952956c47811928d1e7922cda3bc1f427eb75680c3c37249c91e949054916b libtheora-1.1.1.tar.gz"
XVID_SHA256SUM="4e9fd62728885855bc5007fe1be58df42e5e274497591fec37249e1052ae316f xvidcore-1.3.4.tar.gz"
FREETYPE_SHA256SUM="5d03dd76c2171a7601e9ce10551d52d4471cf92cd205948e60289251daddffa8 freetype-2.5.5.tar.gz"
LIBVIDSTAB_SHA256SUM="14d2a053e56edad4f397be0cb3ef8eb1ec3150404ce99a426c4eb641861dc0bb v1.1.0.tar.gz"
LIBASS_SHA256SUM="8fadf294bf701300d4605e6f1d92929304187fca4b8d8a47889315526adbafd7 0.13.7.tar.gz"
FRIBIDI_SHA256SUM="3fc96fa9473bd31dcb5500bdf1aa78b337ba13eb8c301e7c28923fea982453a8 0.19.7.tar.gz"
apt-get -y update
apt-get install -y --no-install-recommends ca-certificates expat libgomp1
apt-get autoremove -y
apt-get clean -y
apt-get install -y --no-install-recommends autoconf
apt-get install -y --no-install-recommends automake
apt-get install -y --no-install-recommends cmake
apt-get install -y --no-install-recommends curl
apt-get install -y --no-install-recommends bzip2
apt-get install -y --no-install-recommends libexpat1-dev
apt-get install -y --no-install-recommends g++
apt-get install -y --no-install-recommends gcc
apt-get install -y --no-install-recommends git
apt-get install -y --no-install-recommends gperf
apt-get install -y --no-install-recommends libtool
apt-get install -y --no-install-recommends make
apt-get install -y --no-install-recommends nasm
apt-get install -y --no-install-recommends perl
apt-get install -y --no-install-recommends pkg-config
apt-get install -y --no-install-recommends python
apt-get install -y --no-install-recommends libssl-dev
apt-get install -y --no-install-recommends yasm
apt-get install -y --no-install-recommends zlib1g-dev
############LIB env
## opencore-amr https://sourceforge.net/projects/opencore-amr/
####OnLine
# DIR=/tmp/opencore-amr && \
# rm -rf ${DIR} && \
# mkdir -p ${DIR} && \
# cd ${DIR} && \
# curl -sL https://downloads.sf.net/project/opencore-amr/opencore-amr/opencore-amr-${OPENCOREAMR_VERSION}.tar.gz | \
# tar -zx --strip-components=1 && \
# ./configure --prefix="${PREFIX}" --enable-shared && \
# make && \
# make install && \
# rm -rf ${DIR}
##curl -sL https://downloads.sf.net/project/opencore-amr/opencore-amr/opencore-amr-0.1.4.tar.gz | tar -zx --strip-components=1
####OffLine
DIR=opencore-amr-${OPENCOREAMR_VERSION} && \
rm -rf ./${DIR}
tar -xvf ./${DIR}.tar.gz && \
cd ./${DIR} && \
./configure --prefix="${PREFIX}" --enable-shared && \
make && \
make install && \
cd ..
### x264 http://www.videolan.org/developers/x264.html
#
# DIR=/tmp/x264 && \
# rm -rf ${DIR} && \
# mkdir -p ${DIR} && \
# cd ${DIR} && \
# curl -sL https://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-${X264_VERSION}.tar.bz2 | \
# tar -jx --strip-components=1 && \
# ./configure --prefix="${PREFIX}" --enable-shared --enable-pic --disable-cli && \
# make && \
# make install && \
# rm -rf ${DIR}
####OffLine
DIR=x264-snapshot-${X264_VERSION}
rm -rf ./${DIR}
tar -xvf ./${DIR}.tar.bz2 && \
cd ./${DIR} && \
./configure --prefix="${PREFIX}" --enable-shared --enable-pic --disable-cli && \
make && \
make install && \
cd ..
#### x265 http://x265.org/
#
# DIR=/tmp/x265 && \
# rm -rf ${DIR} && \
# mkdir -p ${DIR} && \
# cd ${DIR} && \
# curl -sL https://download.videolan.org/pub/videolan/x265/x265_${X265_VERSION}.tar.gz | \
# tar -zx && \
# cd x265_${X265_VERSION}/build/linux && \
# sed -i "/-DEXTRA_LIB/ s/$/ -DCMAKE_INSTALL_PREFIX=\/opt\/ffmpeg/" multilib.sh && \
# sed -i "/^cmake/ s/$/ -DENABLE_CLI=OFF/" multilib.sh && \
# ./multilib.sh && \
# make -C 8bit install
### rm -rf ${DIR}
####OffLine
DIR=x265_${X265_VERSION}
rm -rf ./${DIR}
tar -xvf ./${DIR}.tar.gz && \
cd ./${DIR}/build/linux && \
sed -i "/-DEXTRA_LIB/ s/$/ -DCMAKE_INSTALL_PREFIX=\/opt\/ffmpeg/" multilib.sh && \
sed -i "/^cmake/ s/$/ -DENABLE_CLI=OFF/" multilib.sh && \
./multilib.sh && \
make -C 8bit install
cd ../../../
#### libogg https://www.xiph.org/ogg/
#
# DIR=/tmp/ogg && \
# rm -rf ${DIR} && \
# mkdir -p ${DIR} && \
# cd ${DIR} && \
# curl -sLO http://downloads.xiph.org/releases/ogg/libogg-${OGG_VERSION}.tar.gz && \
# echo ${OGG_SHA256SUM} | sha256sum --check && \
# tar -zx --strip-components=1 -f libogg-${OGG_VERSION}.tar.gz && \
# ./configure --prefix="${PREFIX}" --enable-shared && \
# make && \
# make install
## rm -rf ${DIR}
####OffLine
DIR=libogg-${OGG_VERSION}
rm -rf ./${DIR}
tar -xvf ./${DIR}.tar.gz && \
cd ./${DIR} && \
./configure --prefix="${PREFIX}" --enable-shared && \
make && \
make install && \
cd ..
#### libopus https://www.opus-codec.org/
#
# DIR=/tmp/opus && \
# rm -rf ${DIR} && \
# mkdir -p ${DIR} && \
# cd ${DIR} && \
# curl -sLO https://archive.mozilla.org/pub/opus/opus-${OPUS_VERSION}.tar.gz && \
# echo ${OPUS_SHA256SUM} | sha256sum --check && \
# tar -zx --strip-components=1 -f opus-${OPUS_VERSION}.tar.gz && \
# autoreconf -fiv && \
# ./configure --prefix="${PREFIX}" --enable-shared && \
# make && \
# make install
## rm -rf ${DIR}
####OffLine
DIR=opus-${OPUS_VERSION}
rm -rf ./${DIR}
tar -xvf ./${DIR}.tar.gz && \
cd ./${DIR} && \
autoreconf -fiv && \
./configure --prefix="${PREFIX}" --enable-shared && \
make && \
make install && \
cd ..
#### libvorbis https://xiph.org/vorbis/
#
# DIR=/tmp/vorbis && \
# rm -rf ${DIR} && \
# mkdir -p ${DIR} && \
# cd ${DIR} && \
# curl -sLO http://downloads.xiph.org/releases/vorbis/libvorbis-${VORBIS_VERSION}.tar.gz && \
# echo ${VORBIS_SHA256SUM} | sha256sum --check && \
# tar -zx --strip-components=1 -f libvorbis-${VORBIS_VERSION}.tar.gz && \
# ./configure --prefix="${PREFIX}" --with-ogg="${PREFIX}" --enable-shared && \
# make && \
# make install
## rm -rf ${DIR}
####OffLine
DIR=libvorbis-${VORBIS_VERSION}
rm -rf ./${DIR}
tar -xvf ./${DIR}.tar.gz && \
cd ./${DIR} && \
./configure --prefix="${PREFIX}" --with-ogg="${PREFIX}" --enable-shared && \
make && \
make install && \
cd ..
#### libtheora http://www.theora.org/
#
# DIR=/tmp/theora && \
# rm -rf ${DIR} && \
# mkdir -p ${DIR} && \
# cd ${DIR} && \
# curl -sLO http://downloads.xiph.org/releases/theora/libtheora-${THEORA_VERSION}.tar.gz && \
# echo ${THEORA_SHA256SUM} | sha256sum --check && \
# tar -zx --strip-components=1 -f libtheora-${THEORA_VERSION}.tar.gz && \
# ./configure --prefix="${PREFIX}" --with-ogg="${PREFIX}" --enable-shared && \
# make && \
# make install
## rm -rf ${DIR}
####OffLine
DIR=libtheora-${THEORA_VERSION}
rm -rf ./${DIR}
tar -xvf ./${DIR}.tar.gz && \
cd ./${DIR} && \
./configure --prefix="${PREFIX}" --with-ogg="${PREFIX}" --enable-shared && \
make && \
make install && \
cd ..
#### libvpx https://www.webmproject.org/code/
#
# DIR=/tmp/vpx && \
# rm -rf ${DIR} && \
# mkdir -p ${DIR} && \
# cd ${DIR} && \
# curl -sL https://codeload.github.com/webmproject/libvpx/tar.gz/v${VPX_VERSION} | \
# tar -zx --strip-components=1 && \
# ./configure --prefix="${PREFIX}" --enable-vp8 --enable-vp9 --enable-pic --enable-shared \
# --disable-debug --disable-examples --disable-docs --disable-install-bins && \
# make && \
# make install
## rm -rf ${DIR}
#####OffLine
DIR=libvpx-1.6.1
rm -rf ./${DIR}
tar -xvf ./${DIR}.tar.gz && \
cd ./${DIR} && \
./configure --prefix="${PREFIX}" --enable-vp8 --enable-vp9 --enable-pic --enable-shared \
--disable-debug --disable-examples --disable-docs --disable-install-bins && \
make && \
make install && \
cd ..
#### libmp3lame http://lame.sourceforge.net/
#
# DIR=/tmp/lame && \
# rm -rf ${DIR} && \
# mkdir -p ${DIR} && \
# cd ${DIR} && \
# curl -sL https://downloads.sf.net/project/lame/lame/${LAME_VERSION%.*}/lame-${LAME_VERSION}.tar.gz | \
# tar -zx --strip-components=1 && \
# ./configure --prefix="${PREFIX}" --bindir="${PREFIX}/bin" --enable-shared --enable-nasm --enable-pic --disable-frontend && \
# make && \
# make install
## rm -rf ${DIR}
####OffLine
DIR=lame-3.99.5
rm -rf ./${DIR}
tar -xvf ./${DIR}.tar.gz && \
cd ./${DIR} && \
./configure --prefix="${PREFIX}" --bindir="${PREFIX}/bin" --enable-shared --enable-nasm --enable-pic --disable-frontend && \
make && \
make install && \
cd ..
#### xvid https://www.xvid.com/
#
# DIR=/tmp/xvid && \
# rm -rf ${DIR} && \
# mkdir -p ${DIR} && \
# cd ${DIR} && \
# curl -sLO http://downloads.xvid.org/downloads/xvidcore-${XVID_VERSION}.tar.gz && \
# echo ${XVID_SHA256SUM} | sha256sum --check && \
# tar -zx -f xvidcore-${XVID_VERSION}.tar.gz && \
# cd xvidcore/build/generic && \
# ./configure --prefix="${PREFIX}" --bindir="${PREFIX}/bin" --datadir="${DIR}" --enable-shared --enable-shared && \
# make && \
# make install
## rm -rf ${DIR}
####OffLine
DIR=xvidcore
BASE_DIR=`pwd`
rm -rf ./${DIR}-1.3.4
tar -xvf ./${DIR}-1.3.4.tar.gz && \
cd ./${DIR} && \
cd ./build/generic && \
./configure --prefix="${PREFIX}" --bindir="${PREFIX}/bin" --datadir="${BASE_DIR}/${DIR}" --enable-shared --enable-shared && \
make && \
make install && \
cd ../../../
#### fdk-aac https://github.com/mstorsjo/fdk-aac
#
# DIR=/tmp/fdk-aac && \
# rm -rf ${DIR} && \
# mkdir -p ${DIR} && \
# cd ${DIR} && \
# curl -sL https://github.com/mstorsjo/fdk-aac/archive/v${FDKAAC_VERSION}.tar.gz | \
# tar -zx --strip-components=1 && \
# autoreconf -fiv && \
# ./configure --prefix="${PREFIX}" --enable-shared --datadir="${DIR}" && \
# make && \
# make install
## rm -rf ${DIR}
####OffLine
BASE_DIR=`pwd`
DIR=fdk-aac-0.1.5
rm -rf ./${DIR}
tar -xvf ./${DIR}.tar.gz && \
cd ./${DIR} && \
autoreconf -fiv && \
./configure --prefix="${PREFIX}" --enable-shared --datadir="${BASE_DIR}/${DIR}" && \
make && \
make install && \
cd ..
## openjpeg https://github.com/uclouvain/openjpeg
# DIR=/tmp/openjpeg && \
# rm -rf ${DIR} && \
# mkdir -p ${DIR} && \
# cd ${DIR} && \
# curl -sL https://github.com/uclouvain/openjpeg/archive/v${OPENJPEG_VERSION}.tar.gz | \
# tar -zx --strip-components=1 && \
# cmake -DBUILD_THIRDPARTY:BOOL=ON -DCMAKE_INSTALL_PREFIX="${PREFIX}" . && \
# make && \
# make install
## rm -rf ${DIR}
####OffLine
DIR=openjpeg-2.1.2
rm -rf ./${DIR}
tar -xvf ./${DIR}.tar.gz && \
cd ./${DIR} && \
cmake -DBUILD_THIRDPARTY:BOOL=ON -DCMAKE_INSTALL_PREFIX="${PREFIX}" . && \
make && \
make install && \
cd ..
### freetype https://www.freetype.org/
##RUN \
## DIR=/tmp/freetype && \
## mkdir -p ${DIR} && \
## cd ${DIR} && \
## curl -sLO http://download.savannah.gnu.org/releases/freetype/freetype-${FREETYPE_VERSION}.tar.gz && \
## echo ${FREETYPE_SHA256SUM} | sha256sum --check && \
## tar -zx --strip-components=1 -f freetype-${FREETYPE_VERSION}.tar.gz && \
## ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \
## make && \
## make install && \
## rm -rf ${DIR}
###OffLine
DIR=freetype-${FREETYPE_VERSION}
rm -rf ./${DIR}
tar -xvf ./${DIR}.tar.gz && \
cd ./${DIR} && \
./configure --prefix="${PREFIX}" --disable-static --enable-shared && \
make && \
make install && \
cd ..
### libvstab https://github.com/georgmartius/vid.stab
#
# DIR=/tmp/vid.stab && \
# rm -rf ${DIR} && \
# mkdir -p ${DIR} && \
# cd ${DIR} && \
# curl -sLO https://github.com/georgmartius/vid.stab/archive/v${LIBVIDSTAB_VERSION}.tar.gz &&\
# echo ${LIBVIDSTAB_SHA256SUM} | sha256sum --check && \
# tar -zx --strip-components=1 -f v${LIBVIDSTAB_VERSION}.tar.gz && \
# cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" . && \
# make && \
# make install
## rm -rf ${DIR}
####OffLine
DIR=vid.stab
rm -rf ./${DIR}-1.1.0
tar -xvf ./${DIR}_v1.1.0.tar.gz && \
cd ./${DIR}-1.1.0 && \
cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" . && \
make && \
make install && \
cd ..
### fridibi https://www.fribidi.org/
# + https://github.com/fribidi/fribidi/issues/8
#
# DIR=/tmp/fribidi && \
# rm -rf ${DIR} && \
# mkdir -p ${DIR} && \
# cd ${DIR} && \
# curl -sLO https://github.com/fribidi/fribidi/archive/${FRIBIDI_VERSION}.tar.gz && \
# echo ${FRIBIDI_SHA256SUM} | sha256sum --check && \
# tar -zx --strip-components=1 -f ${FRIBIDI_VERSION}.tar.gz && \
# sed -i 's/^SUBDIRS =.*/SUBDIRS=gen.tab charset lib/' Makefile.am && \
# ./bootstrap --no-config && \
# ./configure -prefix="${PREFIX}" --disable-static --enable-shared && \
# make && \
# make install
# rm -rf ${DIR}
####OffLine
DIR=fribidi-0.19.7 && \
rm -rf ./${DIR}
tar -xvf ./${DIR}.tar.gz && \
cd ./${DIR} && \
sed -i 's/^SUBDIRS =.*/SUBDIRS=gen.tab charset lib/' Makefile.am && \
./bootstrap --no-config && \
./configure -prefix="${PREFIX}" --disable-static --enable-shared && \
make && \
make install && \
cd ..
### fontconfig https://www.freedesktop.org/wiki/Software/fontconfig/
# DIR=/tmp/fontconfig && \
# rm -rf ${DIR} && \
# mkdir -p ${DIR} && \
# cd ${DIR} && \
# curl -sLO https://www.freedesktop.org/software/fontconfig/release/fontconfig-${FONTCONFIG_VERSION}.tar.bz2 &&\
# tar -jx --strip-components=1 -f fontconfig-${FONTCONFIG_VERSION}.tar.bz2 && \
# ./configure -prefix="${PREFIX}" --disable-static --enable-shared && \
# make && \
# make install
## rm -rf ${DIR}
####OffLine
DIR=fontconfig-2.12.4 && \
rm -rf ./${DIR}
tar -xvf ./${DIR}.tar.bz2 && \
cd ./${DIR} && \
./configure -prefix="${PREFIX}" --disable-static --enable-shared && \
make && \
make install && \
cd ..
## libass https://github.com/libass/libass
#need add PKG_CONFIG_PATH
#
# DIR=/tmp/libass && \
# rm -rf ${DIR} && \
# mkdir -p ${DIR} && \
# cd ${DIR} && \
# curl -sLO https://github.com/libass/libass/archive/${LIBASS_VERSION}.tar.gz &&\
# echo ${LIBASS_SHA256SUM} | sha256sum --check && \
# tar -zx --strip-components=1 -f ${LIBASS_VERSION}.tar.gz && \
# ./autogen.sh && \
# ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \
# make && \
# make install
## rm -rf ${DIR}
####OffLine
DIR=libass && \
rm -rf ./${DIR}-0.13.7
tar -xvf ./${DIR}_0.13.7.tar.gz && \
cd ./${DIR}-0.13.7 && \
./autogen.sh && \
./configure --prefix="${PREFIX}" --disable-static --enable-shared && \
make && \
make install && \
cd ..
### ffmpeg https://ffmpeg.org/
#####OffLine
DIR=ffmpeg341 && \
mkdir -p ${DIR} && cd ${DIR} && \
rm -rf ffmpeg-${FFMPEG_VERSION} && \
tar -xvf ffmpeg-${FFMPEG_VERSION}.tar.gz && \
cd ffmpeg-${FFMPEG_VERSION} && \
./configure \
--enable-debug \
--enable-doc \
--disable-ffplay \
--enable-shared \
--enable-avresample \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
--enable-gpl \
--enable-libass \
--enable-libfreetype \
--enable-libvidstab \
--enable-libmp3lame \
--enable-libopenjpeg \
--enable-libopus \
--enable-libtheora \
--enable-libvorbis \
--enable-libvpx \
--enable-libx265 \
--enable-libxvid \
--enable-libx264 \
--enable-nonfree \
--enable-openssl \
--enable-libfdk_aac \
--enable-postproc \
--enable-small \
--enable-version3 \
--extra-cflags="-I${PREFIX}/include" \
--extra-ldflags="-L${PREFIX}/lib" \
--extra-libs=-ldl \
--prefix="${PREFIX}" && \
make && \
make install && \
make distclean && \
hash -r && \
cd tools && \
make qt-faststart && \
cp qt-faststart ${PREFIX}/bin
cd ../../I try to run my compiled ffmpeg, it is OK.
#
export LD_LIBRARY_PATH=/opt/ffmpeg/lib/
/opt/ffmpeg/bin/ffmpeg -i "/home/luoy/Videos/芳华.2017.TC720P独家高清中字.mp4" -ss 00:00:00 -t 00:00:01 -f image2 -y "./2_%04d.bmp"
ffmpeg version 3.4.1 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.6) 20160609
configuration: --enable-debug --enable-doc --disable-ffplay --enable-shared --enable-avresample --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-gpl --enable-libass --enable-libfreetype --enable-libvidstab --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx265 --enable-libxvid --enable-libx264 --enable-nonfree --enable-openssl --enable-libfdk_aac --enable-postproc --enable-small --enable-version3 --extra-cflags=-I/opt/ffmpeg/include --extra-ldflags=-L/opt/ffmpeg/lib --extra-libs=-ldl --prefix=/opt/ffmpeg
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libavresample 3. 7. 0 / 3. 7. 0
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
libpostproc 54. 7.100 / 54. 7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/luoy/Videos/芳华.2017.TC720P独家高清中字.mp4':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isomavc1
creation_time : 2017-12-15T16:28:00.000000Z
encoder : Lite MP4 Tool v2.3
Duration: 02:09:09.24, start: 0.000000, bitrate: 1587 kb/s
Stream #0:0(und): Video: h264 (avc1 / 0x31637661), yuv420p, 1280x720, 1456 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
Metadata:
creation_time : 2017-12-15T16:28:00.000000Z
handler_name : Imported with GPAC 0.4.6-DEV (internal rev. 5)
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)
Metadata:
creation_time : 2017-12-15T16:28:45.000000Z
handler_name : GPAC ISO Audio Handler
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> bmp (native))
Press [q] to stop, [?] for help
Output #0, image2, to './2_%04d.bmp':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isomavc1
encoder : Lavf57.83.100
Stream #0:0(und): Video: bmp, bgr24, 1280x720, q=2-31, 200 kb/s, 23.98 fps, 23.98 tbn, 23.98 tbc (default)
Metadata:
creation_time : 2017-12-15T16:28:00.000000Z
handler_name : Imported with GPAC 0.4.6-DEV (internal rev. 5)
encoder : Lavc57.107.100 bmp
frame= 24 fps=0.0 q=-0.0 Lsize=N/A time=00:00:01.00 bitrate=N/A dup=1 drop=0 speed= 5.6x
video:64801kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown#
Now I write a simple code, save as a 0_hello_world.c file.
#
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include
#include
#include
#include
#include
#include
#include
#include "libavutil/error.h"
int main(int argc, const char *argv[])
{
av_register_all();
int response = 0;
char *pchar;
// pchar = av_err2str(response);
return 0;
}#
Use the follow command for make, it’s OK.
#
gcc -g -Wall -o build/hello_world -lz 0_hello_world.c
-lavformat -lavcodec -lswscale
-I/opt/ffmpeg/include -L/opt/ffmpeg/lib#
But when I use the "av_err2str" function(uncomment this line) :
’pchar = av_err2str(response) ;’
compile show the following error :#
gcc -g -Wall -o build/hello_world -lz 0_hello_world.c
-lavformat -lavcodec -lswscale
-I/opt/ffmpeg/include -L/opt/ffmpeg/lib
0_hello_world.c: In function ‘main’:
0_hello_world.c:16:9: warning: variable ‘pchar’ set but not used [-Wunused-but-set-variable]
char *pchar;
^
/usr/bin/ld: /tmp/ccgJJ9CV.o: undefined reference to symbol 'av_strerror@@LIBAVUTIL_55'
/opt/ffmpeg/lib/libavutil.so.55: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Makefile:10: recipe for target 'hello_world' failed
make: *** [hello_world] Error 1#
As I know "av_register_all" use the "libavformat/avformat.h" header ; "av_err2str" use the "libavutil/error.h" header.
Both the two headers I have included, why "av_err2str" is not OK ?
I guess this is my environment not OK. How can I find the error ?
I have checked my LD_LIBRARY_PATH, it is OK.#
$ echo $LD_LIBRARY_PATH
/opt/ffmpeg/lib: