Skip to content

Instantly share code, notes, and snippets.

@zinntikumugai
Last active March 25, 2023 05:43
Show Gist options
  • Save zinntikumugai/b0630cd89baa4ae93298de6ab54915ff to your computer and use it in GitHub Desktop.
Save zinntikumugai/b0630cd89baa4ae93298de6ab54915ff to your computer and use it in GitHub Desktop.
FFMPEG HW Encode
  • CPU: Intel Core i7-11700K
  • RAM: 32GB (16GBx2) 3200MHz
  • SSD 0: WDC WDS500G2B-A-00SM50
  • SSD 1: Micron_1100_MTFDDAK1T0TBN
  • SSD 2: WDC WDS960G2G0C-00AJM0
  • GPU 0: iGPU Intel UHD Graphics 750
  • GPU 1: dGPU NVIDIA GeForce RTX 4090

各種エンコードスクリプトはD&Dか引数にエンコードしたいファイルを指定すればエンコードされる
ffmpegなどのパスは適当に変えてね
duration.batはQiitaの記事にあった時間計測スクリプト

@echo off
@setlocal
if "%~1"=="" exit /b -1
call :time2centiseconds %1
set startcs=%errorlevel%
if "%~2"=="" exit /b %startcs%
call :time2centiseconds %2
set endcs=%errorlevel%
call :duration_centiseconds %startcs% %endcs%
set dur=%errorlevel%
if "%~3"=="" call :centiseconds2time %dur%
exit /b %dur%
:time2centiseconds
if "%~1"=="" exit /b 0
for /f "tokens=1-4 delims=:.," %%a in ("%~1") do set /a cs=%%a*360000+(1%%b %% 100)*6000+(1%%c %% 100)*100+1%%d %% 100
exit /b %cs%
:duration_centiseconds
if "%~1"=="" exit /b 0
if "%~2"=="" exit /b 0
set /a dur=%2 - %1
rem we might have measured the time inbetween days
if %dur% lss 0 set /a dur=%dur%+8640000
exit /b %dur%
:centiseconds2time
if "%~1"=="" exit /b -1
set /a h=%1 / 360000
set /a m=(%1 - %h% * 360000) / 6000
set /a s=(%1 - %h% * 360000 - %m% * 6000) / 100
set /a cs=(%1 - %h% * 360000 - %m% * 6000 - %s% * 100)
if %h% lss 10 set h=0%h%
if %m% lss 10 set m=0%m%
if %s% lss 10 set s=0%s%
if %cs% lss 10 set cs=0%cs%
for /f "tokens=1-2 delims=," %%a in ( "%time%" ) do (
if "%%b"=="" (
echo %h%:%m%:%s%.%cs%
) else (
echo %h%:%m%:%s%,%cs%
)
)
exit /b 0
@echo off
chcp 65001
rem ffmpegのパス
set FFMPEG_PATH=C:\Users\zin3\OneDrive\tools\ffmpeg\bin\ffmpeg.exe
rem D&Dしたファイルを入力ファイルとする
set INPUT_FILE_PATH=%1
rem 指定のディレクトリを保存先とする
set OUTPUT_FILE_DIR=C:\Users\zin3\Videos\ffmpeg
rem 出力ファイルパス
set OUTPUT_FILE_PATH=%OUTPUT_FILE_DIR%\%~n1_AV1_FHD_OrigHz_Web.mp4
rem 2pass用ファイル
set PPASS_FILE_NAME=2passcheck
rem 引数がない場合は終了する
if "%~1"=="" (
echo 引数がありません
pause
exit /b
)
cd C:\Users\zin3\OneDrive\tools\ffmpeg\bin
rem in/outのファイルパスを表示
echo 入力ファイル: %INPUT_FILE_PATH%
echo 出力ファイル: "%OUTPUT_FILE_PATH%"
rem ファイルのチェック
if not exist %INPUT_FILE_PATH% (
rem ない
echo 入力ファイルがないので終了します
pause
exit /b
)
if exist "%OUTPUT_FILE_PATH%" (
echo 出力ファイルあるので終了します
pause
exit /b
)
set basetime=%time%
rem 1pass
echo FFMPEG 上書き、GPUデコード、GPUエンコード、音声なし、出力NULL(標準出力)
"%FFMPEG_PATH%" -y ^
-hwaccel cuda ^
-i %INPUT_FILE_PATH% ^
-vcodec av1_nvenc ^
-preset p5 ^
-multipass 2 ^
-b:v 5M ^
-maxrate 7M ^
-bufsize 14M ^
-rc 1 ^
-s 1920x1080 ^
-pass 1 ^
-passlogfile "%PPASS_FILE_NAME%" ^
-an ^
-f null -
if not "%errorlevel%" == "0" (
echo "ffmpeg(1pass)が異常終了しましたので終了します"
pause
exit /b
)
rem 2pass
echo FFMPEG GPUデコード(AUTO)、GPUエンコード(AV1_NVENC) 、プリセット:p5、マルチパス(フル画面)、ビットレート(平均:5M、最大7M、バッファ14M)、VBR、FHD、メタデータ消去、チャプター消去、faststart
"%FFMPEG_PATH%" ^
-hwaccel cuda ^
-i %INPUT_FILE_PATH% ^
-vcodec av1_nvenc ^
-preset p5 ^
-multipass 2 ^
-b:v 5M ^
-maxrate 7M ^
-bufsize 14M ^
-rc 1 ^
-g 60 ^
-tune 2 ^
-s 1920x1080 ^
-map_metadata -1 ^
-map_chapters -1 ^
-movflags +faststart ^
-pass 2 ^
-passlogfile "%PPASS_FILE_NAME%" ^
"%OUTPUT_FILE_PATH%"
if not "%errorlevel%" == "0" (
echo "ffmpeg(2pass)が異常終了しましたので終了します"
pause
exit /b
)
cd %~dp1
rem 2passcheckファイルを消す
if exist "%PPASS_FILE_NAME%-0.log" (
del "%PPASS_FILE_NAME%-0.log"
)
C:\Users\zin3\OneDrive\tools\ffmpeg\duration.bat %basetime% %time%
pause
@echo off
chcp 65001
rem エンコード時間は大体動画の3倍
rem ffmpegのパス
set FFMPEG_PATH=C:\Users\zin3\OneDrive\tools\ffmpeg\bin\ffmpeg.exe
rem D&Dしたファイルを入力ファイルとする
set INPUT_FILE_PATH=%1
rem 指定のディレクトリを保存先とする
set OUTPUT_FILE_DIR=C:\Users\zin3\Videos\ffmpeg
rem 出力ファイルパス
set OUTPUT_FILE_PATH=%OUTPUT_FILE_DIR%\%~n1_AV1_org_OrgHz_Web.mp4
rem 2pass用ファイル
set PPASS_FILE_NAME=2passcheck
rem 引数がない場合は終了する
if "%~1"=="" (
echo 引数がありません
pause
exit /b
)
cd C:\Users\zin3\OneDrive\tools\ffmpeg\bin
rem in/outのファイルパスを表示
echo 入力ファイル: %INPUT_FILE_PATH%
echo 出力ファイル: "%OUTPUT_FILE_PATH%"
title INPUT CHECK %INPUT_FILE_PATH%
rem ファイルのチェック
if not exist %INPUT_FILE_PATH% (
rem ない
echo 入力ファイルがないので終了します
pause
exit /b
)
title OUTPUT CHECK "%OUTPUT_FILE_PATH%"
if exist "%OUTPUT_FILE_PATH%" (
echo 出力ファイルあるので終了します
pause
exit /b
)
set basetime=%time%
if exist "%OUTPUT_FILE_PATH%.1pass.txt" (
echo 1pass をスキップします
goto PASS1
pause
)
title 1pass %INPUT_FILE_PATH%
rem 1pass
echo FFMPEG 上書き、GPUデコード、GPUエンコード、音声なし、出力NULL(標準出力)
"%FFMPEG_PATH%" -y ^
-hwaccel cuda ^
-i %INPUT_FILE_PATH% ^
-vcodec av1_nvenc ^
-preset p5 ^
-multipass 2 ^
-b:v 15M ^
-maxrate 20M ^
-bufsize 30M ^
-rc 1 ^
-pass 1 ^
-passlogfile "%PPASS_FILE_NAME%" ^
-an ^
-f null -
if not "%errorlevel%" == "0" (
echo "ffmpeg(1pass)が異常終了しましたので終了します code: %errorlevel%"
pause
exit /b
)
echo 1pass > "%OUTPUT_FILE_PATH%.1pass.txt"
:PASS1
del "%OUTPUT_FILE_PATH%.1pass.txt"
title 2pass %INPUT_FILE_PATH%
rem 2pass
echo FFMPEG GPUデコード(AUTO)、GPUエンコード(AV1_NVENC) 、プリセット:p5、マルチパス(フル画面)、ビットレート(平均:5M、最大7M、バッファ14M)、VBR、FHD、メタデータ消去、チャプター消去、faststart
"%FFMPEG_PATH%" ^
-hwaccel cuda ^
-i %INPUT_FILE_PATH% ^
-vcodec av1_nvenc ^
-preset p5 ^
-multipass 2 ^
-b:v 15M ^
-maxrate 20M ^
-bufsize 30M ^
-rc 1 ^
-g 60 ^
-tune 2 ^
-map_metadata -1 ^
-map_chapters -1 ^
-movflags +faststart ^
-pass 2 ^
-passlogfile "%PPASS_FILE_NAME%" ^
"%OUTPUT_FILE_PATH%"
if not "%errorlevel%" == "0" (
echo "ffmpeg(2pass)が異常終了しましたので終了します code: %errorlevel%"
pause
exit /b
)
cd %~dp1
rem 2passcheckファイルを消す
if exist "%PPASS_FILE_NAME%-0.log" (
del "%PPASS_FILE_NAME%-0.log"
)
C:\Users\zin3\OneDrive\tools\ffmpeg\duration.bat %basetime% %time%
pause
pause
pause
@echo off
chcp 65001
rem エンコード時間は大体動画の3倍
rem ffmpegのパス
set FFMPEG_PATH=C:\Users\zin3\OneDrive\tools\ffmpeg\bin\ffmpeg.exe
rem D&Dしたファイルを入力ファイルとする
set INPUT_FILE_PATH=%1
rem 指定のディレクトリを保存先とする
set OUTPUT_FILE_DIR=C:\Users\zin3\Videos\ffmpeg
rem 出力ファイルパス
set OUTPUT_FILE_PATH=%OUTPUT_FILE_DIR%\%~n1_H264_org_OrgHz_Web.mp4
rem 2pass用ファイル
set PPASS_FILE_NAME=2passcheck
rem 引数がない場合は終了する
if "%~1"=="" (
echo 引数がありません
pause
exit /b
)
cd C:\Users\zin3\OneDrive\tools\ffmpeg\bin
rem in/outのファイルパスを表示
echo 入力ファイル: %INPUT_FILE_PATH%
echo 出力ファイル: "%OUTPUT_FILE_PATH%"
title INPUT CHECK %INPUT_FILE_PATH%
rem ファイルのチェック
if not exist %INPUT_FILE_PATH% (
rem ない
echo 入力ファイルがないので終了します
goto EXITf
)
title OUTPUT CHECK "%OUTPUT_FILE_PATH%"
if exist "%OUTPUT_FILE_PATH%" (
echo 出力ファイルあるので終了します
pause
goto EXITf
)
set basetime=%time%
if exist "%OUTPUT_FILE_PATH%.1pass.txt" (
echo 1pass をスキップします
goto PASS1
pause
)
title 1pass %INPUT_FILE_PATH%
rem 1pass
echo FFMPEG 上書き、GPUデコード、GPUエンコード、音声なし、出力NULL(標準出力)
"%FFMPEG_PATH%" -y ^
-hwaccel cuda ^
-i %INPUT_FILE_PATH% ^
-vcodec h264_nvenc ^
-preset p5 ^
-b:v 15M ^
-maxrate 20M ^
-bufsize 30M ^
-rc 1 ^
-pass 1 ^
-passlogfile "%PPASS_FILE_NAME%" ^
-an ^
-f null -
if not "%errorlevel%" == "0" (
echo "ffmpeg(1pass)が異常終了しましたので終了します code: %errorlevel%"
pause
exit /b
)
echo 1pass > "%OUTPUT_FILE_PATH%.1pass.txt"
:PASS1
del "%OUTPUT_FILE_PATH%.1pass.txt"
title 2pass %INPUT_FILE_PATH%
rem 2pass
echo FFMPEG GPUデコード(AUTO)、GPUエンコード(AV1_NVENC) 、プリセット:p5、マルチパス(フル画面)、ビットレート(平均:5M、最大7M、バッファ14M)、VBR、FHD、メタデータ消去、チャプター消去、faststart
"%FFMPEG_PATH%" ^
-hwaccel cuda ^
-i %INPUT_FILE_PATH% ^
-vcodec h264_nvenc ^
-preset p5 ^
-b:v 15M ^
-maxrate 20M ^
-bufsize 30M ^
-rc 1 ^
-g 60 ^
-tune 2 ^
-map_metadata -1 ^
-map_chapters -1 ^
-movflags +faststart ^
-pass 2 ^
-passlogfile "%PPASS_FILE_NAME%" ^
"%OUTPUT_FILE_PATH%"
if not "%errorlevel%" == "0" (
echo "ffmpeg(2pass)が異常終了しましたので終了します code: %errorlevel%"
pause
exit /b
)
cd %~dp1
rem 2passcheckファイルを消す
if exist "%PPASS_FILE_NAME%-0.log" (
del "%PPASS_FILE_NAME%-0.log"
)
C:\Users\zin3\OneDrive\tools\ffmpeg\duration.bat %basetime% %time%
%%i in (%OUTPUT_FILE_PATH%) do set file_size=%%~zi
echo %file_size%
:EXITf
@REM pause
@echo off
chcp 65001
rem エンコード時間は大体動画の3倍
rem ffmpegのパス
set FFMPEG_PATH=C:\Users\zin3\OneDrive\tools\ffmpeg\bin\ffmpeg.exe
rem D&Dしたファイルを入力ファイルとする
set INPUT_FILE_PATH=%1
rem 指定のディレクトリを保存先とする
set OUTPUT_FILE_DIR=C:\Users\zin3\Videos\ffmpeg
rem 出力ファイルパス
set OUTPUT_FILE_PATH=%OUTPUT_FILE_DIR%\%~n1_H264_1p_org_OrgHz_Web.mp4
rem 2pass用ファイル
set PPASS_FILE_NAME=2passcheck
rem 引数がない場合は終了する
if "%~1"=="" (
echo 引数がありません
pause
exit /b
)
cd C:\Users\zin3\OneDrive\tools\ffmpeg\bin
rem in/outのファイルパスを表示
echo 入力ファイル: %INPUT_FILE_PATH%
echo 出力ファイル: "%OUTPUT_FILE_PATH%"
title INPUT CHECK %INPUT_FILE_PATH%
rem ファイルのチェック
if not exist %INPUT_FILE_PATH% (
rem ない
echo 入力ファイルがないので終了します
pause
exit /b
)
title OUTPUT CHECK "%OUTPUT_FILE_PATH%"
@REM if exist "%OUTPUT_FILE_PATH%" (
@REM echo 出力ファイルあるので終了します
@REM pause
@REM exit /b
@REM )
set basetime=%time%
title 1pass %INPUT_FILE_PATH%
rem 1pass
echo FFMPEG 上書き、CPU->H264_QSV、プリセット:veryslow、ave:15Mbps
"%FFMPEG_PATH%" -y ^
-hide_banner ^
-stats ^
-i %INPUT_FILE_PATH% ^
-vcodec h264_qsv ^
-async_depth 8 ^
-preset 3 ^
-b:v 15M ^
-maxrate 20M ^
-g 60 ^
-map_metadata -1 ^
-map_chapters -1 ^
-movflags +faststart ^
"%OUTPUT_FILE_PATH%"
if not "%errorlevel%" == "0" (
echo "ffmpeg(1pass)が異常終了しましたので終了します code: %errorlevel%"
pause
exit /b
)
cd %~dp1
rem 2passcheckファイルを消す
if exist "%PPASS_FILE_NAME%-0.log" (
del "%PPASS_FILE_NAME%-0.log"
)
echo "hage"
set file_size=
for %%i in (%OUTPUT_FILE_PATH%) do set file_size=%%~zi
echo %file_size%
C:\Users\zin3\OneDrive\tools\ffmpeg\duration.bat %basetime% %time%
pause
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment