コピペワールド

hirooka.pro

DG-STK4D

Atom x5-Z8550 (DG-STK4D) で FFmpeg + QSV (h264_qsv) を使用したリアルタイムエンコード

投稿日:

神奈川県綾瀬市のふるさと納税の返礼品として、Diginnos Stick DG-STK4D が届きました。6月上旬にふるさと納税をして、1ヶ月後くらいに届きました。60,000円 です。

ちなみに昨年は、長野県喬木村のふるさと納税の返礼品として、EPSON Endeavor TN21E を受け取っていました。

長野県喬木村にふるさと納税

DG-STK4D の CPU は Intel Atom x5-Z8550 で Cherry Trail であり、OS は Windows 10 Home 64bit です。ということは、これは QSV を使用できる、ということは、FFmpeg で h264_qsv でリアルタイムエンコードができるのでは、と試してみました。

Windows 64bit で QSV 対応の FFmpeg をビルドするのは過去にやっていました。

QSV (Quick Sync Video) に対応した Windows 64bit 用 FFmpeg のビルド

その時との差異としては、MSYS2 のバージョンが msys2-x86_64-20180531 になったのと、これを書いている時点で FFmpeg の最新のリリースバージョンである 4.0.1 を使用したことくらいです。

注意点としては、Atom だとビルドにすごく時間がかかります。configure と make で半日コースです。Atom ではない Windows 64bit マシンがあれば、そちらでビルドしたほうがよいです。

で、FFmpeg の exe ファイルができたところで h264_qsv のエンコードを行ってみました。

なんと、1920x1080 の解像度でビットレート 6Mbps で speed=3.37x です。Atom なのに。Windows を使うと、Atom でも QSV を使えてリアルタイムエンコードができるなんて。Linux だと Core シリーズじゃないとサポートされていないのに。

[highlight_basic].\\ffmpeg.exe -i .\sintel_trailer-1080p.mp4 -acodec aac -ab 128k -ar 48000
-ac 2 -s 1920x1080 -vcodec h264_qsv -init_hw_device qsv:hw -b:v 6000k output.mp4
ffmpeg version 4.0.1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 7.3.0 (Rev2, Built by MSYS2 project)
configuration: --enable-libmfx --disable-shared --enable-static --extra-ldflags=-static --extra-libs='-lsupc++ -lstdc++'
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
libswscale 5. 1.100 / 5. 1.100
libswresample 3. 1.100 / 3. 1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '.\sintel_trailer-1080p.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
creation_time : 1970-01-01T00:00:00.000000Z
title : Sintel Trailer
artist : Durian Open Movie Team
encoder : Lavf52.62.0
copyright : (c) copyright Blender Foundation | durian.blender.org
description : Trailer for the Sintel open movie project
Duration: 00:00:52.21, start: 0.000000, bitrate: 2240 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 2108 kb/s, 24 fps, 24 tbr, 24 tbn, 48 tbc (default)
Metadata:
creation_time : 1970-01-01T00:00:00.000000Z
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 126 kb/s (default)
Metadata:
creation_time : 1970-01-01T00:00:00.000000Z
handler_name : SoundHandler
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (h264_qsv))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
Output #0, mp4, to 'output.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
description : Trailer for the Sintel open movie project
title : Sintel Trailer
artist : Durian Open Movie Team
copyright : (c) copyright Blender Foundation | durian.blender.org
encoder : Lavf58.12.100
Stream #0:0(und): Video: h264 (h264_qsv) (avc1 / 0x31637661), nv12, 1920x1080, q=2-31, 6000 kb/s, 24 fps, 12288 tbn, 24 tbc (default)
Metadata:
creation_time : 1970-01-01T00:00:00.000000Z
handler_name : VideoHandler
encoder : Lavc58.18.100 h264_qsv
Side data:
cpb: bitrate max/min/avg: 0/0/6000000 buffer size: 0 vbv_delay: -1
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
creation_time : 1970-01-01T00:00:00.000000Z
handler_name : SoundHandler
encoder : Lavc58.18.100 aac
frame= 1253 fps= 81 q=-0.0 Lsize= 29851kB time=00:00:52.12 bitrate=4691.4kbits/s speed=3.37x
video:29018kB audio:800kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.111523%
[aac @ 00000000026cdc00] Qavg: 2941.320[/highlight_basic]

ただ、何が原因なのかわかりませんが、たまに下記のようなエラーが発生する場合があります。が、何回かリトライすればまたエンコードできるようになります。謎。

[highlight_bash][h264_qsv @ 0000000004609600] Error during encoding: device failed (-17)
Video encoding failed[/highlight_bash]

-DG-STK4D

Copyright© hirooka.pro , 2018 All Rights Reserved.