Closed6
webmをffmpegで再変換する時にalphaが消えてしまう
nodeのfluent-ffmpegを使ってwebmの動画サイズを小さくするプログラムを作っていた
ffmpeg("from.webm").size("50%").save("to.webm");
できた動画を見てみるとアルファチャンネルが消えていた
上記の結果実行されるコマンドを見てみる
ffmpeg("from.webm").size("50%").on("start", (cmd) => console.log(cmd)).save("to.webm");
結果
ffmpeg -i from.webm -y -filter:v scale=w=trunc(iw*0.5/2)*2:h=trunc(ih*0.5/2)*2 to.webm
上記をターミナルで実行してログを見てみる
...
Input #0, matroska,webm, from 'from.webm':
Metadata:
encoder : libwebm-0.2.1.0
creation_time : 2023-03-24T21:36:59.000000Z
Duration: 00:00:02.00, start: 0.000000, bitrate: 877 kb/s
Stream #0:0(eng): Video: vp9 (Profile 0), yuv420p(tv), 1920x1080, SAR 1:1 DAR 16:9, 30 fps, 30 tbr, 1k tbn (default)
Metadata:
alpha_mode : 1
Stream mapping:
Stream #0:0 -> #0:0 (vp9 (native) -> vp9 (libvpx-vp9))
...
どうも入力がyuv420pと認識されるようなのでyuva420pと認識させたい
およそ6時間程いろいろ調べたが解決しない
全然関係ない記事内に以下の記載を見つける
Note that -vcodec libvpx is before the input, not after it.
-vcodecは書く位置によって入力コーデックを指定できる?
やってみる
ffmpeg -c:v libvpx-vp9 -i from.webm -y -filter:v scale=w=trunc(iw*0.5/2)*2:h=trunc(ih*0.5/2)*2 to.webm
Input #0, matroska,webm, from 'from.webm':
Metadata:
encoder : libwebm-0.2.1.0
creation_time : 2023-03-24T21:36:59.000000Z
Duration: 00:00:02.00, start: 0.000000, bitrate: 877 kb/s
Stream #0:0(eng): Video: vp9 (Profile 0), yuva420p(tv), 1920x1080, SAR 1:1 DAR 16:9, 30 fps, 30 tbr, 1k tbn (default)
Metadata:
alpha_mode : 1
[libvpx-vp9 @ 0x124605de0] v1.12.0
Stream mapping:
Stream #0:0 -> #0:0 (vp9 (libvpx-vp9) -> vp9 (libvpx-vp9))
yuva420pになった!
無事アルファチャンネルを維持したまま変換できました
このスクラップは2023/07/21にクローズされました