ffmpeg實現視頻文件合並/截取預覽視頻/抽取音頻/crop(裁剪)(ffmpeg4.2.2)


一,ffmpeg的安裝

請參見:

https://www.cnblogs.com/architectforest/p/12807683.html

 

說明:劉宏締的架構森林是一個專注架構的博客,地址:https://www.cnblogs.com/architectforest

         對應的源碼可以訪問這里獲取: https://github.com/liuhongdi/

說明:作者:劉宏締 郵箱: 371125307@qq.com

 

二,ffmpeg的使用例子: 音頻/視頻的提取/合並

1,提取去除音頻的視頻流(靜音視頻)

#-an :disable audio:關閉音頻流

#-vcodec:指定視頻解碼器:值為copy時,復制視頻流

[root@blog 1]# ffmpeg -v quiet -i 8_9f6fa300bacded7b.mp4 -y -vcodec copy -an /data/dev/think_file/html/8_mute.mp4

 

2,提取音頻

#-vn: disable video ,關閉視頻流

#-acodec:指定音頻解碼器:值為copy時,復制音頻流

[root@blog 1]# ffmpeg -i 8_9f6fa300bacded7b.mp4 -y -vn -acodec copy /data/dev/think_file/html/8.m4a

說明:注意格式:從mp4中直接提取mp3格式可能會報錯,

提取成m4a格式沒有問題

 

3,把音頻文件和靜音的視頻文件合並成一個正常的視頻文件

#-c codec :指定codec name

#如果值是copy,表示拷貝所有的流

[root@blog 1]# ffmpeg -i 8_9f6fa300bacded7b.mp4 -i /data/dev/think_file/html/8.m4a -c copy /data/dev/think_file/html/8_m.mp4

 

三,ffmpeg的使用例子:合並兩個視頻文件

1,合並多個視頻文件

查看兩個文件的寬/高/長度

6_1351031b24838211.mp4的時長

[root@blog 1]# ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=duration 6_1351031b24838211.mp4
120.086633

6_1351031b24838211.mp4的寬度

[root@blog 1]# ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=width 6_1351031b24838211.mp4
640

6_1351031b24838211.mp4的高度

[root@blog 1]# ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=height 6_1351031b24838211.mp4
360
5_d3958808f0a5da07.mp4的高度
[root@blog 1]# ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=height 5_d3958808f0a5da07.mp4
360
5_d3958808f0a5da07.mp4的寬度
[root@blog 1]# ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=width 5_d3958808f0a5da07.mp4
640
5_d3958808f0a5da07.mp4的時長
[root@blog 1]# ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=duration 5_d3958808f0a5da07.mp4
215.281733

 

合並:

生成視頻列表文件

[root@blog 1]# more con653.txt

內容

file '6_1351031b24838211.mp4'
file '5_d3958808f0a5da07.mp4'

連接兩段視頻

[root@blog 1]# ffmpeg -f concat -i con653.txt -c copy /data/dev/think_file/html/653.mp4  

 

查看新生成視頻的時長:

[root@blog 1]# ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=duration /data/dev/think_file/html/653.mp4

335.409733

 

注意:合並之前,要保持兩個視頻文件的寬高相同,不同width height會報錯

 

四,ffmpeg的使用例子:截取視頻片斷作為預覽視頻

查看原視頻文件的大小:

[root@blog 1]# ll -h 8_9f6fa300bacded7b.mp4
-rw-r--r-- 1 nginx nginx 7.4M Mar 29 03:47 8_9f6fa300bacded7b.mp4

 

#-ss:開始時間

#-t:持續的秒數

#-c:a copy:copy視頻

#-s:指定畫面的寬高

[root@blog 1]# ffmpeg -ss 00:00:30 -t 20 -i 8_9f6fa300bacded7b.mp4 -c:a copy -s 320x180 /data/dev/think_file/html/8_pre2.mp4

 

查看預覽視頻文件的大小:

[root@blog 1]# ll -h /data/dev/think_file/html/8_pre2.mp4
-rw-r--r-- 1 root root 1.3M May  1 17:50 /data/dev/think_file/html/8_pre2.mp4

 

五,ffmpeg使用例子:crop裁剪視頻:

看一個例子:我們裁剪掉視頻兩側的黑邊

原視頻的截圖:

#crop=w=100:h=100:x=12:y=34

w:指定寬度

h:指定高度

x:指定左側的pos

y:指定頂部的pos

[root@blog html]# ffmpeg -i 8_rpi2.mp4 -vf crop=360:360:140:0 -c:a copy 360.mp4

查看生成的截圖:

 

 

六,查看ffmpeg的版本

[root@blog html]# ffmpeg -version
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 8 (GCC)

 

七,查看centos的版本

[root@blog html]# cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM