编码命令将导致指定的文件大小

编码命令将导致指定的文件大小

我希望创建一个批处理文件,将视频文件(MP4 或 MKV)压缩为特定大小的 MP4 文件。

类似这样的情况,视频比特率会自动调整,导致最终文件大小约为 500MB。

由于视频文件有两种音频比特率,因此方程中会有一个额外的变量。一个运行 128k,另一个运行 384k。

ffmpeg -i "%%g" -c:v libx264 -b:v 1400k -vf "scale=720:-2" -c:a copy "converted\%%~ng.mp4" 

答案1

通过计算视频的持续时间和实现该大小所需的视频比特率,将视频转换/编码为您选择的大小,并使用您选择的音频比特率:

测试输出为 15 秒 1280x720 h264 视频 aac 音频 .mp4,位于文件夹 \converted 中
最终输出为全长 1280x720 h264 视频 aac 音频 .mp4,位于文件夹 \converted 中
看起来rem test
:zmath有效,但不雅致。

您想要一个 500MB 的视频,长度为 5 分 20 秒。如果您想要 128Kb 的音频比特率,那么视频比特率应该是:

((500000KB * 8) / 320s) - 128Kbits
(200.000/320)-128= 497Kbits

为什么是“size * 8”?因为大小以字节为单位,而比特率以位为单位(1字节=8位)。

如何使用 cmd、set /p、for、ffprobe、set /a 和编码来确定要通过(输入大小/计算的持续时间)-(输入音频比特率)编码的视频比特率ffmpeg

添加到dir *.mkv *.mp4。更改rem test。更改?输出到converted文件夹。

@rem Convert / encode a video to a size of your choice, with an audio bitrate of your choice by calculating the duration of the video and the video bitrate needed to achieve that size:
@rem https://superuser.com/a/1551554/1003800
@rem Windows 10 64-bit 051420
@echo off 
ECHO. 
ECHO What audio rate do you want in Kb?
SET /p zaudio="Default 128 or enter your own number "
IF /i not defined zaudio SET zaudio=128 
ECHO. 
ECHO What file size do you want in MB?
SET /p zsize="Default 500 or enter your own number "
IF /i not defined zsize SET zsize=500 
for /F "eol=; delims=" %%g in ('dir *.mkv *.mp4 /A-D /B 2^>nul') do ( 
for /F "delims=" %%h in ('ffprobe.exe -v error -show_entries format^=duration -of default^=noprint_wrappers^=1:nokey^=1 "%%g" 2^>^&1') do set "zduration=%%h"
echo. 
echo Duration is %zduration% seconds. 
rem set z 
rem pause 
Call :zmath
if not exist converted md converted
echo. 
setlocal enabledelayedexpansion
rem test
ffmpeg -ss 00:01:00 -y -i "%%g" -crf 20.0 -vcodec libx264 -b:v !zvideo! -filter:v scale=1280:720 -preset slow -acodec aac -ar 48000 -b:a !zaudio! -async 48000 -t 00:00:15 "converted\%%~ng.mp4"
rem ffmpeg -i "%%g" -crf 20.0 -vcodec libx264 -b:v !zvideo! -filter:v scale=1280:720 -preset slow -acodec aac -ar 48000 -b:a !zaudio! -async 48000 "converted\%%~ng.mp4"
rem production
setlocal disabledelayedexpansion
rem Begin restore variables for next run 
rem remove k from zaudio
set zaudio=%zaudio:~,-1%
rem restore zsize to MB
set /a zsize=zsize/1000
set zvideo=
rem   End restore variables for next run
)
exit /b 

:zmath
rem begin convert MB to Kb
set /a zsize=zsize * 1000
rem   end convert MB to Kb
set /a zvideo=((zsize * 8 / zduration) - zaudio) / 1
rem begin remove trailing whitespace and append letter k on zaudio
set /a zaudio=zaudio/1
set zaudio=%zaudio%k
rem    end remove trailing whitespace and append letter k on zaudio
rem set z 
rem pause 
exit /b

https://ffmpeg.zeranoe.com/forum/viewtopic.php?t=407

https://stackoverflow.com/a/40102931/8826818

https://www.google.com/search?&q=windows+10+cmd+set+%2Fa+missing+operator

用于视频和音频编辑的有用 FFMPEG 命令列表html

用于视频和音频编辑的有用 FFMPEG 命令列表打印友好 500k .pdf

用于视频和音频编辑的有用 FFMPEG 命令列表在 techbeasts.com 上:

相关内容