JeeGit 官方论坛

找回密码
立即注册
搜索
热搜: 活动 交友 discuz
发新帖
楼主: admin
查看: 427| 回复: 22
发表于 2024-3-19 19:22:15


ffmpeg -y -i "C:\Users\jeegit-003\Desktop\demo\jl2401001.mp4" -s 640*360 -c:v libx264 -hls_time 2 -hls_playlist_type vod -hls_segment_filename "C:\Users\jeegit-003\Desktop\demo\demo1\jl2401001-%d.ts" "C:\Users\jeegit-003\Desktop\demo\demo1\jl2401001.m3u8"

回复 显示全部楼层 道具 举报

发表于 2024-3-19 19:34:03
ffmpeg -y -i "C:\Users\jeegit-003\Desktop\demo\jl2401001.mp4" -s 640*360 -c:v libx264 -hls_time 2 -hls_playlist_type vod -hls_segment_filename "C:\Users\jeegit-003\Desktop\demo\demo\jl2401001-%d.ts" "C:\Users\jeegit-003\Desktop\demo\demo\jl2401001.m3u8"

回复 显示全部楼层 道具 举报

发表于 2024-3-20 22:23:27
  1. 2024/3/20 22:23:14-----------------------------Begin 选择视频任务-----------------------------
  2. 添加文件C:\Users\jeegit-003\Desktop\demo\jl2401001.mp4
  3. 添加文件C:\Users\jeegit-003\Desktop\demo\jl2401002.mp4
  4. 添加文件C:\Users\jeegit-003\Desktop\demo\jl2401007.mp4
  5. 添加文件C:\Users\jeegit-003\Desktop\demo\jl2401008.mp4
  6. 2024/3/20 22:23:17-----------------------------End 结束选择视频任务-----------------------------
  7. 2024/3/20 22:23:18-----------------------------Begin 开始分割任务-----------------------------
  8. 不含后缀名称:jl2401007
  9. 文件名前路径:C:\Users\jeegit-003\Desktop\demo
  10. 无扩展名路径:C:\Users\jeegit-003\Desktop\demo\jl2401007
  11. 批处理:ffmpeg -y -i "C:\Users\jeegit-003\Desktop\demo\jl2401007.mp4" -s 640*360 -c:v libx264 -hls_time 12 -hls_playlist_type vod -hls_segment_filename "jl2401002-%d.ts" "jl2401002.m3u8"
  12. 批处理:ffmpeg -y -i "C:\Users\jeegit-003\Desktop\demo\jl2401007.mp4" -s 720*480 -c:v libx264 -hls_time 12 -hls_playlist_type vod -hls_segment_filename "jl2401002-%d.ts" "jl2401002.m3u8"
  13. 批处理:ffmpeg -y -i "C:\Users\jeegit-003\Desktop\demo\jl2401007.mp4" -s 1280*720 -c:v libx264 -hls_time 12 -hls_playlist_type vod -hls_segment_filename "jl2401002-%d.ts" "jl2401002.m3u8"
  14. 选中文件:C:\Users\jeegit-003\Desktop\demo\jl2401007.mp4
  15. 2024/3/20 22:23:18-----------------------------End 结束分割任务-----------------------------
复制代码

回复 显示全部楼层 道具 举报

发表于 2024-3-20 22:26:59
2024/3/20 22:26:46-----------------------------Begin 选择视频任务-----------------------------
添加文件C:\Users\jeegit-003\Desktop\demo\jl2401001.mp4
添加文件C:\Users\jeegit-003\Desktop\demo\jl2401002.mp4
添加文件C:\Users\jeegit-003\Desktop\demo\jl2401007.mp4
添加文件C:\Users\jeegit-003\Desktop\demo\jl2401008.mp4
2024/3/20 22:26:48-----------------------------End 结束选择视频任务-----------------------------
2024/3/20 22:26:49-----------------------------Begin 开始分割任务-----------------------------
2024/3/20 22:26:50-----------------------------End 结束分割任务-----------------------------
2024/3/20 22:26:53-----------------------------Begin 开始分割任务-----------------------------
不含后缀名称:jl2401001
文件名前路径:C:\Users\jeegit-003\Desktop\demo
无扩展名路径:C:\Users\jeegit-003\Desktop\demo\jl2401001
批处理:ffmpeg -y -i "C:\Users\jeegit-003\Desktop\demo\jl2401001.mp4" -s 640*360 -c:v libx264 -hls_time 12 -hls_playlist_type vod -hls_segment_filename "C:\Users\jeegit-003\Desktop\demo\jl2401001\360\jl2401001-%d.ts" "C:\Users\jeegit-003\Desktop\demo\jl2401001\360\jl2401001.m3u8"
批处理:ffmpeg -y -i "C:\Users\jeegit-003\Desktop\demo\jl2401001.mp4" -s 720*480 -c:v libx264 -hls_time 12 -hls_playlist_type vod -hls_segment_filename "C:\Users\jeegit-003\Desktop\demo\jl2401001\480\jl2401001-%d.ts" "C:\Users\jeegit-003\Desktop\demo\jl2401001\480\jl2401001.m3u8"
批处理:ffmpeg -y -i "C:\Users\jeegit-003\Desktop\demo\jl2401001.mp4" -s 1280*720 -c:v libx264 -hls_time 12 -hls_playlist_type vod -hls_segment_filename "C:\Users\jeegit-003\Desktop\demo\jl2401001\720\jl2401001-%d.ts" "C:\Users\jeegit-003\Desktop\demo\jl2401001\720\jl2401001.m3u8"
选中文件:C:\Users\jeegit-003\Desktop\demo\jl2401001.mp4
不含后缀名称:jl2401002
文件名前路径:C:\Users\jeegit-003\Desktop\demo
无扩展名路径:C:\Users\jeegit-003\Desktop\demo\jl2401002
批处理:ffmpeg -y -i "C:\Users\jeegit-003\Desktop\demo\jl2401002.mp4" -s 640*360 -c:v libx264 -hls_time 12 -hls_playlist_type vod -hls_segment_filename "C:\Users\jeegit-003\Desktop\demo\jl2401002\360\jl2401002-%d.ts" "C:\Users\jeegit-003\Desktop\demo\jl2401002\360\jl2401002.m3u8"
批处理:ffmpeg -y -i "C:\Users\jeegit-003\Desktop\demo\jl2401002.mp4" -s 720*480 -c:v libx264 -hls_time 12 -hls_playlist_type vod -hls_segment_filename "C:\Users\jeegit-003\Desktop\demo\jl2401002\480\jl2401002-%d.ts" "C:\Users\jeegit-003\Desktop\demo\jl2401002\480\jl2401002.m3u8"
批处理:ffmpeg -y -i "C:\Users\jeegit-003\Desktop\demo\jl2401002.mp4" -s 1280*720 -c:v libx264 -hls_time 12 -hls_playlist_type vod -hls_segment_filename "C:\Users\jeegit-003\Desktop\demo\jl2401002\720\jl2401002-%d.ts" "C:\Users\jeegit-003\Desktop\demo\jl2401002\720\jl2401002.m3u8"
选中文件:C:\Users\jeegit-003\Desktop\demo\jl2401002.mp4
不含后缀名称:jl2401008
文件名前路径:C:\Users\jeegit-003\Desktop\demo
无扩展名路径:C:\Users\jeegit-003\Desktop\demo\jl2401008
批处理:ffmpeg -y -i "C:\Users\jeegit-003\Desktop\demo\jl2401008.mp4" -s 640*360 -c:v libx264 -hls_time 12 -hls_playlist_type vod -hls_segment_filename "C:\Users\jeegit-003\Desktop\demo\jl2401008\360\jl2401008-%d.ts" "C:\Users\jeegit-003\Desktop\demo\jl2401008\360\jl2401008.m3u8"
批处理:ffmpeg -y -i "C:\Users\jeegit-003\Desktop\demo\jl2401008.mp4" -s 720*480 -c:v libx264 -hls_time 12 -hls_playlist_type vod -hls_segment_filename "C:\Users\jeegit-003\Desktop\demo\jl2401008\480\jl2401008-%d.ts" "C:\Users\jeegit-003\Desktop\demo\jl2401008\480\jl2401008.m3u8"
批处理:ffmpeg -y -i "C:\Users\jeegit-003\Desktop\demo\jl2401008.mp4" -s 1280*720 -c:v libx264 -hls_time 12 -hls_playlist_type vod -hls_segment_filename "C:\Users\jeegit-003\Desktop\demo\jl2401008\720\jl2401008-%d.ts" "C:\Users\jeegit-003\Desktop\demo\jl2401008\720\jl2401008.m3u8"
选中文件:C:\Users\jeegit-003\Desktop\demo\jl2401008.mp4
2024/3/20 22:26:53-----------------------------End 结束分割任务-----------------------------

回复 显示全部楼层 道具 举报

发表于 2024-3-21 09:26:28
  1. 好的,我将展示如何在C#中执行FFmpeg命令,并监听回调信息,包括失败和成功事件。下面是一个完整的示例代码:

  2. ```csharp
  3. using System;
  4. using System.Diagnostics;
  5. using System.IO;

  6. namespace FFmpegExample
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             string inputFile = "input.mp4";
  13.             string outputFile = "output.mp4";
  14.             string ffmpegPath = "path/to/ffmpeg";

  15.             ExecuteFFmpegCommand(ffmpegPath, inputFile, outputFile);
  16.         }

  17.         static void ExecuteFFmpegCommand(string ffmpegPath, string inputFile, string outputFile)
  18.         {
  19.             try
  20.             {
  21.                 string arguments = $"-i "{inputFile}" -c:v libx264 -crf 23 "{outputFile}"";

  22.                 using (Process process = new Process())
  23.                 {
  24.                     process.StartInfo.FileName = ffmpegPath;
  25.                     process.StartInfo.Arguments = arguments;
  26.                     process.StartInfo.UseShellExecute = false;
  27.                     process.StartInfo.RedirectStandardOutput = true;
  28.                     process.StartInfo.RedirectStandardError = true;

  29.                     process.OutputDataReceived += Process_OutputDataReceived;
  30.                     process.ErrorDataReceived += Process_ErrorDataReceived;

  31.                     process.Start();
  32.                     process.BeginOutputReadLine();
  33.                     process.BeginErrorReadLine();

  34.                     process.WaitForExit();

  35.                     if (process.ExitCode == 0)
  36.                     {
  37.                         Console.WriteLine("FFmpeg命令执行成功!");
  38.                     }
  39.                     else
  40.                     {
  41.                         Console.WriteLine($"FFmpeg命令执行失败,退出代码:{process.ExitCode}");
  42.                     }
  43.                 }
  44.             }
  45.             catch (Exception ex)
  46.             {
  47.                 Console.WriteLine($"发生异常:{ex.Message}");
  48.             }
  49.         }

  50.         private static void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
  51.         {
  52.             if (!string.IsNullOrWhiteSpace(e.Data))
  53.             {
  54.                 Console.WriteLine(e.Data);
  55.             }
  56.         }

  57.         private static void Process_ErrorDataReceived(object sender, DataReceivedEventArgs e)
  58.         {
  59.             if (!string.IsNullOrWhiteSpace(e.Data))
  60.             {
  61.                 Console.WriteLine(e.Data);
  62.             }
  63.         }
  64.     }
  65. }
  66. ```

  67. 在上面的代码中,我们定义了一个`ExecuteFFmpegCommand`方法,用于执行FFmpeg命令。这个方法接收三个参数:FFmpeg的路径,输入文件和输出文件。

  68. 在`ExecuteFFmpegCommand`方法内部,我们首先构建FFmpeg命令行参数,然后创建一个新的`Process`对象。我们设置了`StartInfo`属性,包括FFmpeg的路径和命令行参数,并启用了重定向标准输出和错误输出。

  69. 接下来,我们为`Process`对象的`OutputDataReceived`和`ErrorDataReceived`事件绑定了事件处理程序。这两个事件分别用于捕获FFmpeg的标准输出和错误输出。在事件处理程序中,我们将输出信息直接写入控制台。

  70. 然后,我们调用`Process.Start()`启动FFmpeg进程,并调用`BeginOutputReadLine`和`BeginErrorReadLine`方法开始异步读取输出和错误信息。

  71. 最后,我们等待FFmpeg进程退出,并根据退出代码判断命令是否执行成功。

  72. 在这个示例中,我们监听了FFmpeg的标准输出和错误输出,并将它们打印到控制台。你可以根据实际需求,在事件处理程序中进行其他操作,例如记录日志、发送通知等。

  73. 需要注意的是,你需要确保FFmpeg可执行文件存在于指定的路径,并且输入文件也存在。否则,FFmpeg命令将无法正确执行。
复制代码

回复 显示全部楼层 道具 举报

发表于 2024-3-21 10:48:02

回复 显示全部楼层 道具 举报

发表于 2024-3-21 11:40:20
  1. using System;
  2. using System.Diagnostics;
  3. using System.Threading;
  4. using System.Threading.Tasks;

  5. class Program
  6. {
  7.     static void Main(string[] args)
  8.     {
  9.         var tasks = new Task[3];
  10.         for (int i = 0; i < tasks.Length; i++)
  11.         {
  12.             int taskId = i;
  13.             tasks[i] = Task.Run(() => ExecuteCommand(taskId));
  14.         }

  15.         Task.WaitAll(tasks);
  16.         Console.WriteLine("All commands have been executed.");
  17.     }

  18.     static void ExecuteCommand(int taskId)
  19.     {
  20.         ProcessStartInfo startInfo = new ProcessStartInfo
  21.         {
  22.             FileName = "cmd.exe",
  23.             RedirectStandardInput = true,
  24.             RedirectStandardOutput = true,
  25.             UseShellExecute = false,
  26.             CreateNoWindow = true
  27.         };

  28.         using (Process process = Process.Start(startInfo))
  29.         {
  30.             using (var sw = process.StandardInput)
  31.             {
  32.                 if (sw.BaseStream.CanWrite)
  33.                 {
  34.                     sw.WriteLine($"echo Command {taskId}");
  35.                     sw.WriteLine("exit");
  36.                 }
  37.             }

  38.             while (!process.StandardOutput.EndOfStream)
  39.             {
  40.                 string result = process.StandardOutput.ReadToEnd();
  41.                 Console.WriteLine($"Task {taskId}: {result}");
  42.             }
  43.         }
  44.     }
  45. }
复制代码




c# 多线程操作 process 执行命令
在C#中,可以使用System.Diagnostics.Process类来启动一个新的进程并与之交互,包括在多线程环境中执行命令。以下是一个简单的示例,展示了如何在多线程环境中使用Process类来启动多个命令:
这段代码中,我们定义了一个ExecuteCommand方法,它启动一个新的cmd.exe进程,并通过标准输入发送命令。每个命令都会打印出Task ID,然后通过标准输出读取并打印结果。在Main方法中,我们创建了三个并行运行的任务,每个任务都使用不同的taskId调用ExecuteCommand方法。

请注意,在实际应用中,你可能需要添加更多的错误处理和同步机制来确保程序的健壮性和线程安全。

回复 显示全部楼层 道具 举报

发表于 2024-3-21 11:55:04
https://zhuanlan.zhihu.com/p/568602274

不同间线程访问解决方案。

回复 显示全部楼层 道具 举报

发表于 2024-3-21 11:55:21
Control.CheckForIllegalCrossThreadCalls = false

回复 显示全部楼层 道具 举报

发表于 2024-3-21 12:10:50

回复 显示全部楼层 道具 举报

您需要登录后才可以回帖 登录 | 立即注册

QQ|Archiver|手机版|小黑屋|JeeGit 官方论坛 ( 吉ICP备19001578号-2|吉B2-20200006 )

GMT+8, 2024-5-9 14:44 , Processed in 0.032315 second(s), 15 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表