質問: 過去にffmpegの`make`について質問しました。 そこで頂いた回答を元に、ffmpegの`./configure`に`--extra-cflags='-march=armv6' --extra-ldflags='-march=armv6'`を指定して`make`しました。 そのffmpegを使って、 `ffmpeg -i test.mp4 -threads 2 -codec:v libx264 -s:v 1280x720 -aspect:v 16:9 -b:v 256k -map 0 -f segment -segment_format mpegts -segment_time 10 -segment_list stream.m3u8 streamfiles/stream%03d.ts` としたところ、`Illegal instruction`というエラーが出ました。 このエラーはどうやらffmpegではなくてgccからのエラーらしいのですが、どこが引っかかっているのでしょうか? 実行結果 ``` ffmpeg version N-75926-gce0834b Copyright (c) 2000-2015 the FFmpeg developers built with gcc 4.6 (Debian 4.6.3-14+rpi1) configuration: --arch=armel --target-os=linux --enable-shared --enable-gpl --enable-libx264 --enable-nonfree --extra-cflags='-march=armv6' --extra-ldflags='-march=armv6' libavutil 55. 3.100 / 55. 3.100 libavcodec 57. 5.100 / 57. 5.100 libavformat 57. 3.100 / 57. 3.100 libavdevice 57. 0.100 / 57. 0.100 libavfilter 6. 11.100 / 6. 11.100 libswscale 4. 0.100 / 4. 0.100 libswresample 2. 0.100 / 2. 0.100 libpostproc 54. 0.100 / 54. 0.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf56.40.100 Duration: 00:00:03.28, start: 0.000000, bitrate: 10159 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 10156 kb/s, 25 fps, 25 tbr, 1200k tbn, 2400k tbc (default) Metadata: handler_name : VideoHandler Illegal instruction ``` 使っている機材はRaspberry Pi B+ OSはRaspbian です。
回答: ここで `illegal instruction` エラーは、おそらく `libx264` の `common/arm/quant-a.S` 中にある `rbit` 命令によって出ているのだと思われます。 `rbit` は `armv7` の命令なので `raspberry pi 2 model B` なら実行できる (armv7) が `raspberry pi model B+` では実行できない (armv6) わけです。 要するに現在の `libx264` は `raspberry pi 2 model B` 向けソースとなっていて `raspberry pi model B+` には完全自動対応でない、ってことです。 オイラが試験したのは libx264-snapshot-20151012-2245 です。 `libx264` を下記のように再構築してみてください。 ``` $ make distclean (一度構築済みなら) $ ./configure --enable-shared --enable-static --disable-asm $ make $ sudo make install ``` `--disable-asm` によって `quant-a.S` を使わなくなります。 もしかしたら `libx264` の `./configure` に追加オプション `--extra-cflags='-mcpu=arm1176jzf-s' --extra-ldflags='-mcpu=arm1176jzf-s'` をつけると `raspberry pi model B+` により適合する機械語を生成するかもしれません。 (`raspberry pi model B+` の CPU は `arm1176jzf-s` です) `ffmpeg` のほうに `--extra-cflags` 等は不要だと思います(つけてもかまいませんが) さてオイラんとこでは `ffmpeg` までビルドはできたんだけどテストできる動画が無いし そもそも `raspberry pi 2 model B` なら動いて当たり前っぽいし これ以上は試しようがありません。ぜひ結果報告してください。