目录:
1. FFmpeg简介 FFmpeg编码流程 FFmpeg混淆概念
2.FFmpeg操作参数
3.FFmpeg常用操作
6. FFmpeg常用操作
上一篇的2.FFmpeg操作参数,FFmpeg用法中全局选项和文件主选项等内容,尤为重要。
FFmpeg用法:
ffmpeg [global_options] {[input_file_options] -i input_file} ... {[output_file_options] output_file} ...
ffmpeg [全局选项] {[输入文件选项] -i 输入/url/地址}... {[输出文件选项] 输出/url/地址}...
1.查看视频格式:
输入:
#桌面ffmpeg文件夹中的input.mp4
输出:(可不看)
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
built with Apple clang version 11.0.0 (clang-1100.0.33.16)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.2_1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/AAA/Desktop/ffmpeg/input.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
encoder : Lavf58.29.100
description : Packed by Bilibili XCoder v2.0.2
Duration: 00:06:28.00, start: 0.000000, bitrate: 573 kb/s
Stream #0:0(und): Video: hevc (Main) (hev1 / 0x31766568), yuv420p(tv), 1728x1080 [SAR 1:1 DAR 8:5], 436 kb/s, 30 fps, 30 tbr, 16k tbn, 30 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 126 kb/s (default)
Metadata:
handler_name : SoundHandler
At least one output file must be specified
2. 修改视频封装格式:(转为.mov)
输入:
ffmpeg -i /Users/AAA/Desktop/ffmpeg/input.mp4 /Users/AAA/Desktop/ffmpeg/output.mov
输出:(可不看)
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
built with Apple clang version 11.0.0 (clang-1100.0.33.16)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.2_1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/AAA/Desktop/ffmpeg/input.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
encoder : Lavf58.29.100
description : Packed by Bilibili XCoder v2.0.2
Duration: 00:06:28.00, start: 0.000000, bitrate: 573 kb/s
Stream #0:0(und): Video: hevc (Main) (hev1 / 0x31766568), yuv420p(tv), 1728x1080 [SAR 1:1 DAR 8:5], 436 kb/s, 30 fps, 30 tbr, 16k tbn, 30 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 126 kb/s (default)
Metadata:
handler_name : SoundHandler
Stream mapping:
Stream #0:0 -> #0:0 (hevc (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
[libx264 @ 0x7fd0bf80b600] using SAR=1/1
[libx264 @ 0x7fd0bf80b600] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x7fd0bf80b600] profile High, level 4.0
[libx264 @ 0x7fd0bf80b600] 264 - core 155 r2917 0a84d98 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - x264, the best H.264/AVC encoder - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mov, to '/Users/AAA/Desktop/ffmpeg/output.mov':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
description : Packed by Bilibili XCoder v2.0.2
encoder : Lavf58.29.100
Stream #0:0(und): Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 1728x1080 [SAR 1:1 DAR 8:5], q=-1--1, 30 fps, 15360 tbn, 30 tbc (default)
Metadata:
handler_name : VideoHandler
encoder : Lavc58.54.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
encoder : Lavc58.54.100 aac
frame=11640 fps= 79 q=-1.0 Lsize= 18175kB time=00:06:27.97 bitrate= 383.8kbits/s speed=2.62x #这一行一直更新,待其更改完成
video:11652kB audio:6111kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.320352%
[libx264 @ 0x7fd0bf80b600] frame I:50 Avg QP:14.99 size: 84946
[libx264 @ 0x7fd0bf80b600] frame P:3061 Avg QP:18.46 size: 1925
[libx264 @ 0x7fd0bf80b600] frame B:8529 Avg QP:18.22 size: 210
[libx264 @ 0x7fd0bf80b600] consecutive B-frames: 1.6% 1.7% 1.1% 95.6%
[libx264 @ 0x7fd0bf80b600] mb I I16..4: 30.7% 51.7% 17.6%
[libx264 @ 0x7fd0bf80b600] mb P I16..4: 0.4% 0.6% 0.2% P16..4: 2.1% 0.5% 0.3% 0.0% 0.0% skip:95.9%
[libx264 @ 0x7fd0bf80b600] mb B I16..4: 0.0% 0.0% 0.0% B16..8: 1.5% 0.0% 0.0% direct: 0.0% skip:98.4% L0:49.8% L1:49.4% BI: 0.8%
[libx264 @ 0x7fd0bf80b600] 8x8 transform intra:50.5% inter:73.5%
[libx264 @ 0x7fd0bf80b600] coded y,uvDC,uvAC intra: 17.9% 10.6% 7.8% inter: 0.2% 0.3% 0.1%
[libx264 @ 0x7fd0bf80b600] i16 v,h,dc,p: 64% 32% 2% 3%
[libx264 @ 0x7fd0bf80b600] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 64% 9% 22% 2% 2% 0% 0% 1% 1%
[libx264 @ 0x7fd0bf80b600] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 35% 28% 14% 3% 4% 4% 4% 4% 4%
[libx264 @ 0x7fd0bf80b600] i8c dc,h,v,p: 87% 8% 4% 1%
[libx264 @ 0x7fd0bf80b600] Weighted P-Frames: Y:0.2% UV:0.1%
[libx264 @ 0x7fd0bf80b600] ref P L0: 67.6% 9.8% 13.5% 9.1% 0.0%
[libx264 @ 0x7fd0bf80b600] ref B L0: 73.0% 25.9% 1.1%
[libx264 @ 0x7fd0bf80b600] ref B L1: 97.8% 2.2%
[libx264 @ 0x7fd0bf80b600] kb/s:246.00
[aac @ 0x7fd0bf80ce00] Qavg: 939.389
3. 删除视频片头和片尾(三种方式)
片头:00:00-00:13,
片尾:05:53-结束,
删除片头后,正片内容持续时间段为 t:
t = 05:53-00:13 = 5min * 60s + (53-13)s = 300+40 = 340 s;
-t 持续时间段 ,显示格式:-t 340:
340 -accurate_seek -i /Users/AAA/Desktop/ffmpeg/input.mov -vcodec copy -acodec copy /Users/AAA/Desktop/ffmpeg/output.mov
或者:使用 -t 持续时间段,显示时间格式:HOURS:MM:SS.MICROSECONDS[1]
#从00:13开始截取视频,截取一段时长为05:40秒的视频。
实际本质同上一条:-t
或者:使用 -to 截止时间点,截取时间点从 -ss 00:13 秒开始到 -to 05:53 秒结束[2]
截止时间点 -to 计算方式:00:13 + 340 s =00:13 + 05:40 = 05:53
#-to 是截止时间点,时间格式:HOURS:MM:SS.MICROSECONDS 即-to 00:05:53.000
以上三种同输出:(可不看)
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
built with Apple clang version 11.0.0 (clang-1100.0.33.16)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.2_1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/AAA/Desktop/ffmpeg/input.mov':
Metadata:
major_brand : qt
minor_version : 512
compatible_brands: qt
encoder : Lavf58.29.100
Duration: 00:06:28.00, start: 0.000000, bitrate: 383 kb/s
Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1728x1080 [SAR 1:1 DAR 8:5], 246 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
encoder : Lavc58.54.100 libx264
Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 129 kb/s (default)
Metadata:
handler_name : SoundHandler
Output #0, mov, to '/Users/AAA/Desktop/ffmpeg/output.mov':
Metadata:
major_brand : qt
minor_version : 512
compatible_brands: qt
encoder : Lavf58.29.100
Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1728x1080 [SAR 1:1 DAR 8:5], q=2-31, 246 kb/s, 30 fps, 30 tbr, 15360 tbn, 15360 tbc (default)
Metadata:
handler_name : VideoHandler
encoder : Lavc58.54.100 libx264
Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 129 kb/s (default)
Metadata:
handler_name : SoundHandler
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=10242 fps=0.0 q=-1.0 Lsize= 13749kB time=00:05:39.98 bitrate= 331.3kbits/s speed=2.96e+03x
video:7984kB audio:5402kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.712406%
4. 删除视频台标/水印/logo[3]
- 打开视频,使用INNA播放器(不要用QuickTime播放!),选择以视频实际大小进行播放,快捷键:⌘+1 。
- 截取有台标/水印/logo的画面,我系统自定义快捷键:⌥+A 。
- 打开在线PS网页,显示标尺,查看台标/水印/logo的坐标位置。
例如:
x1=1440px y1=40px x2=1700px y2=80px
w=x2-x1=260px h=y2-y1=40px
输入:
"delogo=x=1440:y=40:w=260:h=40:show=0" -c:a copy /Users/AAA/Desktop/ffmpeg/output.mov
输出:(可不看)
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
built with Apple clang version 11.0.0 (clang-1100.0.33.16)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.2_1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/AAA/Desktop/ffmpeg/input.mov':
Metadata:
major_brand : qt
minor_version : 512
compatible_brands: qt
encoder : Lavf58.29.100
Duration: 00:05:41.43, start: 0.000000, bitrate: 329 kb/s
Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1728x1080 [SAR 1:1 DAR 8:5], 191 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
encoder : Lavc58.54.100 libx264
Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 129 kb/s (default)
Metadata:
handler_name : SoundHandler
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[libx264 @ 0x7fe99700c400] using SAR=1/1
[libx264 @ 0x7fe99700c400] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x7fe99700c400] profile High, level 4.0
[libx264 @ 0x7fe99700c400] 264 - core 155 r2917 0a84d98 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mov, to '/Users/AAA/Desktop/ffmpeg/output.mov':
Metadata:
major_brand : qt
minor_version : 512
compatible_brands: qt
encoder : Lavf58.29.100
Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 1728x1080 [SAR 1:1 DAR 8:5], q=-1--1, 30 fps, 15360 tbn, 30 tbc (default)
Metadata:
handler_name : VideoHandler
encoder : Lavc58.54.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 129 kb/s (default)
Metadata:
handler_name : SoundHandler
frame=10201 fps= 92 q=-1.0 Lsize= 13349kB time=00:05:39.98 bitrate= 321.6kbits/s speed=3.07x
video:7585kB audio:5402kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.785539%
[libx264 @ 0x7fe99700c400] frame I:42 Avg QP:14.79 size: 79660
[libx264 @ 0x7fe99700c400] frame P:2631 Avg QP:18.50 size: 1240
[libx264 @ 0x7fe99700c400] frame B:7528 Avg QP:18.12 size: 154
[libx264 @ 0x7fe99700c400] consecutive B-frames: 1.1% 1.0% 1.3% 96.6%
[libx264 @ 0x7fe99700c400] mb I I16..4: 37.5% 44.6% 17.9%
[libx264 @ 0x7fe99700c400] mb P I16..4: 0.2% 0.5% 0.2% P16..4: 0.7% 0.1% 0.1% 0.0% 0.0% skip:98.2%
[libx264 @ 0x7fe99700c400] mb B I16..4: 0.0% 0.0% 0.0% B16..8: 0.7% 0.0% 0.0% direct: 0.0% skip:99.3% L0:56.2% L1:42.9% BI: 0.9%
[libx264 @ 0x7fe99700c400] 8x8 transform intra:47.4% inter:45.4%
[libx264 @ 0x7fe99700c400] coded y,uvDC,uvAC intra: 15.6% 6.6% 4.2% inter: 0.1% 0.1% 0.0%
[libx264 @ 0x7fe99700c400] i16 v,h,dc,p: 68% 29% 1% 1%
[libx264 @ 0x7fe99700c400] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 74% 8% 16% 0% 0% 0% 0% 0% 0%
[libx264 @ 0x7fe99700c400] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 37% 28% 14% 3% 3% 4% 4% 4% 4%
[libx264 @ 0x7fe99700c400] i8c dc,h,v,p: 90% 7% 2% 0%
[libx264 @ 0x7fe99700c400] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x7fe99700c400] ref P L0: 76.6% 7.8% 10.3% 5.3%
[libx264 @ 0x7fe99700c400] ref B L0: 54.6% 44.2% 1.3%
[libx264 @ 0x7fe99700c400] ref B L1: 97.7% 2.3%
[libx264 @ 0x7fe99700c400] kb/s:182.73
删除第二个视频台标/水印/logo:
x1=1380px y1=860px x2=1680px y2=1040px
w=x2-x1=300px h=y2-y1=180px
"delogo=x=1380:y=860:w=300:h=180:show=0" -c:a copy /Users/AAA/Desktop/ffmpeg/output.mov
同时删除多个台标,可使用逗号分开:
"delogo=x=1440:y=40:w=260:h=40:show=0,delogo=x=1380:y=860:w=300:h=180:show=0" -c:a copy /Users/AAA/Desktop/ffmpeg/output.mov
输出:
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
built with Apple clang version 11.0.0 (clang-1100.0.33.16)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.2_1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/AAA/Desktop/ffmpeg/input.mov':
Metadata:
major_brand : qt
minor_version : 512
compatible_brands: qt
encoder : Lavf58.29.100
Duration: 00:05:41.03, start: 0.000000, bitrate: 320 kb/s
Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1728x1080 [SAR 1:1 DAR 8:5], 182 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
encoder : Lavc58.54.100 libx264
Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 129 kb/s (default)
Metadata:
handler_name : SoundHandler
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[libx264 @ 0x7f8f05802000] using SAR=1/1
[libx264 @ 0x7f8f05802000] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x7f8f05802000] profile High, level 4.0
[libx264 @ 0x7f8f05802000] 264 - core 155 r2917 0a84d98 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mov, to '/Users/AAA/Desktop/ffmpeg/output.mov':
Metadata:
major_brand : qt
minor_version : 512
compatible_brands: qt
encoder : Lavf58.29.100
Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 1728x1080 [SAR 1:1 DAR 8:5], q=-1--1, 30 fps, 15360 tbn, 30 tbc (default)
Metadata:
handler_name : VideoHandler
encoder : Lavc58.54.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 129 kb/s (default)
Metadata:
handler_name : SoundHandler
frame=10201 fps= 85 q=-1.0 Lsize= 12862kB time=00:05:39.98 bitrate= 309.9kbits/s speed=2.83x
video:7099kB audio:5402kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.893341%
[libx264 @ 0x7f8f05802000] frame I:42 Avg QP:14.32 size: 70808
[libx264 @ 0x7f8f05802000] frame P:2632 Avg QP:18.21 size: 1197
[libx264 @ 0x7f8f05802000] frame B:7527 Avg QP:18.16 size: 152
[libx264 @ 0x7f8f05802000] consecutive B-frames: 1.2% 0.9% 1.4% 96.5%
[libx264 @ 0x7f8f05802000] mb I I16..4: 41.2% 43.0% 15.9%
[libx264 @ 0x7f8f05802000] mb P I16..4: 0.2% 0.5% 0.2% P16..4: 0.7% 0.1% 0.1% 0.0% 0.0% skip:98.3%
[libx264 @ 0x7f8f05802000] mb B I16..4: 0.0% 0.0% 0.0% B16..8: 0.6% 0.0% 0.0% direct: 0.0% skip:99.3% L0:55.8% L1:43.4% BI: 0.8%
[libx264 @ 0x7f8f05802000] 8x8 transform intra:46.7% inter:45.0%
[libx264 @ 0x7f8f05802000] coded y,uvDC,uvAC intra: 14.6% 6.7% 4.1% inter: 0.1% 0.0% 0.0%
[libx264 @ 0x7f8f05802000] i16 v,h,dc,p: 70% 28% 1% 1%
[libx264 @ 0x7f8f05802000] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 74% 8% 17% 0% 0% 0% 0% 0% 0%
[libx264 @ 0x7f8f05802000] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 37% 29% 14% 3% 3% 4% 4% 4% 4%
[libx264 @ 0x7f8f05802000] i8c dc,h,v,p: 90% 7% 2% 0%
[libx264 @ 0x7f8f05802000] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x7f8f05802000] ref P L0: 73.9% 8.3% 12.1% 5.7%
[libx264 @ 0x7f8f05802000] ref B L0: 53.7% 45.3% 1.0%
[libx264 @ 0x7f8f05802000] ref B L1: 98.0% 2.0%
[libx264 @ 0x7f8f05802000] kb/s:171.01
5.批量处理视频台标/水印/logo(待填坑)
输入:
输出:
-qscale 0 参数是为了不影响资源的质量
#-b:v 3170k 是设置视频的码率,可不加
2.删除或修改音/视频的元数据信息:
ffmpeg -i "two.mp4" -map_metadata -1 -y "input.mp4"
#-map_metadata -1 就是清楚文件的元数据,-y 表示不用再次询问是否操作
ffmpeg -i input.mp4 -metadata artist=benarchen -metadata title="Test 1" output.mp4
#-metadata artist=benarchen 表示设置该资源的作者,-metadata title="Test 1" 是设置标题
还有一种情况就是在剪掉固定时长片头的同时也剪掉固定时长的片尾,FFmpeg 官方没有直接提供这中功能,一种最常用的思路是在 shell 脚本中先用 FFmpeg -i 把文件的元数据信息保留下来,再从元数据信息中提取出视频的时长,用视频的总时长减去要剪掉的开头时长后结尾时长就是我们需要的实际时长了:
#!/bin/bash
#我这里要切除的开头和结尾都是 7 秒
beg=7
end=7
#用 for 循环直接获取当前目录下的 mp4、mp3、avi 等文件循环处理,单个文件可以去掉 for 循环
for i in (*.mp4,*.mp3,*.avi ); do
#将元数据信息临时保存到 tmp.log 文件中
nohup /usr/local/ffmpeg/bin/ffmpeg -i "$i" > tmp.log
#获取视频的时长,格式为 00:00:10,10 (时:分:秒,微妙)
time="`cat /usr/local/ffmpeg/tmp.log |grep Duration: |awk '{print $2}'|awk -F "," '{print $1}'|xargs`"
echo $time
#求视频的总时长,先分别求出小时、分、秒的值,这里不处理微秒,可以忽略
hour="`echo $time |awk -F ":" '{print $1}' `"
min="`echo $time |awk -F ":" '{print $2}' `"
sec="`echo $time |awk -F ":" '{print $3}'|awk -F "." '{print $1}' `"
#echo $hour $min $sec
num1=`expr $hour * 3600`
num2=`expr $min * 60`
num3=$sec
#计算出视频的总时长(秒)
sum=`expr $num1 + $num2 + $num3`
#总时长减去开头和结尾就是截取后的视频时长,并且这里不需要再转回 hour:min:sec 的格式,直接使用结果即可
newtime=`expr $sum - $beg - $end`
echo $newtime
/usr/local/ffmpeg/bin/ffmpeg -ss 00:00:07 -i $i -t $newtime -c:v copy -c:a copy /data/tmp/$i -y
done
上面的 shell 脚本可以根据实际情况作出调整。
其他操作[4]
1.分离视频音频流
ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流
ffmpeg -i input_file -acodec copy -vn output_file_audio //分离音频流
2.视频解复用
ffmpeg –i test.mp4 –vcodec copy –an –f m4v test.264
ffmpeg –i test.avi –vcodec copy –an –f m4v test.264
3.视频转码
ffmpeg –i test.mp4 –vcodec h264 –s 352*278 –an –f m4v test.264 //转码为码流原始文件
ffmpeg –i test.mp4 –vcodec h264 –bf 0 –g 25 –s 352*278 –an –f m4v test.264 //转码为码流原始文件
ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi //转码为封装文件
//-bf B帧数目控制,-g 关键帧间隔控制,-s 分辨率控制
4.视频封装
ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file
5.视频剪切
ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg //提取图片
ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi //剪切视频
//-r 提取图像的频率,-ss 开始时间,-t 持续时间
6.视频录制
ffmpeg –i rtsp://192.168.3.205:5555/test –vcodec copy out.avi
7.YUV序列播放
ffplay -f rawvideo -video_size 1920x1080 input.yuv
8.YUV序列转AVI
ffmpeg –s w*h –pix_fmt yuv420p –i input.yuv –vcodec mpeg4 output.avi
9.视频转帧序列
ffmpeg -i split.avi %d.bmp
10.帧序列合并为视频
ffmpeg -i %d.bmp -y list.mp4
其他操作[5]
视频
1.获取视频流信息
用ffprobe可以获取到视频的所有流的具体信息
ffprobe -print_format json -show_streams -i input.mp4
1
2.多个视频拼接
可以将几个视频拼接成一个视频 -f 表示采用concat协议,-c 表示采用什么编码器 copy表示不重新编码,如果是x264 表示将采用x264进行重新编码。
ffmpeg -y -f concat -i videolist.txt -c copy output.mp4
1
3.视频截图
截一张图
-ss 表示在视频的多少S 截取一张图
ffmpeg -y -ss 8 -i input.mp4 -f image2 -vframes 1 output.jpg
1
截多张图
-r 表示每秒截多少张图; -qscale 表示生成的截图质量,该值越小图片质量越好;%5d.jpg 表示生成的截图的命令规则,5位数的整数命名。
ffmpeg -y -ss 0 -i input.mp4 -f image2 -r 1 -t 8 -qscale 1 ./jpgs/%5d.jpg
1
4.给视频加上水印图片
ffmpeg -y -i input.mp4 -i ./logo.png filter_complex "overlay=0:0:enable=between(t,0,2)" -c:v libx264 -c:a aac -strict -2 output.mp4
1
5.图片合成视频
ffmpeg -y -f image2 -framerate 10 -i ./jpgs/%05d.jpg -c:v libx264 -r 25 -pix_fmt yuv420p output.mp4
1
6.视频添加背景音乐
ffmpeg -y -i input.mp4 -i ainiyiwannian.wav -filter_complex "[0:a] pan=stereo|c0=1*c0|c1=1*c1 [a1], [1:a] pan=stereo|c0=1*c0|c1=1*c1 [a2],[a1][a2]amix=duration=first,pan=stereo|c0<c0+c1|c1<c2+c3,pan=mono|c0=c0+c1[a]" -map "[a]" -map 0:v -c:v libx264 -c:a aac -strict -2 -ac 2 output.mp4
1
7.将视频去除音频
ffmpeg -y -i source.mp4 -an -vcodec copy output.mp4
1
8.设置视频的音量
-vol 设置视频的音量,是以%为单位,500表示500%
ffmpeg -y -i source.mp4 -vol 500 -strict -2 -vcodec copy output.mp4
1
9.视频转码
-vcodec 指定视频编码器,-acodec 指定音频编码器
ffmpeg -y -i input.mp4 -vcodec libx264 -acodec copy output.mp4
音频处理
1.从视频中提取音频
ffmpeg -y -i source.mp4 -vn output.wav
2.将音频用lpcm格式重新编码,指定采样率
ffmpeg -y -i source.wav -acodec pcm_s16le -ar 44100 output.wav
待整理补充一些内容
https://www.cnblogs.com/jiangzhaowei/p/8270782.html
目录:
1. FFmpeg简介 FFmpeg编码流程 FFmpeg混淆概念
2.FFmpeg操作参数
3.FFmpeg常用操作
参考
- ^FFmpeg删除片头方法2: https://www.cnblogs.com/frost-yen/p/5848781.html
- ^FFmpeg删除片头方法3: https://blog.csdn.net/yueliang2100/article/details/104292258
- ^FFmpeg去除水印1: https://my.oschina.net/songms/blog/3089147
- ^操作命令 https://www.cnblogs.com/dwdxdy/p/3240167.html
- ^其他操作 https://blog.csdn.net/baohonglai/java/article/details/50535955