Help us understand the problem. What is going on with this article?

AndroidアプリにFFmpegを組み込んで、動画にウォーターマークを追加する

More than 5 years have passed since last update.

ffmpeg Advent Calendar 2014 7日目です。
初投稿ですが、よろしくお願いします。

NDKビルド環境は
Windows7 Professional 64bit
VMware Player 6.0.3
Ubuntu 12.04 64bit
Eclipse Kepler Service Release 2
Android NDK Revision 10c
です

事前準備

FFmpegでウォーターマークを追加する動画(mp4)と画像ファイル(png)

NDKビルド環境構築

VMwarePlayerとUbuntu 12.04(64bit)インストール

VMware PlayerをWindows7にインストールする

OpenJDK 6,7インストール

How to download and install prebuilt OpenJDK packages:OpenJDK公式

sudo apt-get -yV install openjdk-7-jre
sudo apt-get -yV install openjdk-6-jre

OpenJDKを使うように設定

sudo update-java-alternatives --jre -s `sudo update-java-alternatives -l | grep 1.7.0 | awk '{print $1}'`
sudo update-java-alternatives --jre-headless -s `sudo update-java-alternatives -l | grep 1.7.0 | awk '{print $1}'`
sudo update-java-alternatives -s `sudo update-java-alternatives -l | grep 1.7.0 | awk '{print $1}'` 

設定の確認とJAVA_HOME設定

Ubuntu で Android NDK を使ってみる

  • 次のコマンドを実行し、/usr/lib/jvm/java-7-openjdk-amd64...の行に設定されていることを確認
sudo update-alternatives --config java 
  • javaのバージョン確認
update-java-alternatives -l 
java -version 
  • 環境変数 JAVA_HOME の設定(~/.bashrc の設定例)
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export PATH=/usr/lib/jvm/java-7-openjdk-amd64/jre/bin:$PATH
export CLASSPATH=.:/usr/lib/jvm/java-7-openjdk-amd64/lib

Android SDKインストール

Ubuntu 12.04 で Android SDK のダウンロードとインストールとテスト実行

ダウンロードしたファイルを解凍(ここでは/usr/localを指定)

cd /usr/local
sudo tar -xvzof /tmp/android-sdk_r23.0.2-linux.tgz
  • ファイルの所有者の変更
sudo chown -R <ユーザ名> /usr/local/android-sdk-linux
  • AVD Manager の起動

Android SDK Platform-tools と Android 2.3.3 をインストールする

cd /usr/local
cd android-sdk-linux
sudo ./tools/android
  • 環境変数の設定(~/.bashrc の設定例)
export PATH=$PATH:/usr/local/android-sdk-linux/tools:/usr/local/android-sdk-linux/platform-tools

Eclipseと各種プラグイン、Pleiades(日本語化プラグイン)のインストール

sudo apt-get -yV install eclipse
sudo apt-get -yV install eclipse-cdt
sudo apt-get -yV install eclipse-jdt
sudo apt-get -yV install eclipse-sdk
sudo apt-get -yV install eclipse-platform
sudo apt-get -yV install eclipse-platform-data
sudo apt-get -yV install eclipse-plugin-cvs
sudo apt-get -yV install eclipse-rcp
sudo apt-get -yV install pleiades 
  • Pleiadesの設定を/usr/local/eclipse/eclipse.iniに追加する
-javaagent:/usr/local/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
  • Eclipseを試しに起動する
eclipse

ADTインストール

Ubuntu で Eclipst と Eclipse の ADT プラグインのダウンロードとインストール
「Eclipse ADT (Eclipse のプラグイン Android Development Tools) のダウンロードとインストール」
を参考に実施

CDT(C/C++プログラミング環境)インストール

Eclipse に C/C++ 開発ツール (CDT) をインストール
「C/C++ 開発ツール (CDT) のインストール手順 」を参考に実施

NDKのインストール

Ubuntu で Android NDK を使ってみる を参考に実施

FFmpegライブラリ移植

今回は、FFmpegのAndroid向けビルドパッケージhalfninja:android-ffmpeg-x264
Forkリポジトリからm4fg:android-ffmpeg-x264をお借りしました。

Gitインストール

sudo apt-get -yV install git-core

Gitからm4fg:android-ffmpeg-x264をクローン

git clone https://github.com/m4fg/android-ffmpeg-x264.git --recursive

初期設定

環境変数にNDKのパスが設定されていることを確認して実行
(例:export NDK=/usr/local/android-ndk-r10c)

cd Project/jni
./create_toolchain.sh

プロジェクトビルド

./config_make_everything.sh
ndk-build

ビルド正常終了後、libs/armeabi/videokit.soができることを確認します。

Eclipseにインポート

Eclipseにソースコードを取り込むには

AndroidManifest.xmlにパーミッションを追加

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Videokit.javaを少しだけ修正

package uk.co.halfninja.videokit;

public final class Videokit {

  static {
    System.loadLibrary("videokit");
  }

//public native void run(String[] args);
  public native void run(String args);

}

FFmepgコマンド実行

一定の時間間隔でオーバーレイ画像を表示する方法:superuser

Android端末の/mnt/sdcardに
ウォーターマークを追加する動画(sample.mp4)と画像(sample.png)を設置して、
下記のメソッドを実行します。

import uk.co.halfninja.videokit.Videokit;
    Videokit videoKit = new Videokit();

    String strj = new String("ffmpeg\n");
    strj = strj + "-i\n/mnt/sdcard/sample.mp4\n";
    strj = strj + "-i\n/mnt/sdcard/sample.png\n";
    strj = strj + "-filter_complex\n[0:v][1:v]overlay=main_w-overlay_w-10:main_h-overlay_h-10[out]\n";
    strj = strj + "-map\n[out]\n";
    strj = strj + "-map\n0:a\n";
    strj = strj + "-codec:a\ncopy\n";
    strj = strj + "/mnt/sdcard/output.mp4";
    videoKit.run(strj);

/mnt/sdcardにoutput.mp4が出力されていれば成功です。

hayabon
王様のアイデア研究所室長付き。 Android/Java/FFmpeg/OpenCV/フロントエンド(JS+CSS+html)/C/JetsonTK1/組み込みマイコン/PIC/DSP/FPGA
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした