首页 > 其他分享 >使用ffmpeg命令把单张或多张图片生成固定时长的视频

使用ffmpeg命令把单张或多张图片生成固定时长的视频

时间:2024-03-27 09:48:11浏览次数:22  
标签:输出 ffmpeg list Add Path StartInfo 单张 string 时长

1,官网下载 FFmpeg.exe

           参见:https://blog.csdn.net/m0_46278037/article/details/113790540

2,FFmpegHelper代码如下

 1   public class FFmpegHelper
 2     {
 3         public void ConvertVideo()
 4         {
 5           
 6             string inputDirectory = Path.Combine(Application.StartupPath, "images");
 7             string outputFile = Path.Combine(Application.StartupPath, @"out\out.mp4");
 8 
 9             string ffmpegtool = Path.Combine(Application.StartupPath, "ffmpeg.exe");
10             int imageTotal = Directory.GetFiles(inputDirectory).Length;
11             int totalSecond = 12;// 总时长:12秒
12             double framerate = Math.Round(imageTotal * 1.0d / totalSecond, 2);
13             List<string> list = new List<string>();
14             list.Add($"-framerate {framerate}");// 输入图像序列的帧率,25帧
15             list.Add("-f image2");          // 输入流格式
16             list.Add("-loop 1");        // 输入流循环次数,仅对图片有效,0表示无效循环
17             list.Add($"-i {inputDirectory}\\image%03d.jpg");// 03d%表示占位数 image001.jpg,image002.jpg
18 
19             list.Add("-r 29.97");       // 输出帧率,只能设定为为 29.97或15,否则,非标准帧率会导致音画不同步
20             list.Add("-c:v libx264");  //用H.264编码器
21             list.Add("-pix_fmt yuv420p");// 输出的像素格式,这是一种广泛兼容性的格式
22             list.Add($"-t {totalSecond}");// 视频时长
23             list.Add("-y");// 输出新文件,覆盖原有文件
24 
25             list.Add(outputFile);
26 
27             string cmd = string.Join(" ", list);
28             Process p = new Process();//建立外部调用线程
29             p.StartInfo.FileName = ffmpegtool;//要调用外部程序的绝对路径
30             p.StartInfo.Arguments = cmd;
31             p.StartInfo.UseShellExecute = false;//不使用操作系统外壳程序启动线程(一定为FALSE,详细的请看MSDN)
32             p.StartInfo.RedirectStandardError = true;//把外部程序错误输出写到StandardError流中(这个一定要注意,FFMPEG的所有输出信息,都为错误输出流,用StandardOutput是捕获不到任何消息的...这是我耗费了2个多月得出来的经验...mencoder就是用standardOutput来捕获的)
33             p.StartInfo.CreateNoWindow = false;//不创建进程窗口
34             //p.ErrorDataReceived += new DataReceivedEventHandler(Output);//外部程序(这里是FFMPEG)输出流时候产生的事件,这里是把流的处理过程转移到下面的方法中,详细请查阅MSDN
35             p.Start();//启动线程
36             p.BeginErrorReadLine();//开始异步读取
37             p.WaitForExit();//阻塞等待进程结束
38             p.Close();//关闭进程
39             p.Dispose();//释放资源
40         }
41         private void Output(object sendProcess, DataReceivedEventArgs output)
42         {
43             if (!String.IsNullOrEmpty(output.Data))
44             {
45 
46             }
47         }
48     }

参考资料:https://blog.csdn.net/sitetesty/article/details/123477473

 

标签:输出,ffmpeg,list,Add,Path,StartInfo,单张,string,时长
From: https://www.cnblogs.com/zhaotiantian/p/18098198

相关文章

  • pdf转单张或多张图片
    packagewuxu.test;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.IOException;importjava.net.URL;importjava.util.ArrayList;importjava.util.List;importjava.util.Objects;importjavax.imageio.ImageIO;importorg.apache.c......
  • 使用AI技术(单张图片或文字)生产3D模型 —— Ai生成3D模型的时代来了
    地址:https://www.bilibili.com/video/BV1A2421P7pH/视频用到的工具voxcraft体验地址:https://voxcraft.ai/......
  • FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
    ​《FFmpeg开发实战:从零基础到短视频上线》一书的“12.1.2 交叉编译Android需要的so库”介绍了如何在Windows环境交叉编译Android所需FFmpeg的so库,接下来介绍如何在Linux环境交叉编译Android所需FFmpeg的so库。1、下载Linux版本的android-ndk-r21e登录Linux服务器(比如华为云的......
  • FFMpeg笔记(十二)升级FFmpeg6.1
      FFmpeg最新版已更新6.1,许多之前标记为deprecated的api被彻底删除了,同时也增加了好多新的特性和功能。FFmpeg团队持续优化代码,新版本往往具有更高的编码和解码效率,因此及时更新FFmpeg版本,有利于提升应用的处理速度和资源利用率。本文记录项目中FFmpeg更新至6.1版本过程中遇到......
  • FFmpeg开发笔记(七)欧拉系统编译安装FFmpeg
    FFmpeg支持Linux、macOS、Windows、Android等操作系统,其中Linux系列包括Ubuntu、Debian、Mint、CentOS、RHEL、Fedora等分支。FFmpeg官网的编译入口地址为https://trac.ffmpeg.org/wiki/CompilationGuide,在这里可以找到FFmpeg对各系统的编译说明。更多详细的FFmpeg开发知识参见《F......
  • 用ffmpeg命令行将图片转为JPEG XL
    多的就不说了,直接上命令:ffmpeg-iinput.jpgoutput.jxl还可以设置转换的质量(下面那个90就是保留百分之多少画质的意思)ffmpeg-iinput.jpg-q:v90output.jxljpegxl介绍JPEGXL是一种自由的图像文件格式,支持有损和无损压缩(下面简称jxl).他在保留高画质的情况......
  • python 使用 ffmpeg合成音视频
    moviepy太慢了,ffmpeg似乎快一点1.从github下载安装https://github.com//BtbN/FFmpeg-Builds/releases  下载了ffmpeg-master-latest-win64-gpl-shared.zip 直接解压到某个目录中,如:D:\ffmpeg  ,并添加环境变量,将  D:\ffmpeg 添加到path变量中(win10)在命令行运行 ffm......
  • ffmpeg SDK编码MP4 AAC的一处小坑
    在最新版的ffmpegSDK中,如果我们按照一般的编码音频的步骤编码AAC并封入MP4,我们往往会写入一个很奇怪的音频Stream。它的MediaInfo会长这样:如图所示,解码器不能理解这个流,会认为它就是一个ERParametric而不能理解它是AAC。ffprobe查看stream其配置也会很奇怪:[STREAM]index=1c......
  • ffmpeg实现视频的加密解密
    刚打开一个视频,发现居然是加密的,感觉这个还挺有意思的:然后店家还给了这样一个播放的软件,打开是这样的:看来是需要密码的,从potplayer的打印来看就是这个视频的一些类型不对了,因此设备无法识别,就没法打开,我发现ffmpeg也可以实现:加密方式:#使用AES-128-CBC算法对视频文件进行加......
  • FFmpeg-aac、h264封装flv及时间转换
    文章目录时间概念流程api核心代码时间概念dts:解码时间戳,表示压缩帧的解码时间pts:显示时间戳,表示将压缩帧解码后得到的原始帧的显示时间时间基:time_base,通常以ms为单位时间戳:timestamp,多少个时间基真实时间:time_base*timestamp如一个视频帧......