なんとな~くしあわせ?の日記

JavaとかAWSの設定とかをメモする技術ブログ

ffmpegでエンコード

再びffmpegを使ってアニメのエンコをしている。
だけど自力コンパイルはもう面倒臭いのでyum使う。らくらく。
しかし現状libfaacは自力で組み込まなくてはらしい。

そこで以下の情報を参考に、aacのオプションを変えてみる
最近のFFmpegで動画の音声にMP3やAACを指定する方法 | TeraDas-テラダス

# old
-acodec libfaac
# new
-acodec aac -strict experimental

これで、今までのプリセットを使いながらエンコードができる(音質は悪いらしいが)。

適当な手順

使用しているOSとカーネルのバージョン確認
# uname -a
Linux cathymaiden.moe.hm 3.6.11-1.fc17.x86_64 #1 SMP Mon Dec 17 22:16:35 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
# yum install ffmpeg x264

ffmpegのバージョン確認
# ffmpeg --version
ffmpeg version 0.10.6 Copyright (c) 2000-2012 the FFmpeg developers
  built on Oct 31 2012 22:24:06 with gcc 4.7.2 20120921 (Red Hat 4.7.2-2)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --enable-bzlib --disable-crystalhd --enable-gnutls --enable-libass --enable-libcdio --enable-libcelt --enable-libdc1394 --disable-indev=jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopenjpeg --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab --enable-avfilter --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
  libavutil      51. 35.100 / 51. 35.100
  libavcodec     53. 61.100 / 53. 61.100
  libavformat    53. 32.100 / 53. 32.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 61.100 /  2. 61.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0.  6.100 /  0.  6.100
  libpostproc    52.  0.100 / 52.  0.100

以下の内容で保存

# vim /usr/share/ffmpeg/libx264-hq-ts.ffpreset
level=41
crf=25
coder=1
flags=+loop
cmp=+chroma
partitions=+parti8x8+parti4x4+partp8x8+partb8x8
me_method=umh
subq=7
me_range=16
g=250
keyint_min=25
sc_threshold=40
i_qfactor=0.71
b_strategy=1
qmin=10
rc_eq='blurCplx^(1-qComp)'
bf=16
bidir_refine=1
refs=6
deblock=0:0


適当なスクリプト。ファイルの出力先は各自設定してね。

# vim encode.sh

#!/bin/bash

files=(`ls -1`)

# インデックスに @ を指定して、全ての要素を for 文の値リストに指定

for file in ${files[@]}
do
  filepath=`pwd`/$file
  filename=${file%.*}
  echo "エンコード対象ファイル: $filepath"

  /usr/bin/ffmpeg -y -i $filepath -f mp4 -vcodec libx264      \
  -fpre /usr/share/ffmpeg/libx264-hq-ts.ffpreset               \
  -r 30000/1001 -aspect 16:9 -s 1280x720 -bufsize 20000k -maxrate 25000k   \
  -acodec aac -strict experimental -ac 2 -ar 48000 -ab 128k -threads 4     /home4/videodir/"${filename}".mp4
done
exit 0