标题: [文件操作] 求助关于ffmpeg利用视频和poster生成缩略浏览Gif的写法.(超认真提问) [打印本页]
作者: lifenots 时间: 2022-11-15 13:21 标题: 求助关于ffmpeg利用视频和poster生成缩略浏览Gif的写法.(超认真提问)
先感谢能能帮助我的大佬,我真的看了好久...头发都薅掉毛了都搞不定.
诉求:
文件中很多B站视频和电影,希望能通过收集和搜刮的文件,生成一个富信息的GIF,用于各种地方做索引.需求是,任意视频长度(10分钟-2小时)能自动分成8段,每段10帧的GIF,并且文件夹下的Cover文件作为GIF的前5帧显示.
心路历程:
本来希望在ffmpeg里找到直接调用的方法,但是找了一天发现只能-ss -to 指定固定时间,用抽帧比如隔20帧抽20帧的方法遇到电影又不好用,希望能8段10帧固定在80帧GIF下,那么大小能控制在20M以内,毕竟GIF挺大的,参考了http://bbs.bathome.net/thread-50807-1-1.html,http://bbs.bathome.net/viewthrea ... t=ffmpeg&page=2两个大佬给出的方案,研究了发现自己搞不定,所以发帖求救...
目前情况
目前研究自己是分了两个部分的,- ffmpeg -r 8 -i file.jpg -i file.MP4 -vf "scale=400:-1" -an file.gif
复制代码
这个是希望视频和封面直接生成带封面的GIF.....翻车...- ffmpeg -i file2.mp4 -c copy -map 0:0 -map 0:1 -segment_time 30 -f segment file%03d.MP4
复制代码
这个是希望把视频分6段...输出只能输出成30S一段...一堆文件,然后查询了上面两个大佬发的贴子,发现需要Bat函数的方式来做乘除....
以上.....解决是没解决,但是自己Notion做了几页的笔记了....顾求教大佬....感谢
附上日常文件结构..
发现没的发截图...直接路径了- M:\Movie\19270206 Metropolis 大都会\大都会.1927.mp4
- M:\Movie\19270206 Metropolis 大都会\fanart.jpg
- M:\Movie\19270206 Metropolis 大都会\poster.jpg
- M:\Movie\19270206 Metropolis 大都会\大都会.1927.srt
- M:\Movie\19270206 Metropolis 大都会\大都会.1927.英语.srt
- M:\Movie\19270206 Metropolis 大都会\大都会.1927-mediainfo.xml
- M:\Movie\19270206 Metropolis 大都会\大都会.pbf
- M:\Movie\19270206 Metropolis 大都会\大都会.1927.nfo
复制代码
- V:\Know\差评君\2021-08-14 曾经人人都爱用的下载器,为何如今几乎无人问津?【差评君】\曾经人人都爱用的下载器,为何如今几乎无人问津?【差评君】.mp4
- V:\Know\差评君\2021-08-14 曾经人人都爱用的下载器,为何如今几乎无人问津?【差评君】\曾经人人都爱用的下载器,为何如今几乎无人问津?【差评君】.ass
- V:\Know\差评君\2021-08-14 曾经人人都爱用的下载器,为何如今几乎无人问津?【差评君】\Cover.jpg
复制代码
作者: lifenots 时间: 2022-11-16 14:14
补充详细点需求,比如2H的电影,平均抽取8段10帧连贯的画面组合成一个GIF,然后首帧加入个持续1S的poster.jpg,这样一个GIF大概80帧8m左右,能包含整个视频的去预览信息.
作者: BAT221110 时间: 2022-11-16 19:59
- SET FSO = CREATEOBJECT("SCRIPTING.FILESYSTEMOBJECT")
- SET WSH329 = CREATEOBJECT("WSCRIPT.SHELL")
-
-
- FUNCTION NUMSTR(X) ' X > 0
- IF X < 1 THEN
- NUMSTR = 0 & X
- ELSE
- NUMSTR = X
- END IF
- END FUNCTION
-
-
- SUB TAKE(FN, T, CNT, Y, JPGFN, TMPNAM62)
- ' ffmpeg -ss 1 -t 0.002 -i QQ视频20221105205711.mp4 SAMPLES\sample.jpg -vframes 1 -an -f image2
-
- FOR I = 1 TO CNT
- SET TS = FSO.OPENTEXTFILE(TMPNAM62, 8, TRUE)
- JPGFN2 = JPGFN & I & ".JPG"
- TS.WRITELINE("file '" & JPGFN2 & "'")
- TS.CLOSE
-
- ' CMD = "CMD /C ffmpeg -y -ss " & T & " -t " & NUMSTR(Y) * I & " -i """ & FN & """ """ & JPGFN & I & ".JPG"" -vframes 1 -an -f image2"
- CMD = "CMD /C ffmpeg -y " & " -ss " & NUMSTR(T + Y * I) & " -i """ & FN & """ """ & JPGFN2 & """ -vframes 1 -an -f image2"
- WSCRIPT.ECHO(CMD)
- WSH329.RUN CMD, 10, TRUE
- NEXT
- END SUB
-
-
- FUNCTION GET_DURATION(FN, TMPNAM62)
- ' ffmpeg -i QQ视频20221105205711.mp4 2>&1 | findstr Duration
- ' Duration: 00:00:13.23, start: 0.000000, bitrate: 1492 kb/s
-
- CMD = "CMD /C ffmpeg -i """ & FN & """ 2>&1 | findstr Duration > """ & TMPNAM62 & """"
- WSCRIPT.ECHO(CMD)
- WSH329.RUN CMD, 10, TRUE
-
- SET TS = FSO.OPENTEXTFILE(TMPNAM62, 1, FALSE, TRISTATETRUE)
- LN = TS.READLINE
- TS.CLOSE
- FSO.DELETEFILE TMPNAM62
- SET REGEX = NEW REGEXP
- REGEX.PATTERN = "(\d\d):(\d\d):(\d\d)"
- SET MATCHES = REGEX.EXECUTE(LN)
- T = CINT(MATCHES(0).SUBMATCHES(0))
- T = T * 60 + CINT(MATCHES(0).SUBMATCHES(1))
- T = T * 60 + CINT(MATCHES(0).SUBMATCHES(2))
- GET_DURATION = T
- END FUNCTION
-
-
- SUB MAIN4(FN, CNT, Y, JPGFD, TMPNAM62, GIFOUT)
- IF NOT FSO.FOLDEREXISTS(JPGFD) THEN
- FSO.CREATEFOLDER(JPGFD)
- END IF
-
- DURATION = GET_DURATION(FN, TMPNAM62)
- FOR I = 0 TO 7
- WSCRIPT.ECHO(I)
- TAKE FN, DURATION/8 *I, CNT, Y, JPGFD & "\SAMPLE-" & I & "-", TMPNAM62
- NEXT
-
- CMD = "ffmpeg -r 10 -f concat -safe 0 -i PRINT12912213.TMP.TXT " & GIFOUT
- WSCRIPT.ECHO(CMD)
- WSH329.RUN CMD, 10, TRUE
- END SUB
-
- MAIN4 WSCRIPT.ARGUMENTS(0), 10, 1, "SAMPLES21031", "PRINT12912213.TMP.TXT", WSCRIPT.ARGUMENTS(1)
复制代码
使用方法:保存为PRINTS.VBS文件,在命令行输入以下命令执行:- CSCRIPT PRINTS.VBS "C:\Users\ADMIN\Videos\知识点精讲-毛概.FLV OUT.GIF
复制代码
后面两个参数是视频和GIF名称,根据实际修改。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |