モノトーンの伝説日記

Apex Legends, Splatoon, Programming, and so on...

<mini> 保存用エンコード x264 memo [updated] ~ Drag'n'drop でエンコード♪

x264-10b --profile high422 --preset slow --crf 18
 --no-dct-decimate --no-fast-pskip --colorprim bt709 --transfer bt709 --colormat
rix bt709 --input-depth 16 --output-csp i422 -o rawvideo.264 from.avs
muxer -i rawvideo.264 -o videoonly.mp4
ffmpeg -i from.avi" -acodec copy audioonly.wav
qaac -A audioonly.wav
remuxer -i videoonly.mp4 -i audioonly.m4a -o to.mp4

できるだけ劣化を少なくマスターとして使える品質を残した状態にしたい! みたいなノリ。あと L-SMASH で wav ぶちこんで mp4 作るコマンドラインも作らんといけんね。

L-SMASH とか ffmpeg とか qaac 導入。10 bit カラーでエンコされてしまう問題がある。なんとかしないと、データ量もったいない。

追記

 ドラッグアンドドロップでスタジオ品質ビデオを自動作成しちゃうバッチファイルの作成をした。

@echo off
set ORIGINAL_FILEPATH=%~1
set BASE_FILEPATH=%~d1%~p1%~n1\
set AVS_FILEPATH=%BASE_FILEPATH%avisynth.avs
set RAW264_FILEPATH=%BASE_FILEPATH%rawvideo.264
set VIDEOONLY_FILEPATH=%BASE_FILEPATH%videoonly.mp4
set WAVE_FILEPATH=%BASE_FILEPATH%audioonly.wav
set AUDIOONLY_FILEPATH=%BASE_FILEPATH%audioonly.m4a
set OUTPUT_FILEPATH=%~d1%~p1%~n1.mp4
mkdir "%BASE_FILEPATH%"
echo AviSource("%ORIGINAL_FILEPATH%").ConvertToYV16(matrix = "Rec709") > "%AVS_FILEPATH%"
call x264 --profile high422 --preset slow --crf 18 --no-dct-decimate --no-fast-pskip --colorprim bt709 --transfer bt709 --colormatrix bt709 --output-csp i422 -o "%RAW264_FILEPATH%" "%AVS_FILEPATH%"
call muxer -i "%RAW264_FILEPATH%" -o "%VIDEOONLY_FILEPATH%"
call ffmpeg -i "%ORIGINAL_FILEPATH%" -acodec copy "%WAVE_FILEPATH%"
call qaac -A "%WAVE_FILEPATH%" -o "%AUDIOONLY_FILEPATH%"
call remuxer -i "%VIDEOONLY_FILEPATH%" -i "%AUDIOONLY_FILEPATH%" -o "%OUTPUT_FILEPATH%"
pause

 UT Video を使ったマスターから自動で生成することができるのを確認。

 AviSynth (当方では AviSynth+ で動作確認), x264, L-SMASH, ffmpeg, qaac を用いて、AVI [UT Video+LPCM 2ch] から MP4 [H.264/MPEG-4 Part 10 AVC+ALAC] に変換するバッチファイル。ドラッグアンドドロップで自動手続してくれます。

 crf は 18 になってるけど、18 から 28 の間でお好みで。high422 profile (YUV 4:2:2) を用いるようにしてるので、可逆圧縮レベルまではいかないものの、高品質で色情報を保存できる。

 パスが通ってることが前提。自分は avbinary というフォルダーを作って、x264.bat を作り最新版にリダイレクトするようにしています (ファイル名で複数のバージョンを管理するため)。中身はこんな感じで行ける。

@echo off
call "[yourpath]\x264-r2538-121396c" %*

 これをすることで、複数のバージョンを維持しながら、コマンド自体は常に最新版を維持できるので便利。シンプルだけど有効的です。

 以上。最近 1280x720p を録画する機会が多くてできるだけ劣化させたくないけど、HDD つらい… ってことで作りました。ちなみに 340 GB のファイルが 12.5 GB にほぼ無劣化で落とせるのでよいです (ただし厳密に比較すると劣化している部分はあると思います)。

さらに追記

 VLC2ch にうまくミックスできないみたいなので視聴用に 2ch 音声も加えた。通常は 3dB の減衰をちゃんとするわけだけど、Splatoon だとしないほうがいいみたいなのでやめた。

@echo off
set ORIGINAL_FILEPATH=%~1
set BASE_FILEPATH=%~d1%~p1%~n1\
set AVS_FILEPATH=%BASE_FILEPATH%avisynth.avs
set RAW264_FILEPATH=%BASE_FILEPATH%rawvideo.264
set VIDEOONLY_FILEPATH=%BASE_FILEPATH%videoonly.mp4
set WAVE_6CH_FILEPATH=%BASE_FILEPATH%audioonly6.wav
set AUDIOONLY_6CH_FILEPATH=%BASE_FILEPATH%audioonly6.m4a
set WAVE_2CH_FILEPATH=%BASE_FILEPATH%audioonly2.wav
set AUDIOONLY_2CH_FILEPATH=%BASE_FILEPATH%audioonly2.m4a
set OUTPUT_FILEPATH=%~d1%~p1%~n1.mp4
mkdir "%BASE_FILEPATH%"
echo AviSource("%ORIGINAL_FILEPATH%").ConvertToYV16(matrix = "Rec709") > "%AVS_FILEPATH%"
echo x264 --profile high422 --preset slow --crf 18 --no-dct-decimate --no-fast-pskip --colormatrix bt709 --output-csp i422 -o "%RAW264_FILEPATH%" "%AVS_FILEPATH%"
call x264 --profile high422 --preset slow --crf 18 --no-dct-decimate --no-fast-pskip --colormatrix bt709 --output-csp i422 -o "%RAW264_FILEPATH%" "%AVS_FILEPATH%"
echo ---
echo muxer -i "%RAW264_FILEPATH%"?fps=60000/1001 -o "%VIDEOONLY_FILEPATH%"
call muxer -i "%RAW264_FILEPATH%"?fps=60000/1001 -o "%VIDEOONLY_FILEPATH%"
echo ---
echo ffmpeg -i "%ORIGINAL_FILEPATH%" -acodec copy "%WAVE_6CH_FILEPATH%"
call ffmpeg -i "%ORIGINAL_FILEPATH%" -acodec copy "%WAVE_6CH_FILEPATH%"
echo ---
echo qaac -A "%WAVE_6CH_FILEPATH%" -o "%AUDIOONLY_6CH_FILEPATH%"
call qaac -A "%WAVE_6CH_FILEPATH%" -o "%AUDIOONLY_6CH_FILEPATH%"
echo ---
echo ffmpeg -i "%ORIGINAL_FILEPATH%" -ac 2 -af "pan=stereo| c0<c0+0.7071067811865475*c3 | c1<c1+0.7071067811865475*c3" "%WAVE_2CH_FILEPATH%"
call ffmpeg -i "%ORIGINAL_FILEPATH%" -ac 2 -af "pan=stereo| c0<c0+0.7071067811865475*c3 | c1<c1+0.7071067811865475*c3" "%WAVE_2CH_FILEPATH%"
echo ---
echo qaac -A "%WAVE_6CH_FILEPATH%" -o "%AUDIOONLY_2CH_FILEPATH%"
call qaac -A "%WAVE_6CH_FILEPATH%" -o "%AUDIOONLY_2CH_FILEPATH%"
echo ---
echo remuxer -i "%VIDEOONLY_FILEPATH%" -i "%AUDIOONLY_6CH_FILEPATH%" -i "%AUDIOONLY_2CH_FILEPATH%" -o "%OUTPUT_FILEPATH%"
call remuxer -i "%VIDEOONLY_FILEPATH%" -i "%AUDIOONLY_6CH_FILEPATH%" -i "%AUDIOONLY_2CH_FILEPATH%" -o "%OUTPUT_FILEPATH%"
pause

もっとさらに追記

 動画エンコに時間がかかるけど音声変換も ffmpeg だとクッソ時間かかるので、音声と映像を並列にエンコードするようにした。

2sutudiovideo(multi).bat

@echo off
set ORIGINAL_FILEPATH=%~1
set BASE_FILEPATH=%~d1%~p1%~n1\
set OUTPUT_FILEPATH=%~d1%~p1%~n1.mp4
set VIDEOONLY_FILEPATH=%BASE_FILEPATH%videoonly.mp4
set AUDIOONLY_6CH_FILEPATH=%BASE_FILEPATH%audioonly6.m4a
set AUDIOONLY_2CH_FILEPATH=%BASE_FILEPATH%audioonly2.m4a
mkdir "%BASE_FILEPATH%"
echo start /high /min videoenc.bat "%BASE_FILEPATH%"
start /high /min videoenc.bat "%BASE_FILEPATH%"
echo start /min audioenc6.bat "%BASE_FILEPATH%"
start /min audioenc6.bat "%BASE_FILEPATH%"
echo start /min audioenc2.bat "%BASE_FILEPATH%"
start /min audioenc2.bat "%BASE_FILEPATH%"
:loop
timeout -t 30
if not exist "%VIDEOONLY_FILEPATH%" goto loop
if not exist "%AUDIOONLY_6CH_FILEPATH%" goto loop
if not exist "%AUDIOONLY_2CH_FILEPATH%" goto loop
echo remuxer -i "%VIDEOONLY_FILEPATH%" -i "%AUDIOONLY_6CH_FILEPATH%" -i "%AUDIOONLY_2CH_FILEPATH%" -o "%OUTPUT_FILEPATH%"
call remuxer -i "%VIDEOONLY_FILEPATH%" -i "%AUDIOONLY_6CH_FILEPATH%" -i "%AUDIOONLY_2CH_FILEPATH%" -o "%OUTPUT_FILEPATH%"
pause

videoenc.bat

@echo off
set BASE_FILEPATH=%~1
set AVS_FILEPATH=%BASE_FILEPATH%avisynth.avs
set RAW264_FILEPATH=%BASE_FILEPATH%rawvideo.264
set VIDEOONLY_FILEPATH=%BASE_FILEPATH%videoonly.mp4
echo AviSource("%ORIGINAL_FILEPATH%").ConvertToYV16(matrix = "Rec709") > "%AVS_FILEPATH%"
echo x264 --profile high422 --preset slow --crf 18 --no-dct-decimate --no-fast-pskip --colormatrix bt709 --output-csp i422 -o "%RAW264_FILEPATH%" "%AVS_FILEPATH%"
call x264 --profile high422 --preset slow --crf 18 --no-dct-decimate --no-fast-pskip --colormatrix bt709 --output-csp i422 -o "%RAW264_FILEPATH%" "%AVS_FILEPATH%"
echo muxer -i "%RAW264_FILEPATH%"?fps=60000/1001 -o "%VIDEOONLY_FILEPATH%"
call muxer -i "%RAW264_FILEPATH%"?fps=60000/1001 -o "%VIDEOONLY_FILEPATH%"
exit

audioenc6.bat

@echo off
set BASE_FILEPATH=%~1
set WAVE_FILEPATH=%BASE_FILEPATH%audioonly6.wav
set AUDIOONLY_FILEPATH=%BASE_FILEPATH%audioonly6.m4a
echo ffmpeg -i "%ORIGINAL_FILEPATH%" -acodec copy "%WAVE_FILEPATH%"
call ffmpeg -i "%ORIGINAL_FILEPATH%" -acodec copy "%WAVE_FILEPATH%"
echo qaac -A "%WAVE_FILEPATH%" -o "%AUDIOONLY_FILEPATH%"
call qaac -A "%WAVE_FILEPATH%" -o "%AUDIOONLY_FILEPATH%"
exit

audioenc2.bat

@echo off
set BASE_FILEPATH=%~1
set WAVE_FILEPATH=%BASE_FILEPATH%audioonly2.wav
set AUDIOONLY_FILEPATH=%BASE_FILEPATH%audioonly2.m4a
echo ffmpeg -i "%ORIGINAL_FILEPATH%" -ac 2 -af "pan=stereo| c0<c0+0.7071067811865475*c3 | c1<c1+0.7071067811865475*c3" "%WAVE_FILEPATH%"
call ffmpeg -i "%ORIGINAL_FILEPATH%" -ac 2 -af "pan=stereo| c0<c0+0.7071067811865475*c3 | c1<c1+0.7071067811865475*c3" "%WAVE_FILEPATH%"
echo qaac -A "%WAVE_FILEPATH%" -o "%AUDIOONLY_FILEPATH%"
call qaac -A "%WAVE_FILEPATH%" -o "%AUDIOONLY_FILEPATH%"
exit