Batch file 使用ffmpeg和windows批处理命令修改视频
我有一系列的8个视频,它们有不同的帧数,其中一些在开始时丢失了一些。我试图在视频开始时将其与第一帧的副本连接起来。不幸的是,我的代码要么在比较视频长度时崩溃,要么无法完成所需的任务。这里我添加了我正在使用的代码Batch file 使用ffmpeg和windows批处理命令修改视频,batch-file,ffmpeg,command-prompt,Batch File,Ffmpeg,Command Prompt,我有一系列的8个视频,它们有不同的帧数,其中一些在开始时丢失了一些。我试图在视频开始时将其与第一帧的副本连接起来。不幸的是,我的代码要么在比较视频长度时崩溃,要么无法完成所需的任务。这里我添加了我正在使用的代码 @ECHO off SETLOCAL EnableDelayedExpansion MKDIR COMPRESSED\ MKDIR RAW\ SET j=0 SET jj=1 SET max=1 FOR %%a IN (*.avi) DO ( SET /A j=j+1
@ECHO off
SETLOCAL EnableDelayedExpansion
MKDIR COMPRESSED\
MKDIR RAW\
SET j=0
SET jj=1
SET max=1
FOR %%a IN (*.avi) DO (
SET /A j=j+1
FOR /F "delims=" %%V IN ('ffprobe.exe -v error -count_frames -select_streams v:0 -show_entries stream^=nb_read_frames -of default^=noprint_wrappers^=1:nokey^=1 ".\%%~nxa" 2^>^&1') DO SET elem[!j!]=%%V
SET elem[!j!]
)
FOR %%a IN (*.avi) DO (
IF !elem[%jj%]! GTR !elem[%max%]!(
SET max=!jj!
)
SET /A jj=jj+1
)
SET max
SET /A x=1
FOR %%a IN (*.avi) DO (
IF "!elem[!x!]!" LSS "!elem[!max!]!" (
ffmpeg -i ".\%%~nxa" -vf "select=eq(n\,0)" -q:v 3 output_image.jpg
ffmpeg -y -i ".\%%~nxa" -loop 1 -i output_image.jpg -t 0.01 -s 1936x1216 ".\%%~nxa"
SET elem[!x!]=elem[!x!]+1
SET elem[!x!]
)
SET /A x=x+1
)
FOR %%a IN (*.avi) DO (
ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames ".\%%~nxa"
ffmpeg -i ".\%%~nxa" -c:v libxvid -vtag xvid -qscale:v 2 -force_key_frames 1 -s 968x400 -r 100 ".\COMPRESSED\%%a"
SET mystr=%%~na
SET mystr=!mystr:~-1!
IF !mystr! == 3 (
ffmpeg -i ".\%%~nxa" -c:v mpeg4 -b:v 4M -c:a libfdk_aac -b:a 192k ".\COMPRESSED\%%~na.mp4"
)
IF !mystr! == 5 (
ffmpeg -i ".\%%~nxa" -c:v mpeg4 -b:v 4M -c:a libfdk_aac -b:a 192k ".\COMPRESSED\%%~na.mp4"
)
)
在尝试编写脚本之前,您是否验证了每个
ffmpeg
和ffprobe
命令在cmd/Powershell中都有效?是的,它们都有效,但我最终成功地使其有效,因此,我将删除该问题如果您提供了问题的答案,而不是删除该问题,以防其他人有类似问题。在尝试编写脚本之前,您是否验证了每个ffmpeg
和ffprobe
命令在cmd/Powershell中都有效?是的,它们都有效,不过,我最终还是设法让它起作用了,所以我将删除这个问题。如果你能为你的问题提供答案,而不是删除它,那会更好,以防其他人有类似的问题。