ビデオから最後の N 秒をトリミングする方法はありますか? この場合の形式は「MPEG-TS」です。
FFMPEG では、開始時間と期間のオプションがあることは知っていますが、このユース ケースではどちらも使用できません。ビデオの長さには制限がないため、期間を固定値にすることはできません。
また、ソリューションは Windows コマンド ラインで実行する必要があり、自動化できます。
必要な機能は、次の手順で実現できます。
ビデオの長さを決定するには、ffmpegを使用します。たとえば、cmd スクリプトを使用します。
set input=video.ts
ffmpeg -i "%input%" 2> output.tmp
rem search " Duration: HH:MM:SS.mm, start: NNNN.NNNN, bitrate: xxxx kb/s"
for /F "tokens=1,2,3,4,5,6 delims=:., " %%i in (output.tmp) do (
if "%%i"=="Duration" call :calcLength %%j %%k %%l %%m
)
goto :EOF
:calcLength
set /A s=%3
set /A s=s+%2*60
set /A s=s+%1*60*60
set /A VIDEO_LENGTH_S = s
set /A VIDEO_LENGTH_MS = s*1000 + %4
echo Video duration %1:%2:%3.%4 = %VIDEO_LENGTH_MS%ms = %VIDEO_LENGTH_S%s
クリップ操作の開始点と終了点を計算する
rem ** 2:00 for the start, 4:00 from the end
set /A starttime = 120
set /A stoptime = VIDEO_LENGTH_S - 4*60
set /A duration = stoptime - starttime
ビデオをクリップします。おまけとして、TS ファイルを H.264 などのより最適な形式に変換します。
set output=video.mp4
vlc -vvv --start-time %starttime% --stop-time %stoptime% "%input%"
--sout=#transcode{vcodec=h264,vb=1200,acodec=mp3,
ab=128}:standard{access=file,dst=%output%} vlc://quit
rem ** Handbrake has much better quality **
handbrakeCLI -i %input% -o %output% -e x264 -B 128 -q 25
--start-at duration:%starttime% --stop-at duration:%duration%