【发布时间】:2015-12-03 07:31:04
【问题描述】:
我有大量视频需要使用 ffmpeg 从 mp4 转换为 wmv,并将每个文件分成 10 分钟的片段,但我是一个完全的 cmd 脚本新手(事实上,我是一个脚本新手 :)
花了六个小时试图找到答案后,我想我会把它带给你们。
我的代码有点工作,但我需要能够读取来自命令行的数据并将其发送回脚本进行评估。我不确定 ffmpeg 在处理完视频文件后(当时间戳到达结束时)会吐出什么代码,但是即使视频结束,这个 FOR 循环也会继续尝试创建新的文件段。这是我在尝试创建新文件时看到的,所以我认为搜索它可能会起作用:
帧= 0 fps=0.0 q=0.0 Lsize= 1kB 时间=00:00:00.00 比特率=N/A
这是我目前想出的代码(别笑:)
@echo off
setlocal ENABLEEXTENSIONS
setlocal ENABLEDELAYEDEXPANSION
for %%a in ("*.mp4") do (
set hour=00
for /L %%i IN (1,1,10) do (
:Beginning
set /a start=%%i-1
set end=%%i
if !start! lss 10 set start=!start!0
if !end! lss 10 set end=!end!0
ffmpeg -ss !hour!:!start!:00 -i "%%a" -b:v 1500k -vcodec msmpeg4 -acodec wmav2 -t !hour!:!end!:00 "Converted\%%~na-!hour!-!start!-!end!.wmv"
if end==60 CALL :Increment
)
)
:Increment
set /a !hour!+1
set %%i=1
GOTO :Beginning
pause
根据阅读this thread 的内容,我认为代码中可能会出现这样的内容,但不知道如何处理它:
set "dosstring=%*"
echo.!dosstring!|findstr /C:"frame= 0 fps=0.0 q=0.0 Lsize= 1kB time=00:00:00.00 bitrate=N/A" >nul 2>&1
非常感谢您的帮助!
【问题讨论】:
-
我认为标签
:Beginning不能在 () 中使用,请将其放在FOR %%Alook at the bugs section 之前。还要在ffmpeg命令前面使用echo测试您的批处理。goto :Beginning中似乎有无限循环,因为没有IF语句 -
呵呵,我的编码技能可能是陪审团操纵的。该声明是由 10 个不同的网页串在一起的。我会试试你说的,但我有一种感觉,我无法让它发挥作用,哈哈
标签: batch-file ffmpeg