• ffmpeg转码视频


    转码和编辑视频
    FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库

    libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。
    FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。 [1] FFmpeg编码库可以使用GPU加速
    多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。


    命令集

    1. ffmpeg 命令集举例
    2. 1.获取视频的信息
    3. ffmpeg -i video.avi
    4. 2.将图片序列合成视频
    5. ffmpeg -f image2 -i image%d.jpg video.mpg
    6. 上面的命令会把当前目录下的图片(名字如:image1.jpg. image2.jpg. 等...)合并成video.mpg
    7. 3.将视频分解成图片序列
    8. ffmpeg -i video.mpg image%d.jpg
    9. 上面的命令会生成image1.jpg. image2.jpg. ...
    10. 支持的图片格式有:PGM. PPM. PAM. PGMYUV. JPEG. GIF. PNG. TIFF. SGI
    11. 4.为视频重新编码以适合在iPod/iPhone上播放
    12. ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4
    13. 说明:
    14. * 源视频:source_video.avi
    15. * 音频编码:aac
    16. * 音频位率:128kb/s
    17. * 视频编码:mpeg4
    18. * 视频位率:1200kb/s
    19. * 视频尺寸:320 X 180
    20. * 生成的视频:final_video.mp4
    21. 5.为视频重新编码以适合在PSP上播放
    22. ffmpeg -i source_video.avi -b 300 -s 320x240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_video.mp4
    23. 说明:
    24. * 源视频:source_video.avi
    25. * 音频编码:aac
    26. * 音频位率:32kb/s
    27. * 视频编码:xvid
    28. * 视频位率:1200kb/s
    29. * 视频尺寸:320 X 240
    30. * 生成的视频:final_video.mp4
    31. 6.从视频抽出声音.并存为Mp3
    32. ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3
    33. 说明:
    34. * 源视频:source_video.avi
    35. * 音频位率:192kb/s
    36. * 输出格式:mp3
    37. * 生成的声音:sound.mp3
    38. 7.将avi文件转成Mp3
    39. ffmpeg -i son_origine.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3
    40. 8.将.avi视频转成.mpg
    41. ffmpeg -i video_origine.avi video_finale.mpg
    42. 9.将.mpg转成.avi
    43. ffmpeg -i video_origine.mpg video_finale.avi
    44. 10.将.avi转成gif动画(未压缩)
    45. ffmpeg -i video_origine.avi gif_anime.gif
    46. 11.合成视频和音频
    47. ffmpeg -i son.wav -i video_origine.avi video_finale.mpg
    48. 12.将.avi转成.flv
    49. ffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finale.flv
    50. 13.将.avi转成dv
    51. ffmpeg -i video_origine.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 video_finale.dv
    52. 或者:
    53. ffmpeg -i video_origine.avi -target pal-dv video_finale.dv
    54. 14.将.avi压缩成divx
    55. ffmpeg -i video_origine.avi -s 320x240 -vcodec msmpeg4v2 video_finale.avi
    56. 15.将Ogg Theora压缩成Mpeg dvd
    57. ffmpeg -i film_sortie_cinelerra.ogm -s 720x576 -vcodec mpeg2video -acodec mp3 film_terminate.mpg
    58. 16.将.avi压缩成SVCD mpeg2
    59. NTSC格式:
    60. ffmpeg -i video_origine.avi -target ntsc-svcd video_finale.mpg
    61. PAL格式:
    62. ffmpeg -i video_origine.avi -target pal-svcd video_finale.mpg
    63. 17.将.avi压缩成VCD mpeg2
    64. NTSC格式:
    65. ffmpeg -i video_origine.avi -target ntsc-vcd video_finale.mpg
    66. PAL格式:
    67. ffmpeg -i video_origine.avi -target pal-vcd video_finale.mpg
    68. 18.多通道编码
    69. ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2
    70. 19.从flv提取mp3
    71. ffmpeg -i source.flv -ab 128k dest.mp3

    1. -c:v libx264 c:v指定视频解码器,libx264解码器
    2. -hls_time 3 切片间隔3
    3. -hls_list_size 30 最大切片数
    4. -hls_wrap 30 最大轮博数
    5. -f hls 转成m3u8格式
    6. -force_key_frames "expr:gte(t,n_forced*1)" 设置关键帧间隔,设置间隔为2秒的参数如下:-force_key_frames "expr:gte(t,n_forced*2)"
    7. -rtsp_transport tcp -i 强制使用TCP方式读取rtsp流
    8. -s 640x480 视频分辨率

    进入ffmpeg官网下载Win64版本,下载速度很快,下载下来就是一个压缩包,解压后就是工具本体了,不过它没有任何UI界面,在Windows下你只能进入bin目录,然后Shift+鼠标右键打开命令窗口,使用ffmpeg的指令进行操作。

    下面分析网上搜集的ffmpeg简单用法,可以进行很多基础的视频编辑。

    CSDN后台私信或文末卡片加入免费领取最新最全C++/音视频开发学习提升资料,内容包括(C/C++,Linux 服务器开发,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

    ffmpeg的简单用法


    转码
    最简单命令如下:

    1. ffmpeg -i out.ogv -vcodec h264 out.mp4
    2. ffmpeg -i out.ogv -vcodec mpeg4 out.mp4
    3. ffmpeg -i out.ogv -vcodec libxvid out.mp4
    4. ffmpeg -i out.mp4 -vcodec wmv1 out.wmv
    5. ffmpeg -i out.mp4 -vcodec wmv2 out.wmv

    -i 后面是输入文件名。-vcodec 后面是编码格式,h264 最佳,但 Windows 系统默认不安装。如果是要插入 ppt 的视频,选择 wmv1 或 wmv2 基本上万无一失。
    附加选项:-r 指定帧率,-s 指定分辨率,-b 指定比特率;于此同时可以对声道进行转码,-acodec 指定音频编码,-ab 指定音频比特率,-ac 指定声道数,例如

    ffmpeg -i out.ogv -s 640x480 -b 500k -vcodec h264 -r 29.97 -acodec libfaac -ab 48k -ac 2 out.mp4

    剪切

    用 -ss 和 -t 选项, 从第 30 秒开始,向后截取 10 秒的视频,并保存:

    1. ffmpeg -i input.wmv -ss 00:00:30.0 -c copy -t 00:00:10.0 output.wmv
    2. ffmpeg -i input.wmv -ss 30 -c copy -t 10 output.wmv

    达成相同效果,也可以用 -ss 和 -to 选项, 从第 30 秒截取到第 40 秒:

    ffmpeg -i input.wmv -ss 30 -c copy -to 40 output.wmv

    值得注意的是,ffmpeg 为了加速,会使用关键帧技术, 所以有时剪切出来的结果在起止时间上未必准确。 通常来说,把 -ss 选项放在 -i 之前,会使用关键帧技术; 把 -ss 选项放在 -i 之后,则不使用关键帧技术。 如果要使用关键帧技术又要保留时间戳,可以加上 -copyts 选项:

    ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4

    合并

    把两个视频文件合并成一个。

    简单地使用 concat demuxer,示例:

    1. $ cat mylist.txt
    2. file '/path/to/file1'
    3. file '/path/to/file2'
    4. file '/path/to/file3'
    5. $ ffmpeg -f concat -i mylist.txt -c copy output

    更多时候,由于输入文件的多样性,需要转成中间格式再合成:

    1. ffmpeg -i input1.avi -qscale:v 1 intermediate1.mpg
    2. ffmpeg -i input2.avi -qscale:v 1 intermediate2.mpg
    3. cat intermediate1.mpg intermediate2.mpg > intermediate_all.mpg
    4. ffmpeg -i intermediate_all.mpg -qscale:v 2 output.avi

    调整播放速度

    加速四倍:

    ffmpeg -i TheOrigin.mp4 -vf  "setpts=0.25*PTS" UpTheOrigin.mp4

    四倍慢速:

    ffmpeg -i TheOrigin.mp4 -vf "setpts=4*PTS" DownTheOrigin.mp4

    帧率设置

    使用-r选项
    语法是:

    ffmpeg -i input -r fps output

    例如:

    ffmpeg -i input.avi -r 30 output.mp4

    使用fps filter

    另一个设置帧率是用fps filter,特别是在filterchains使用时非常有用。
    例如:修改输入文件的帧率到25

    ffmpeg -v clip.mpg -vf fps=fps=25 clip.webm

    比特率设置

    比特率也是一个决定音视频总体质量的参数。他决定每个时间单位处理的bit数。
    设置比特率:

    比特率决定处理1s的编码流需要多少bits,设置用-b选项。区分音视频用-b:a和-b:v
    例如:设置整体1.5Mbit每秒

    1. ffmpeg -i file.avi -b 1.5M file.mp4
    2. ffmpeg -i input.avi -b:v 1500K output.mp4

    CBR设置
    CBR设置一般用作直播流,比如视频会议。为输出设置CBR,有三个参数必须设置为同一个值。
    bitrate(-b option), minimal rate(-minrate), maximal rate(-maxrate)。maximal rate需要设置-bufsize选项。例如设置CBR为0.5Mbit/s。

    ffmpeg -i in.avi -b 0.5M -minrate 0.5M -maxrate 0.5M -bufsize 1M output.mkv

    设置输出文件的最大size

    用-fs选项。
    例如设置输出文件的最大的size为10M

    ffmpeg -i input.avi -fs 10MB output.mp4

    文件大小计算

    文件的大小是是音视频流大小的和。
    视频流的大小的方程式是(除以8是由bits到bytes的转换):

    video_size = video_bitrate * time_in_seconds / 8;

    如果音频是解压缩的,计算公式是:

    audio_size = smpaling_rate * bit_depth * channels * time_in_second / 8;

    例如:计算10分钟的视频, 1500kbits/s 视频比特率和 128kbits/s的音频比特率,用下面的计算方法:

    1. file_size = video_size + audio_size;
    2. file_size = (video_bitrate + audio_bitrate) * time_in_seconds / 8;
    3. file_size = (1500 kbits/s + 128kbits/s) * 600s
    4. file_size = 1628kbits/s * 600s
    5. file_size = 976800kb = 976800000 b / 8 = 122100000 B / 1024 = 119238.28125KB
    6. file_size = 119238.28125 KB / 1024 = 116.443634033203125MB = 116.44M

    FFmpeg资料文末卡片免费分享

  • 相关阅读:
    界面控件DevExpress WPF PDF Viewer,更快实现应用的PDF文档浏览
    centos7中安装mongoDB4
    基础算法--理解递归
    redis的原理和源码-数据持久化方式RDB的介绍和源码解析
    Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等)
    大数据必学Java基础(一百零九):过滤器的使用
    DSPE-PEG-Silane DSPE-PEG-SIL 磷脂-聚乙二醇-硅烷疏水性18碳饱和磷脂
    Redis - 利用lua脚本控制密码错误次数超限,锁定账号
    基于node.js自动写入版本号解决前端vue或webpack项目因分包发版引起的报错问题
    如何使用rclone将腾讯云COS桶中的数据同步到华为云OBS
  • 原文地址:https://blog.csdn.net/yinshipin007/article/details/127874630