zoukankan      html  css  js  c++  java
  • ffmpeg视频转换为flv格式,视频截取图片

     
    /// <summary>
            
    /// 视频(avi,mov等等格式)转换为flv格式视频
            
    /// </summary>
            
    /// <param name="FromName">被转换的视频文件</param>
            
    /// <param name="ExportName">转换flv后的文件名</param>
            
    /// <param name="ExportName">视频大小的尺寸</param>
            
    /// <returns></returns>

            public string VideoConvertFlv(string FromName,string ExportName,string WidthAndHeight)
            
    {
                
    string ffmpeg=@"C:Inetpubwwwrootdemopic fmpeg.exe";
                System.Diagnostics.ProcessStartInfo startInfo 
    = new System.Diagnostics.ProcessStartInfo(ffmpeg);
                startInfo.WindowStyle 
    = System.Diagnostics.ProcessWindowStyle.Hidden;
                startInfo.Arguments 
    = " -i " + Server.MapPath(FromName) + " -ab 56 -ar 22050 -b 500 -r 15 -s "+WidthAndHeight+" "+Server.MapPath(ExportName);
                
    try 
                
    {
                    System.Diagnostics.Process.Start(startInfo);
                    
    return ExportName;
                }

                
    catch(Exception err)
                
    {
                    
    return err.Message;
                }


            }
    /// <summary>
            
    /// 从视频画面中截取一帧画面为图片
            
    /// </summary>
            
    /// <param name="VideoName">视频文件pic/guiyu.mov</param>
            
    /// <param name="WidthAndHeight">图片的尺寸如:240*180</param>
            
    /// <param name="CutTimeFrame">开始截取的时间如:"1"</param>
            
    /// <returns></returns>

            public string GetPicFromVideo(string VideoName,string WidthAndHeight,string CutTimeFrame)
            
    {
                
                
    string ffmpeg=@"C:Inetpubwwwrootdemopic fmpeg.exe";
                
    string PicName =Server.MapPath(Guid.NewGuid().ToString().Replace("-","")+".jpg");
                System.Diagnostics.ProcessStartInfo startInfo 
    = new System.Diagnostics.ProcessStartInfo(ffmpeg);
                startInfo.WindowStyle 
    = System.Diagnostics.ProcessWindowStyle.Hidden; 
                startInfo.Arguments 
    = " -i " + Server.MapPath(VideoName) + " -y -f image2 -ss "+CutTimeFrame+" -t 0.001 -s " + WidthAndHeight + " " + PicName ;
                
    try 
                
    {
                    System.Diagnostics.Process.Start(startInfo);
                    
    return PicName;
                }

                
    catch(Exception err)
                
    {
                    
    return err.Message;
                }
            
            }
    ffmpeg参数使用说明


    ffmpeg.exe 
    -i F:闪客之家闪客之歌.mp3 -ab 56 -ar 22050 -500 -15 -s 320x240 f:11.flv
    ffmpeg 
    -i F:1.wmv -ab 56 -ar 22050 -500 -15 -s 320x240 f:test.flv
    使用
    -ss参数 作用(time_off set the start time offset),可以从指定时间点开始转换任务。如:
    转换文件格式的同时抓缩微图:
    ffmpeg 
    -"test.avi" --f image2 -ss 8 -0.001 -s 350x240 'test.jpg'
    对已有flv抓图:
    ffmpeg 
    -"test.flv" --f image2 -ss 8 -0.001 -s 350x240 'test.jpg'
    -ss后跟的时间单位为秒
    Ffmpeg转换命令
    ffmpeg 
    --i test.mpeg -bitexact -vcodec h263 -128 -15 -s 176x144 -acodec aac -ac 2 -ar 22500 
    -ab 24 -f 3gp test.3gp
    或者
    ffmpeg 
    --i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -128 -15 test.3gp


    ffmpeg参数设定解说 
    -bitexact 使用标准比特率 
    -vcodec xvid 使用xvid压缩 
    -s 320x240 指定分辨率 
    -29.97 桢速率(可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97) 
    画面部分,选其一 
    -<比特率> 指定压缩比特率,似乎ffmpeg是自动VBR的,指定了就大概是平均比特率,比如768,1500这样的
    就是原来默认项目中有的 
    -qscale <数值> 以<数值>质量为基础的VBR,取值0.01-255,约小质量越好 
    -qmin <数值> 设定最小质量,与-qmax(设定最大质量)共用,比如-qmin 10 -qmax 31 
    -sameq 使用和源同样的质量 
    声音部分 
    -acodec aac 设定声音编码 
    -ac <数值> 设定声道数,1就是单声道,2就是立体声,转换单声道的TVrip可以用1(节省一半容量),高品质
    的DVDrip就可以用2 
    -ar <采样率> 设定声音采样率,PSP只认24000 
    -ab <比特率> 设定声音比特率,前面-ac设为立体声时要以一半比特率来设置,比如192kbps的就设成96,转换
    君默认比特率都较小,要听到较高品质声音的话建议设到160kbps(
    80)以上 
    -vol <百分比> 设定音量,某些DVDrip的AC3轨音量极小,转换时可以用这个提高音量,比如200就是原来的2倍 
    这样,要得到一个高画质音质低容量的MP4的话,首先画面最好不要用固定比特率,而用VBR参数让程序自己去
    判断,而音质参数可以在原来的基础上提升一点,听起来要舒服很多,也不会太大(看情况调整


    例子:ffmpeg 
    --"1.avi" -title "Test" -vcodec xvid -s 368x208 -29.97 -1500 -acodec aac -ac 2 -ar 24000 -ab 128 -vol 200 -f psp -muxvb 768 "1.***"

    解释:以上命令可以在Dos命令行中输入,也可以创建到批处理文件中运行。不过,前提是:要在ffmpeg所在的目录中执行(转换君所在目录下面的cores子目录)。
    参数:
    -y(覆盖输出文件,即如果1.***文件已经存在的话,不经提示就覆盖掉了)
    -"1.avi"(输入文件是和ffmpeg在同一目录下的1.avi文件,可以自己加路径,改名字)
    -title "Test"(在PSP中显示的影片的标题)
    -vcodec xvid(使用XVID编码压缩视频,不能改的)
    -s 368x208(输出的分辨率为368x208,注意片源一定要是16:9的不然会变形)
    -29.97(帧数,一般就用这个吧)
    -1500(视频数据流量,用-b xxxx的指令则使用固定码率,数字随便改,1500以上没效果;还可以用动态码率如:-qscale 4和-qscale 6,4的质量比6高)
    -acodec aac(音频编码用AAC)
    -ac 2(声道数1或2)
    -ar 24000(声音的采样频率,好像PSP只能支持24000Hz)
    -ab 128(音频数据流量,一般选择32、6496128
    -vol 200200%的音量,自己改)
    -f psp(输出psp专用格式)
    -muxvb 768(好像是给PSP机器识别的码率,一般选择384、512和768,我改成1500,PSP就说文件损坏了)
    "1.***"(输出文件名,也可以加路径改文件名)

    P.S. 版主机器强劲的话,可以多开几个批处理文件,让它们并行处理。 
    E:ffmpeg.exe 
    -i I:1.wmv -360 -25 -s 320x240 -hq -deinterlace -ab 56 -ar 22050 -ac 1 D:2.flv 

  • 相关阅读:
    那些年搞不懂的多线程、同步异步及阻塞和非阻塞(二)---概念区分
    那些年搞不懂的多线程、同步异步及阻塞和非阻塞(一)---多线程简介
    websocket简单实例
    map对象拷贝问题
    【简单算法】44.位1的个数
    【简单算法】43.罗马数字转整数
    【简单算法】42. 3的幂
    【简单算法】41.计数质数
    【简单算法】40.Fizz Buzz
    【简单算法】39.最小栈
  • 原文地址:https://www.cnblogs.com/dfsxh/p/1631272.html
Copyright © 2011-2022 走看看