
Recherche avancée
Médias (2)
-
GetID3 - Bloc informations de fichiers
9 avril 2013, par
Mis à jour : Mai 2013
Langue : français
Type : Image
-
GetID3 - Boutons supplémentaires
9 avril 2013, par
Mis à jour : Avril 2013
Langue : français
Type : Image
Autres articles (87)
-
Mise à jour de la version 0.1 vers 0.2
24 juin 2013, parExplications des différents changements notables lors du passage de la version 0.1 de MediaSPIP à la version 0.3. Quelles sont les nouveautés
Au niveau des dépendances logicielles Utilisation des dernières versions de FFMpeg (>= v1.2.1) ; Installation des dépendances pour Smush ; Installation de MediaInfo et FFprobe pour la récupération des métadonnées ; On n’utilise plus ffmpeg2theora ; On n’installe plus flvtool2 au profit de flvtool++ ; On n’installe plus ffmpeg-php qui n’est plus maintenu au (...) -
Personnaliser en ajoutant son logo, sa bannière ou son image de fond
5 septembre 2013, parCertains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;
-
Ecrire une actualité
21 juin 2013, parPrésentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
Vous pouvez personnaliser le formulaire de création d’une actualité.
Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)
Sur d’autres sites (12635)
-
Package not found - add libav to PKG_CONFIG_PATH environment variable
19 mars 2019, par Brayton LarsonI am attempting to build the Parrot SDK and when running the command it continuously fails due to multiple libav package variants not being found. Below is the error message.
user@TheMysteriousMachine : /WORKING_DIRECTORY$ ./build.sh -p arsdk-native -t build-sdk -j [I] Starting task 'build-sdk' [I] In '/home/user/WORKING_DIRECTORY' : ALCHEMY_TARGET_CONFIG_DIR="/home/user/WORKING_DIRECTORY/products/arsdk /native/config" ALCHEMY_TARGET_OUT="/home/user/WORKING_DIRECTORY/out/arsdk-native" ALCHEMY_TARGET_PRODUCT="arsdk" ALCHEMY_TARGET_PRODUCT_VARIANT="native" ALCHEMY_TARGET_SCAN_ADD_DIRS=" /home/user/WORKING_DIRECTORY/packages" ALCHEMY_TARGET_SCAN_PRUNE_DIRS=" /home/user/WORKING_DIRECTORY" ALCHEMY_USE_COLORS="1" ALCHEMY_WORKSPACE_DIR="/home/user/WORKING_DIRECTORY" PARROT_BUILD_PROP_GROUP="drones" PARROT_BUILD_PROP_PRODUCT="arsdk" PARROT_BUILD_PROP_PROJECT="arsdk" PARROT_BUILD_PROP_UID="arsdk-native-20190316-1404-0.0.0" PARROT_BUILD_PROP_VARIANT="native" PARROT_BUILD_PROP_VERSION="0.0.0" /home/user/WORKING_DIRECTORY/build/alchemy/scripts/alchemake -j 8 all ---------------------------------------------------------------------- + ALCHEMY_WORKSPACE_DIR = /home/user /WORKING_DIRECTORY + TARGET_PRODUCT = arsdk + TARGET_PRODUCT_VARIANT = native + TARGET_OS = linux + TARGET_OS_FLAVOUR = native + TARGET_LIBC = native + TARGET_ARCH = x64 + TARGET_CPU = + TARGET_OUT = /home/user/WORKING_DIRECTORY/out/arsdk-native + TARGET_CONFIG_DIR = /home/user/WORKING_DIRECTORY /products/arsdk/native/config + TARGET_CC_PATH = /usr/bin/cc + TARGET_CC_VERSION = 7 ---------------------------------------------------------------------- Scanning /home/user/WORKING_DIRECTORY/packages for makefiles... Found 44 makefiles Prebuilt module ncurses marked as overriden Prebuilt module ncurses marked as overriden Package libavcodec was not found in the pkg-config search path. Perhaps you should add the directory containing
libavcodec.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libavcodec' found
Package libavformat was not found in the pkg-config search path.
Perhaps you should add the directory containinglibavformat.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libavformat' found
Package libswscale was not found in the pkg-config search path.
Perhaps you should add the directory containinglibswscale.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libswscale' found
Package libavutil was not found in the pkg-config search path.
Perhaps you should add the directory containinglibavutil.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libavutil' found
Package libavcodec was not found in the pkg-config search path.
Perhaps you should add the directory containinglibavcodec.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libavcodec' found
Package libavformat was not found in the pkg-config search path.
Perhaps you should add the directory containinglibavformat.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libavformat' found
Package libswscale was not found in the pkg-config search path.
Perhaps you should add the directory containinglibswscale.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libswscale' found
Package libavutil was not found in the pkg-config search path.
Perhaps you should add the directory containinglibavutil.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libavutil' found
Found 96 modules
Computing modules dependencies...
Checking modules dependencies...
/home/user/WORKING_DIRECTORY/build/alchemy/main.mk:360 : *** /home/user /WORKING_DIRECTORY/packages/libARDiscovery : module 'libARDiscovery' depends on unknown module 'avahi'. Stop.
[E] Task 'build-sdk' failed (Command failed (returncode=2))As I understand it libav has been replaced by ffmpeg but the build should still be able to reference the packages as libav. I’ve tried adding different paths to PKG_CONFIG_PATH using `export PKG_CONFIG_PATH=...’ but with no success. It is possible I’m not adding the correct path, I used ’dpkg -L ffmpeg’ to locate the package. The output of that is :
user@TheMysteriousMachine : $ dpkg -L ffmpeg /. /etc /etc/ffserver.conf /usr /usr/bin /usr/bin/ffmpeg /usr/bin/ffplay /usr/bin/ffprobe /usr/bin/ffserver /usr/bin/qt-faststart /usr/share /usr/share/doc /usr/share/doc/ffmpeg /usr/share/doc/ffmpeg/RELEASE_NOTES /usr/share/doc/ffmpeg/copyright /usr/share/ffmpeg /usr/share/ffmpeg/libvpx-1080p.ffpreset /usr/share/ffmpeg/libvpx-1080p50_60.ffpreset /usr/share/ffmpeg/libvpx-360p.ffpreset /usr/share/ffmpeg/libvpx-720p.ffpreset /usr/share/ffmpeg/libvpx-720p50_60.ffpreset /usr/share/lintian /usr/share/lintian/overrides /usr/share/lintian/overrides/ffmpeg /usr/share/man /usr/share/man/man1 /usr/share/man/man1/ffmpeg-all.1.gz /usr/share/man/man1/ffmpeg-bitstream-filters.1.gz /usr/share/man/man1/ffmpeg-codecs.1.gz /usr/share/man/man1/ffmpeg-devices.1.gz /usr/share/man/man1/ffmpeg-filters.1.gz /usr/share/man/man1/ffmpeg-formats.1.gz /usr/share/man/man1/ffmpeg-protocols.1.gz /usr/share/man/man1/ffmpeg-resampler.1.gz /usr/share/man/man1/ffmpeg-scaler.1.gz /usr/share/man/man1/ffmpeg-utils.1.gz /usr/share/man/man1/ffmpeg.1.gz /usr/share/man/man1/ffplay-all.1.gz /usr/share/man/man1/ffplay.1.gz /usr/share/man/man1/ffprobe-all.1.gz /usr/share/man/man1/ffprobe.1.gz /usr/share/man/man1/ffserver-all.1.gz /usr/share/man/man1/ffserver.1.gz /usr/share/man/man1/qt-faststart.1.gz /usr/share/doc/ffmpeg/changelog.Debian.gz
...of which I can assume the useful part is ’/usr/bin’ which i added to my PKG_CONFIG_PATH and still the same error when building. I am running Ubuntu 18.04 LTS. I’m at a loss and have been grinding at this for the past 2 days, any help would be GREATLY appreciated. Thank you and I’m happy to provide more needed information. As a small request, I am pretty new to Linux so if you could include as many details in command line operations as possible it would help alot.
-
What is audience segmentation ? The 8 main types and examples
8 juillet, par JoeMarketers must reach the right person at the right time with the most relevant messaging. Customers now expect personalised experiences, which means generic campaigns won’t work. Audience segmentation is the key to doing this.
This isn’t an easy process because there are many types of audience segmentation. The wrong approach or poor data management can lead to irrelevant messaging or lost customer trust.
This article breaks down the most common types of audience segmentation with examples highlighting their usefulness and information on segmenting campaigns without breaking data regulations.
What is audience segmentation ?
Audience segmentation involves dividing a customer base into distinct, smaller groups with similar traits or common characteristics. The goal is to deliver a more targeted marketing message or to glean unique insights from analytics.
It can be as broad as dividing a marketing campaign by location or as specific as separating audiences by their interests, hobbies and behaviour.
Consider this : an urban office worker and a rural farmer have vastly different needs. Targeted marketing efforts aimed at agriculture workers in rural areas can stir up interest in farm equipment.
Audience segmentation has existed since the beginning of marketing. Advertisers used to select magazines and placements based on who typically read them. For example, they would run a golf club ad in a golf magazine, not the national newspaper.
Now that businesses have more customer data, audience segments can be narrower and more specific.
Why audience segmentation matters
Hyken’s latest Customer Service and CX Research Study revealed that 81% of customers expect a personalised experience.
These numbers reflect expectations from consumers who have actively engaged with a brand — created an account, signed up for an email list or purchased a product.
They expect relevant product recommendations — like a shoe polishing kit after buying nice leather loafers.
Without audience segmentation, customers can get frustrated with post-sale activities. For example, the same follow-up email won’t make sense for all customers because each is at a different stage of the user journey.
Some more benefits that audience segmentation offers :
- Personalised targeting is a major advantage. Tailored messaging makes customers feel valued and understood, enhancing their loyalty to the brand.
- Businesses can understand users’ unique needs, which helps in better product development. For example, a fitness brand might develop separate offerings for casual exercisers and professional athletes.
- Marketers can allocate more resources to the most promising segments. For example, a luxury skincare brand might target affluent customers with premium ads and use broader campaigns for entry-level products.
8 types of audience segmentation
There are eight types of audience segmentation : demographic, behavioural, psychographic, technographic, transactional, contextual, lifecycle and predictive segmentation.
Let’s take an in-depth look at each of them.
Demographic segmentation
Demographic segmentation divides a larger audience based on data points like location, age or other factors.
The most basic segmentation factor is location, which is critical in marketing campaigns. Geographic segmentation can use IP addresses to separate marketing efforts by country.
But more advanced demographic data points are becoming increasingly sensitive to handle, especially in Europe, where the GDPR makes advanced demographics a more tentative subject.
It’s also possible to use age, education level, and occupation to target marketing campaigns. It’s essential to navigate this terrain thoughtfully, responsibly, and strictly adhere to privacy regulations.
Potential data points :
- Location
- Age
- Marital status
- Income
- Employment
- Education
Example of effective demographic segmentation :
A clothing brand targeting diverse locations must account for the varying weather conditions. In colder regions, showcasing winter collections or insulated clothing might resonate more with the audience. Conversely, promoting lightweight or summer attire would be more effective in warmer climates.
Here are two ads run by North Face on Facebook and Instagram to different audiences to highlight different collections :
Each collection features differently and uses a different approach with its copy and even the media. With social media ads, targeting people based on advanced demographics is simple enough — just single out the factors when building a campaign. And it’s unnecessary to rely on data mining to get information for segmentation.
Consider incorporating a short survey into email sign-up forms so people can self-select their interests and preferences. This is a great way to segment ethically and without the need for data-mining companies. Responses can offer valuable insights into audience preferences while enhancing engagement, decreasing bounce rates, and improving conversion rates.
Behavioural segmentation
Behavioural segmentation segments audiences based on their interaction with a website or an app.
Potential data points :
- Page visits
- Referral source
- Clicks
- Downloads
- Video plays
- Conversions (e.g., signing up for a newsletter or purchasing a product)
Example of using behavioural segmentation to improve campaign efficiency :
One effective method involves using a web analytics tool like Matomo to uncover patterns. By segmenting actions like specific clicks and downloads, identify what can significantly enhance visitor conversions.
For example, if a case study video substantially boosts conversion rates, elevate its prominence to capitalise on this success.
Then, set up a conditional CTA within the video player. Make it pop up after the user finishes watching the video. Use a specific form and assign it to a particular segment for each case study. This way, you can get the prospect’s ideal use case without surveying them.
This is an example of behavioural segmentation that doesn’t rely on third-party cookies.
Psychographic segmentation
Psychographic segmentation involves segmenting audiences based on interpretations of their personality or preferences.
Potential data points :
- Social media patterns
- Follows
- Hobbies
- Interests
Example of effective psychographic segmentation :
Here, Adidas segments its audience based on whether they like cycling or rugby. It makes no sense to show a rugby ad to someone who’s into cycling and vice versa. However, for rugby athletes, the ad is very relevant.
Brands that want to avoid social platforms can use surveys about hobbies and interests to segment their target audience ethically.
Technographic segmentation
Technographic segmentation separates customers based on the hardware or software they use.
Potential data points :
- Type of device used
- Device model or brand
- Browser used
Example of segmenting by device type to improve user experience :
After noticing a serious influx of tablet users accessing their platform, a leading news outlet optimised their tablet browsing experience. They overhauled the website interface, focusing on smoother navigation and better tablet-readability. These changes gave users a more enjoyable reading experience tailored precisely to their device.
Transactional segmentation
Transactional segmentation uses customers’ past purchases to match marketing messages with user needs.
Consumers often relate personalisation with their actual transactions rather than their social media profiles.
Potential data points :
- Average order value
- Product categories purchased within X months
- Most recent purchase date
Example of effective transactional segmentation :
Relevant product recommendations and coupons are among the best uses of transactional segmentation. These individualised marketing emails can strengthen brand loyalty and increase revenue.
A pet supply store identifies a segment of customers who consistently purchase cat food but not other pet products. To encourage repeat purchases within this segment, the store creates targeted email campaigns offering discounts or loyalty rewards for cat-related items.
Contextual segmentation
Contextual segmentation helps marketers connect with audiences based on real-time factors like time of day, weather or location. It’s like offering someone exactly what they need when they need it the most.
Potential data points :
- GPS location
- Browsing activity
- Device type
Examples of contextual segmentation :
A ride-hailing app might promote discounted rides during rush hour in busy cities or suggest carpooling options on rainy days. Similarly, an outdoor gear retailer could target users in snowy regions with ads for winter jackets or snow boots.
The key is relevance. Messages that align with what someone needs at that moment feel helpful rather than intrusive. Businesses need tools like geolocation tracking and real-time analytics to make this work.
Also, keep it subtle and respectful. While personalisation is powerful, being overly intrusive can backfire. For example, instead of bombarding someone with notifications every time they pass a store, focus on moments when an offer truly adds value — like during bad weather or peak commute times.
Lifecycle segmentation
Lifecycle segmentation is about crafting interactions based on where customers are in their journey with a brand.
Lifecycle segmentation isn’t just about selling ; it’s about building relationships. After a big purchase like furniture, sending care tips instead of another sales pitch shows customers that the brand cares about their experience beyond just the sale.
This approach helps brands avoid generic messaging that might alienate customers. By understanding the customer’s lifecycle stage, businesses can tailor their communications to meet specific needs, whether nurturing new relationships or rewarding long-term loyalty.
Potential data points :
- Purchase history
- Sign-up dates
Examples of effective lifecycle segmentation :
An online clothing store might send first-time buyers a discount code to encourage repeat purchases. On the other hand, if someone hasn’t shopped in months, they might get an email with “We miss you” messaging and a special deal to bring them back.
Predictive segmentation
Predictive segmentation uses past behaviour and preferences to understand or predict what customers might want next. Its real power lies in its ability to make customers feel understood without them having to ask for anything.
Potential data points :
- Purchase patterns
- Browsing history
- Interaction frequency
Examples of effective predictive segmentation :
Streaming platforms are great examples — they analyse what shows and genres users watch to recommend related content they might enjoy. Similarly, grocery delivery apps can analyse past orders to suggest when to reorder essentials like milk or bread.
B2B-specific : Firmographic segmentation
Beyond the eight main segmentation types, B2B marketers often use firmographic factors when segmenting their campaigns. It’s a way to segment campaigns that go beyond the considerations of the individual.
Potential data points :
- Annual revenue
- Number of employees
- Industry
- Geographic location (main office)
Example of effective firmographic segmentation :
Startups and well-established companies will not need the same solution, so segmenting leads by size is one of the most common and effective examples of B2B audience segmentation.
The difference here is that B2B campaigns involve more manual research. With an account-based marketing approach, you start by researching potential customers. Then, you separate the target audience into smaller segments (or even a one-to-one campaign).
Audience segmentation challenges (+ how to overcome them)
Below, we explore audience segmentation challenges organisations can face and practical ways to overcome them.
Data privacy
Regulations like GDPR and CCPA require businesses to handle customer data responsibly. Ignoring these rules can lead to hefty fines and harm a brand’s reputation. Customers are also more aware of and sensitive to how their data is used, making transparency essential.
Businesses should adopt clear data policies and provide opt-out options to build trust and demonstrate respect for user preferences.
Privacy-focused analytics tools can help businesses handle these requirements effectively. For example, Matomo allows businesses to anonymise user data and offers features that give users control over their tracking preferences.
Data quality
Inconsistent, outdated or duplicate data can result in irrelevant messaging that frustrates customers instead of engaging them.
This is why businesses should regularly audit their data sources for accuracy and completeness.
Integrate multiple data sources into a unified platform for a more in-depth customer view. Implement data cleansing processes to remove duplicates, outdated records, and errors.
Segment management
Managing too many segments can become overwhelming, especially for businesses with limited resources. Creating and maintaining numerous audience groups requires significant time and effort, which may not always be feasible.
Automated tools and analytics platforms can help. Matomo Segments can analyse reports on specific audience groups based on criteria such as visit patterns, interactions, campaign sources, ecommerce behaviour, demographics and technology usage for more targeted analysis.
Detailed reporting of each segment’s characteristics can further simplify the process. By prioritising high-impact segments — those that offer the best potential return on investment — businesses can focus their efforts where they matter most.
Behaviour shifts
Customer behaviour constantly evolves due to changing trends, new technology and shifting social and economic conditions.
Segmentation strategies that worked in the past can quickly become outdated.
Businesses need to monitor market trends and adjust their strategies accordingly. Flexibility is key here — segmentation should never be static.
For example, if a sudden spike in mobile traffic is detected, campaigns can be optimised for mobile-first users.
Tools and technologies that help
Here are some key segmentation tools to support your efforts :
- Analytics platforms : Get insights into audience behaviour with Matomo. Track user interactions, such as website visits, clicks and time spent on pages, to identify patterns and segment users based on their online activity.
- CRM systems : Utilize customer records to create meaningful segments based on characteristics like purchase history or engagement levels.
- Marketing automation platforms : Streamline personalised messages by automating emails, social media posts or SMS campaigns for specific audience segments.
- Consent management tools : Collect and manage user consent, implement transparent data tracking and provide users with opt-out options.
- Survey tools : Gather first-party data directly from customers.
- Social listening solutions : Monitor conversations and brand mentions across social media to gauge audience sentiment.
Start segmenting and analysing audiences more deeply with Matomo
Modern consumers expect to get relevant content, and segmentation can make this possible.
But doing so in a privacy-sensitive way is not always easy. Organisations need to adopt an approach that doesn’t break regulations while still allowing them to segment their audiences.
That’s where Matomo comes in. Matomo champions privacy compliance while offering comprehensive insights and segmentation capabilities. It provides features for privacy control, enables cookieless configurations, and supports compliance with GDPR and other regulations — all without compromising user privacy.
Take advantage of Matomo’s 21-day free trial to explore its capabilities firsthand — no credit card required.
-
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: