質問: ffmpegを使い動画をエンコードした後の保存場所がわからないです。 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 ``` これなんですが、保存場所は`streamfiles`というディレクトリですよね? 実行した場所は`/usr/share/nginx/www/streamfiles`でこのディレクトリ内に`test.mp4`が入っています。 またffmpegの実行結果は ``` 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 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 ``` となりました。 これはエンコードできていますよね? もし成功しているのであればエンコードで出来たファイルはどこに保存されているのでしょう、、、 分かるかた教えて欲しいです。 これがエラーで失敗していることはわかりました! 過去にクロスコンパイルのことも聞いていますが、今回は直接raspiで実行しています。
回答: `Illegal instruction` というのは、CPUが理解できない命令を実行しようとしたときに表示される**エラーです**。ffmpeg が検知して ffmpeg が表示するエラーメッセージは赤文字などわかりやすく表示されますが、これはより低レベルで起きているものなので、飾り気のないメッセージが突然現れて落ちます。 ので具体的には、 * ffmpeg(や関連ライブラリ) のバグを踏んだ * `./configure` のオプションを間違えている (特定のCPUにしかない命令で最適化をかけたりもするので) * クロスコンパイルで、ターゲット環境を指定せずに `./configure` した (オプションを指定しないと `./configure` する環境に合わせて最適化設定を行ってしまう) のいずれかではないでしょうか。 過去の質問を拝見すると色々試行錯誤されているようですが、最終的にどのようにしてlibx264やffmpegをビルドしたのかがわからないので、具体的にどの手順が間違っているかはわかりません。 ただ、libx264の `./configure` で `--extra-cflags='-march=armv6' --extra-ldflags='-march=armv6'` をつけないと未サポートの命令を使ってしまう(おそらく `Illegal instrution`)という話を見かけたので、ひょっとしたらこれで解決するかもしれません。