Board logo

标题: [文件操作] 批处理如何精确提取视频里面的图片? [打印本页]

作者: 877    时间: 2023-9-5 09:50     标题: 批处理如何精确提取视频里面的图片?

如何从视频中精确提取出来这5张图片~ 视频已经上传到网盘(如下)

链接: https://pan.baidu.com/s/1oY3NP_5Q57WnTlwzk4H0yQ 提取码: bat8

由图片合成的视频,每张图片运用了不同的上下左右缓慢移动的关键帧)

例如这个视频是5张图片合成的,如何精确提取出来较为完整的这5张图片?

还望大佬给写段代码,提前表示感谢了!
作者: 877    时间: 2023-9-5 10:05

本帖最后由 877 于 2023-9-6 01:05 编辑

多张图片合成的视频,怎样做到每张图片只抽最完整的一帧,而不是把视频分解成很多帧,还望大佬指教
作者: Batcher    时间: 2023-9-5 11:38

回复 1# 877


    请把图片、视频、合并的命令打包上传到网盘看一下?
作者: 877    时间: 2023-9-6 00:08

回复 3# Batcher


    大佬您好,我上传网盘了5张图片生成的视频,就是想能从视频中精确提取出来这5张图片~

链接: https://pan.baidu.com/s/1oY3NP_5Q57WnTlwzk4H0yQ 提取码: bat8
作者: 77七    时间: 2023-9-6 11:27

re:
  1. ffmpeg -i 123.mp4 -an -vf select='eq(pict_type\,I)' -vsync 2  -f image2 image-%03d.png
复制代码
  1. 想弄成点击后先创建以*.mp4为名称的文件夹,然后
  2. 提取的png图片也在这个文件夹中
复制代码



我的ffmpeg,png报错,jpg成功。
  1. @echo off
  2. chcp 65001
  3. rem 批处理保存为utf-8编码格式
  4. for %%a in (*.mp4) do (
  5. md "%%~na"
  6. cmd /c ""ffmpeg" -i "%%~fa" -an -vf select='eq(pict_type\,I)' -vsync 2 -f image2 "%%~dpa/%%~na/image-%%03d.jpg""
  7. )
  8. pause
  9. 参考资料
  10. http://www.bathome.net/thread-66195-1-1.html
复制代码


写的有点复杂,批处理中单行直接执行ffmpeg命令可以成功,写入for中,%%0就会被扩展到批处理自身...参考buyiyang大佬的帖子使用cmd /c总算解决...
作者: 877    时间: 2023-9-7 18:57

回复 5# 77七


    77七大佬,能给写个图片批量去水印的bat代码吗?

文件夹下多个图片需要去除水印,还请大佬费心帮助!

万分感谢!
作者: 77七    时间: 2023-9-7 21:35

回复 6# 877


   得知道水印位置。网上找个去水印代码,套一下就行了。
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /a-d *.jpg') do (
  3. ffmpeg -i "%%i" -strict -2 -vf delogo=x=300:y=250:w=56:h=18:show=0 "%%~ni_2%%~xi"
  4. )
  5. pause
复制代码

作者: 877    时间: 2023-9-7 21:40

回复 7# 77七


    收到大佬,非常感谢您!

最新求助帖,按照视频场景(镜头或者画面变化)拆分视频,您给看下吧~~
作者: 877    时间: 2023-9-7 22:55

回复 7# 77七
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /a-d *.jpg') do (
  3. ffmpeg -i "%%i" -strict -2 -vf delogo=x=300:y=250:w=56:h=18:show=0 "%%~ni_2%%~xi"
  4. )
  5. pause
复制代码
大佬,这段代码改成去水印的图片移动到自定义文件夹"已去水印"应该怎样写呢?
作者: 77七    时间: 2023-9-8 07:40

回复 9# 877


  
  1. @echo off
  2. md "已去水印" 2>nul
  3. for /f "delims=" %%i in ('dir /b /a-d *.jpg') do (
  4. ffmpeg -i "%%i" -strict -2 -vf delogo=x=300:y=250:w=56:h=18:show=0 "%~dp0已去水印\%%~ni_2%%~xi"
  5. )
  6. pause
复制代码

作者: 877    时间: 2023-9-8 08:36

回复 10# 77七


    感谢大佬!ffmpeg镜头分割视频这方面您了解吗?
作者: 77七    时间: 2023-9-8 15:44

回复 11# 877


   不了解
作者: 877    时间: 2023-9-10 15:11

回复 10# 77七
  1. @echo off
  2. chcp 65001
  3. rem 批处理保存为utf-8编码格式
  4. for %%a in (*.mp4) do (
  5. md "已抽第2帧"
  6. cmd /c ""ffmpeg" -i "%%~fa" -an -vf select='eq(pict_type\,I)' -vframes 2 -f image2 "%%~dpa/已抽第2帧/%%~na.png""
  7. )
  8. pause
复制代码
大佬,给优化一下这段代码吧,批量抽取第二帧到"已抽第2帧"文件夹。
作者: 77七    时间: 2023-9-10 19:41

回复 13# 877


   要优化什么?
作者: 877    时间: 2023-9-10 20:36

本帖最后由 877 于 2023-9-10 20:40 编辑

回复 14# 77七


    书写规范是不是有错误呢?会有红色错误代码
  1. Could not get frame filename number 2 from pattern 'C:\Users\1\Desktop\-00003602.png'. Use '-frames:v 1' for a single image, or '-update' option, or use a pattern such as %03d within the filename.
  2. av_interleaved_write_frame(): Invalid argument
复制代码

作者: 77七    时间: 2023-9-10 21:10

回复 15# 877


   

按报错提示修改
  1. @echo off
  2. chcp 65001
  3. rem 批处理保存为utf-8编码格式
  4. for %%a in (*.mp4) do (
  5. md "已抽第2帧"
  6. cmd /c ""ffmpeg" -i "%%~fa" -an -vf select='eq(pict_type\,I)' -vframes:v 1 -f image2 "%%~dpa/已抽第2帧/%%~na.png""
  7. )
  8. pause
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2