ffmpegでハードウェアエンコードをする
いろいろな場所でハードウェアエンコードしてみる
H264 -> H264 (圧縮) を試した結果
Intel Arc A380
code: 実行したコマンド
ffmpeg -hwaccel qsv -i "$input_file" \
-c:v h264_qsv -preset slow -profile:v main -b:v 2M -maxrate 2.5M -bufsize 5M \
-c:a aac -b:a 128k \
"encoded.mp4"
code:実行結果(結果部分だけ抜粋)
Output #0, mp4, to 'encoded.mp4':
Metadata:
encoder : Lavf60.16.100
Stream #0:0: Video: h264 (avc1 / 0x31637661), qsv(tv, progressive), 1920x1080 SAR 1:1 DAR 16:9, q=2-31, 2000 kb/s, 60 fps, 15360 tbn
Metadata:
encoder : Lavc60.31.102 h264_qsv
Side data:
cpb: bitrate max/min/avg: 2500000/0/2000000 buffer size: 5000000 vbv_delay: N/A
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
Metadata:
encoder : Lavc60.31.102 aac
h264_qsv @ 0x5b36c3cae540 A decode call did not consume any data: expect more data at input (-10)ed=8.71x
Last message repeated 2 times
out#0/mp4 @ 0x5b36c3dafb40 video:1365990kB audio:85035kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.614283%
frame=330161 fps=522 q=26.0 Lsize= 1459938kB time=01:31:42.63 bitrate=2173.5kbits/s dup=2 drop=0 speed=8.71x
aac @ 0x5b36c3cb1480 Qavg: 2257.028
________________________________________________________
Executed in 632.31 secs fish external
usr time 521.85 secs 1.13 millis 521.85 secs
sys time 69.01 secs 0.08 millis 69.01 secs
Nvidia Quadro P4000
code:実行したコマンド
ffmpeg -hwaccel cuda -i "$input_file" \
-c:v h264_nvenc -preset slow -profile:v main -b:v 2M -maxrate 2.5M -bufsize 5M \
-c:a aac -b:a 128k \
"encoded.mp4"
code:実行結果
Output #0, mp4, to 'encoded.mp4':
Metadata:
encoder : Lavf58.29.100
Stream #0:0: Video: h264 (h264_nvenc) (Main) (avc1 / 0x31637661), nv12, 1920x1080 SAR 1:1 DAR 16:9, q=-1--1, 2000 kb/s, 60 fps, 15360 tbn, 60 tbc
Metadata:
encoder : Lavc58.54.100 h264_nvenc
Side data:
cpb: bitrate max/min/avg: 2500000/0/2000000 buffer size: 5000000 vbv_delay: -1
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
Metadata:
encoder : Lavc58.54.100 aac
frame=330161 fps=378 q=28.0 Lsize= 1333132kB time=01:31:42.66 bitrate=1984.7kbits/s dup=2 drop=0 speed= 6.3x
video:1242962kB audio:84158kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.452984%
aac @ 0x558a56164340 Qavg: 2049.356
________________________________________________________
Executed in 874.15 secs fish external
usr time 439.10 secs 263.00 micros 439.10 secs
sys time 56.70 secs 63.00 micros 56.70 secs
Intel Arcの方が1.5倍ほど早かった。
AV1を試した結果
Intel Arc A380
code:実行したコマンド
ffmpeg -hwaccel qsv -i "$input_file" \
-c:v av1_qsv -preset slow -b:v 2M -maxrate 2.5M -bufsize 5M \
-c:a libopus -b:a 128k \
"output.webm"
code:実行結果
Output #0, webm, to 'output.webm':
Metadata:
encoder : Lavf60.16.100
Stream #0:0: Video: av1, qsv(tv, progressive), 1920x1080 SAR 1:1 DAR 16:9, q=2-31, 2000 kb/s, 60 fps, 1k tbn
Metadata:
encoder : Lavc60.31.102 av1_qsv
Stream #0:1(eng): Audio: opus, 48000 Hz, stereo, flt, 128 kb/s
Metadata:
encoder : Lavc60.31.102 libopus
h264_qsv @ 0x59958ddab540 A decode call did not consume any data: expect more data at input (-10)
Last message repeated 2 times
out#0/webm @ 0x59958deacb40 video:1286977kB audio:86331kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.247797%
frame=330159 fps=544 q=-0.0 Lsize= 1376711kB time=01:31:42.66 bitrate=2049.6kbits/s speed=9.06x
________________________________________________________
Executed in 607.69 secs fish external
usr time 346.14 secs 0.00 micros 346.14 secs
sys time 81.45 secs 739.00 micros 81.45 secs
Nvidia Quadro P4000
AV1に対応していないため実施できなかった
AV1のほうが遅くなると思っていたが、H264よりAV1のほうが速かった。
H264 -> H265 を試した結果
Intel Arc A380
code:実行したコマンド
ffmpeg -hwaccel qsv -i "$input_file" \
-c:v hevc_qsv -preset slower -profile:v main -b:v 2M -maxrate 2.5M -bufsize 5M \
-c:a aac -b:a 128k \
"encoded_h265.mp4"
code:実行結果
Output #0, mp4, to 'encoded_h265.mp4':
Metadata:
encoder : Lavf60.16.100
Stream #0:0: Video: hevc (hev1 / 0x31766568), qsv(tv, progressive), 1920x1080 SAR 1:1 DAR 16:9, q=2-31, 2000 kb/s, 60 fps, 15360 tbn
Metadata:
encoder : Lavc60.31.102 hevc_qsv
Side data:
cpb: bitrate max/min/avg: 2500000/0/2000000 buffer size: 5000000 vbv_delay: N/A
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
Metadata:
encoder : Lavc60.31.102 aac
h264_qsv @ 0x5950ad3b7540 A decode call did not consume any data: expect more data at input (-10)ed=4.74x
Last message repeated 2 times
out#0/mp4 @ 0x5950ad4b8b40 video:1255314kB audio:85035kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.664928%
frame=330161 fps=284 q=-0.0 Lsize= 1349261kB time=01:31:42.63 bitrate=2008.7kbits/s dup=2 drop=0 speed=4.74x
aac @ 0x5950ad5b8f40 Qavg: 2257.028
________________________________________________________
Executed in 19.37 mins fish external
usr time 487.88 secs 0.00 micros 487.88 secs
sys time 80.47 secs 824.00 micros 80.47 secs
Nvidia Quadro P4000
code:実行したコマンド
ffmpeg -hwaccel cuda -i "$input_file" \
-c:v hevc_nvenc -preset slow -profile:v main -b:v 2M -maxrate 2.5M -bufsize 5M \
-c:a aac -b:a 128k \
"encoded_h265.mp4"
code:実行結果
Output #0, mp4, to 'encoded_h265.mp4':
Metadata:
encoder : Lavf58.29.100
Stream #0:0: Video: hevc (hevc_nvenc) (Main) (hev1 / 0x31766568), nv12, 1920x1080 SAR 1:1 DAR 16:9, q=-1--1, 2000 kb/s, 60 fps, 15360 tbn, 60 tbc
Metadata:
encoder : Lavc58.54.100 hevc_nvenc
Side data:
cpb: bitrate max/min/avg: 2500000/0/2000000 buffer size: 5000000 vbv_delay: -1
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
Metadata:
encoder : Lavc58.54.100 aac
frame=330161 fps=268 q=28.0 Lsize= 1302774kB time=01:31:42.66 bitrate=1939.5kbits/s dup=2 drop=0 speed=4.46x
video:1212604kB audio:84158kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.463595%
aac @ 0x5624b655b340 Qavg: 2049.356
________________________________________________________
Executed in 20.57 mins fish external
usr time 451.34 secs 0.00 micros 451.34 secs
sys time 26.91 secs 576.00 micros 26.91 secs
Intel Arcのほうがちょっとだけ速かった