日産のカーナビ MP311D-W では、MP3の他にMPEG4が利用できると取扱説明書にあります。ここ以外のブログ(ウエブサイト)でもエンコード方法が紹介されていますが、 PC環境を Ubunto 18.10 に変更したので、CUI で ffmpeg を利用して、h.264(MPEG4 AVC) でエンコードする場合にハマった。よって、ここにメモを残しておきます。
次のコマンドで MP311D-W で再生できる h.264(MPEG4 AVC) に変換できます。
ffmpeg -i "${INPUT_FILE}" -vcodec libx264 -profile:v baseline -level 2.1 -s 400x240 -crf 21 -refs 1 -acodec aac -strict experimental -ac 2 -ab 64k -ar 44100 -f mp4 "${OUTPUT_FILE}"
まず、転載ではありますが、MP311D-W で利用可能な規格について触れておきます。 次のサイトを参考にさせていただきましたが、いくつか追加情報があります。
コーデック | ビットレート | フレームレート | 最大解像度 | プロファイル | フレーム参照距離 |
---|---|---|---|---|---|
MPEG4 | 216 kbps ~ 2.5 Mbps | 15 fps、30 fps *1 | 400 × 240 | Simple Profile Level 3 | Unknown |
H.264 | 216 kbps ~ 1.5 Mbps | 15 fps、30 fps *1 | 400 × 240 | Baseline Profile Level 2.1 | 1 Ref Frame(s) |
コーデック | ビットレート | サンプリングレート |
---|---|---|
AAC-LC | 8 kbps ~ 320 kbps | 16 kHz、22.05 kHz、24 kHz、32 kHz、44.1 kHz、48 kHz |
拡張子 | サイズ制限 |
---|---|
.MP4、.MKV、.m4v | |
- *1 30fps 以下だと任意の値を取れるかもしれない
- *2 1GB以上のファイルも再生できた
表が見づらいですが、話しを進めます。すべて重要なのですが、特筆すべき(ハマるところ)は、プロファイルとフレーム参照距離です。 特にオプションの "-refs" フレーム参照距離については、他のサイトでは触れられておりません。
えっ?まだわからないことがある?
次に ffmpeg の基本的な使い方が紹介されているサイトがあったので、紹介しておきます。
そこで気になるのが今回紹介したコマンドでは、明示的にオプションを指定しなかったけど、ちゃんと yuv420p で出力されていました。 参考までに "ffprobe" の出力を載せておきます。
ffprobe version 4.0.4-0ubuntu1 Copyright (c) 2007-2019 the FFmpeg developers built with gcc 8 (Ubuntu 8.2.0-7ubuntu1) configuration: --prefix=/usr --extra-version=0ubuntu1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared WARNING: library configuration mismatch avcodec configuration: --prefix=/usr --extra-version=0ubuntu1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared --enable-version3 --disable-doc --disable-programs --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libtesseract --enable-libvo_amrwbenc libavutil 56. 14.100 / 56. 14.100 libavcodec 58. 18.100 / 58. 18.100 libavformat 58. 12.100 / 58. 12.100 libavdevice 58. 3.100 / 58. 3.100 libavfilter 7. 16.100 / 7. 16.100 libavresample 4. 0. 0 / 4. 0. 0 libswscale 5. 1.100 / 5. 1.100 libswresample 3. 1.100 / 3. 1.100 libpostproc 55. 1.100 / 55. 1.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '4.m4v': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf58.12.100 Duration: 00:04:00.07, start: 0.000000, bitrate: 302 kb/s Chapter #0:0: start 0.000000, end 33.992000 Metadata: title : Intro Chapter #0:1: start 33.992000, end 63.939000 Metadata: title : Credits Chapter #0:2: start 63.939000, end 229.980000 Metadata: title : Episode Chapter #0:3: start 229.980000, end 239.948000 Metadata: title : Preview Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 400x240 [SAR 16:15 DAR 16:9], 232 kb/s, 23.98 fps, 23.98 tbr, 11988 tbn, 47.95 tbc (default) Metadata: handler_name : VideoHandler Stream #0:1(jpn): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 64 kb/s (default) Metadata: handler_name : SoundHandler Stream #0:2(eng): Data: bin_data (text / 0x74786574), 0 kb/s Metadata: handler_name : SubtitleHandlerえっ?もっとためになる情報が見たい?仕方ありませんねぇ。
Format : MPEG-4 Format profile : Base Media Codec ID : isom (isom/iso2/avc1/mp41) File size : 59.5 MiB Duration : 23 min 59 s Overall bit rate : 347 kb/s Writing application : Lavf58.12.100 Video ID : 1 Format : AVC Format/Info : Advanced Video Codec Format profile : Baseline@L2.1 Format settings : 2 Ref Frames Format settings, CABAC : No Format settings, ReFrames : 2 frames Codec ID : avc1 Codec ID/Info : Advanced Video Coding Duration : 23 min 59 s Bit rate : 278 kb/s Width : 400 pixels Height : 240 pixels Display aspect ratio : 16:9 Frame rate mode : Constant Frame rate : 23.976 (24000/1001) FPS Color space : YUV Chroma subsampling : 4:2:0 Bit depth : 8 bits Scan type : Progressive Bits/(Pixel*Frame) : 0.121 Stream size : 47.7 MiB (80%) Writing library : x264 core 152 r2854 e9a5903 Encoding settings : cabac=0 / ref=2 / deblock=1:1:1 / analyse=0x1:0x111 / me=hex / subme=7 / psy=1 / psy_rd=0.40:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=0 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=6 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=0 / weightp=0 / keyint=250 / keyint_min=23 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=21.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:0.60 Audio ID : 2 Format : AAC Format/Info : Advanced Audio Codec Format profile : LC Codec ID : mp4a-40-2 Duration : 23 min 59 s Duration_LastFrame : -9 ms Bit rate mode : Constant Bit rate : 64.4 kb/s Channel(s) : 2 channels Channel positions : Front: L R Sampling rate : 44.1 kHz Frame rate : 43.066 FPS (1024 SPF) Compression mode : Lossy Stream size : 11.1 MiB (19%) Language : Japanese Default : Yes Alternate group : 1
えっ?もっと実用的なものがほしい?それでは、シェルコマンドを残しておきます。
これは、引数で得たファイルをエンコードして、実行ディレクトリに拡張子を ".m4v" に変更して保存するシェルスクリプトです。かなり危険なものとなっておりますので、自己責任でお願いします。
#/bin/bash for P in "$@"; do VAL1=`echo $P | awk -F/ '{print $NF}'` VAL2=`echo $VAR1 | sed -e "s/\.[^\.]*$/\.m4v/g"` echo -en '\e[34m' echo -en $VAL2 echo -e '\e[m' #ffmpeg -y -i "${P}" -vcodec libx264 -profile:v baseline -level 2.1 -tune animation -s 400x240 -crf 22 -refs 2 -acodec aac -strict experimental -ac 2 -ab 64k -ar 44100 -f mp4 "${VAL2}" ffmpeg -i "${P}" -vcodec libx264 -profile:v baseline -level 2.1 -s 400x240 -crf 21 -refs 1 -acodec aac -strict experimental -ac 2 -ab 64k -ar 44100 -preset veryslow -f mp4 "hoge-${VAL2}" done
※コメント投稿者のブログIDはブログ作成者のみに通知されます