最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

教你在Linux中從視頻流截取圖片幀(ffmpeg)

 更新時間:2024年09月16日 09:05:36   作者:yfs1024  
本文詳細介紹了如何在Linux環(huán)境下使用ffmpeg命令來提取視頻幀,通過設置指定的幀選擇過濾器,每10幀提取一幀,總共提取5張圖片,并設置輸出圖片的質量,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

Linux依賴說明:

說明: 使用到的 依賴包  

1. ffmpeg

sudo apt update 
sudo apt-get install ffmpeg

2. imagemagick (選裝)
(檢測圖像邊緣信息推斷清晰度,如果是簡單截取但個圖像幀=>用不到<=)

sudo apt-get install imagemagick

備注: 
指令及相關參數說明

核心指令: (作用: 執(zhí)行 ffmpeg 命令提取幀,每10幀選擇一幀, 一共提取5張)

示例:

ffmpeg -i “https://cdn.pixabay.com/video/2023/10/22/186115-877653483_large.mp4” -vf “select=‘not(mod(n,10))’” -frames:v 5 -q:v 1 output_%03d.jpg

指令說明:

這條 ffmpeg 命令從視頻流中提取幀并保存為圖片,具體的參數含義如下:

1. ffmpeg -i "https://cdn.pixabay.com/video/2023/10/22/186115-877653483_large.mp4"

  • ffmpeg:調用 ffmpeg 命令。
  • -i "https://cdn.pixabay.com/video/2023/10/22/186115-877653483_large.mp4":指定輸入文件,視頻源為給定的網絡視頻 URL。

2. -vf "select='not(mod(n,10))'"

  • -vf:表示使用視頻濾鏡。

  • "select='not(mod(n,10))'"
    

    :視頻幀選擇器,這里

    mod(n,10)
    

    表示每 10 幀提取一次幀。

    n
    

    是當前幀的編號,

    mod(n,10)
    

    計算幀編號除以 10 的余數,

    not(mod(n,10))
    

    選擇那些編號是 10 的倍數的幀。

    • 換句話說,這條命令每 10 幀提取一個幀。

3. -frames:v 5

  • 只提取 5 幀圖片。

4. -q:v 1

  • -q:v 設置視頻幀的質量,范圍為 1 到 31,值越小質量越高,1 是最高質量。

5. output_%03d.jpg

  • 輸出文件名模板。%03d 是一個占位符,表示文件名中包含 3 位數字(例如 output_001.jpg,output_002.jpg),這樣可以保存多個幀。

整體含義:

從視頻中每隔 10 幀提取一個幀,總共提取 5 幀,保存為高質量的 JPEG 圖片文件,文件名為 output_001.jpgoutput_002.jpg, 以此類推。

指令執(zhí)行完可見當前文件夾中文件:

具體的命令可根據需求情況進行修改, 到這里文章的標題功能就已經實現了.

下面是加餐環(huán)節(jié)

需求: 提取視頻中的圖片幀, 并從多張中選取最清晰的一張照片

注: 其中的文件路徑需要改為自己所存在的路徑

這里準備了三個腳本文件如下:

  • extract_frames.sh 提取視頻幀輸出指定張數據照片并存到指定位置 并執(zhí)行 detect_sharpness.sh 腳本(已注釋掉, 需要的話自行打開)
  • detect_sharpness.sh 從多張照片中選擇最清晰的一張 并將其余的照片刪除, 且保留最清晰一張并重命名
  • create_directory.sh 判斷文件夾是否存在, 不存在則創(chuàng)建, 存在則不處理

extract_frames.sh

提取視頻幀輸出指定張數據照片并存到指定位置 并執(zhí)行 detect_sharpness.sh 腳本

注: 執(zhí)行該腳本需要指定—視頻路徑

示例:

/data/hikuser/handler_video_to_picture/extract_frames.sh  https://cdn.pixabay.com/video/2023/10/22/186115-877653483_large.mp4
#!/bin/bash

# 刪除指定目錄下已有的圖片
rm -f /data/hikuser/handler_video_to_picture/output*.jpg

# 檢查是否提供了視頻流 URL 參數
if [ "$#" -ne 1 ]; then
    echo "Usage: ${0##*/} <video_stream_url>"
    exit 1
fi

# 視頻流 URL
VIDEO_URL="$1"

# 檢查輸出目錄是否存在
if [ ! -d "/data/hikuser/handler_video_to_picture" ]; then
    echo "Directory /data/hikuser/handler_video_to_picture does not exist."
    exit 1
fi

# 執(zhí)行 ffmpeg 命令提取幀,每10幀選擇一幀, 一共提取5張
if ! ffmpeg -i "$VIDEO_URL" -vf "select='not(mod(n,10))'" -frames:v 5 -q:v 1 /data/hikuser/handler_video_to_picture/output_%03d.jpg; then
    echo "ffmpeg command failed."
    exit 1
fi

# 執(zhí)行檢測圖片清晰度的腳本
# if [ -f /data/hikuser/handler_video_to_picture/detect_sharpness.sh ]; then
#    /bin/bash /data/hikuser/handler_video_to_picture/detect_sharpness.sh
# else
#    echo "detect_sharpness.sh script not found!"
#    exit 1
# fi

detect_sharpness.sh

從多張照片中選擇像素最高的一張 并將其余的照片刪除, 并將最新的一張重命名

#!/bin/bash

# 初始化最大邊緣值和最清晰的圖片變量
max_edge_value=0
sharpest_image=""

# 進入圖片所在目錄
cd /data/hikuser/handler_video_to_picture || exit 1

# 遍歷每張圖片并計算邊緣值
for img in output_*.jpg; do
    # 計算圖片的邊緣檢測值
    edge_value=$(convert "$img" -edge 1 -format "%[mean]" info:)
    echo "$img 邊緣檢測值: $edge_value"
    
    # 比較邊緣值,保留最大值對應的圖片
    if (( $(echo "$edge_value > $max_edge_value" | bc -l) )); then
        max_edge_value=$edge_value
        sharpest_image=$img
    fi
done

# 輸出最清晰的圖片
echo "最清晰的圖片是: $sharpest_image"

# 刪除其他圖片
for img in output_*.jpg; do
    if [ "$img" != "$sharpest_image" ]; then
        rm "$img"
    fi
done

# 將最清晰的圖片重命名為 output.jpg
mv "$sharpest_image" /data/hikuser/handler_video_to_picture/output.jpg

echo "已刪除其他圖片,保留最清晰的圖片: $sharpest_image"

腳本執(zhí)行效果示例:

所以截取的圖片大小因為數據源是一個靜態(tài)視頻, 當然如果采集幀率過快時也會出現這樣的情況, 注意空值

create_directory.sh

判斷文件夾是否存在存在則創(chuàng)建不存在則不處理

#!/bin/bash

# 檢查是否提供了文件夾名稱參數
if [ "$#" -ne 1 ]; then
    echo "Usage: ${0##*/} <directory_name>"
    exit 1
fi

# 文件夾名稱
DIR_NAME="$1"

# 檢查文件夾是否存在
if [ -d "$DIR_NAME" ]; then
    echo "Directory '$DIR_NAME' already exists."
else
    # 創(chuàng)建文件夾
    mkdir -p "$DIR_NAME"
    if [ $? -eq 0 ]; then
        echo "Directory '$DIR_NAME' has been created."
    else
        echo "Failed to create directory '$DIR_NAME'."
        exit 1
    fi
fi

總結 

到此這篇關于在Linux中從視頻流截取圖片幀(ffmpeg)的文章就介紹到這了,更多相關Linux從視頻流截取圖片幀內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • linux下socket編程常用頭文件(推薦)

    linux下socket編程常用頭文件(推薦)

    這篇文章主要介紹了linux下socket編程常用頭文件,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-10-10
  • Linux Shell腳本查看NUMA信息

    Linux Shell腳本查看NUMA信息

    這篇文章主要介紹了Linux Shell腳本查看NUMA信息,本文直接給出腳本實現代碼,需要的朋友可以參考下
    2015-06-06
  • Linux中nmcli命令使用詳解

    Linux中nmcli命令使用詳解

    nmcli是Linux系統(tǒng)中的一個命令行工具,用于管理網絡連接,它可以幫助用戶配置和管理網絡連接、網絡設備以及網絡連接的屬性,本文給大家詳細介紹了Linux nmcli命令使用方法,需要的朋友可以參考下
    2024-03-03
  • Bash Shell中忽略大小寫的設置方法

    Bash Shell中忽略大小寫的設置方法

    這篇文章主要介紹了Bash Shell中忽略大小寫的設置方法,本文還講解了其它的一些方便輸入命令的設置,如關閉顯示隱藏文件、只按一次TAB鍵、搜索歷史命令等技巧,需要的朋友可以參考下
    2015-04-04
  • 淺談Vim中的Tab與空格縮進

    淺談Vim中的Tab與空格縮進

    下面小編就為大家?guī)硪黄獪\談Vim中的Tab與空格縮進。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Shell命令解釋器分類示例詳解

    Shell命令解釋器分類示例詳解

    Shell是負責User與Linux OS之間溝通的橋梁,Shell為用戶提供了一個操作界面,User在這個界面輸入指令,其實就是通過Shell向Linux Kernel傳遞過去,這也就是為什么Shell也叫解釋器的原因,這篇文章主要給大家介紹了關于Shell命令解釋器分類的相關資料,需要的朋友可以參考下
    2023-05-05
  • Linux Vim 實用命令詳解

    Linux Vim 實用命令詳解

    這篇文章主要介紹了Linux Vim 實用命令,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • shell打印給定日期的日歷

    shell打印給定日期的日歷

    這篇文章主要為大家詳細介紹了shell打印給定日期的日歷,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • shell for循環(huán)與數組應用介紹

    shell for循環(huán)與數組應用介紹

    先舉一個例子,shell for循環(huán)讀取一個文件,把每一行賦值給一個數組的變量,然后介紹shell數組的相關知識,有需要的朋友可以參考下
    2013-02-02
  • 淺談shell的一些循環(huán)格式

    淺談shell的一些循環(huán)格式

    這篇文章主要介紹了淺談shell的一些循環(huán)格式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11

最新評論

清徐县| 贵阳市| 河曲县| 六枝特区| 崇义县| 中西区| 梁山县| 三门县| 隆昌县| 若尔盖县| 静乐县| 华宁县| 虎林市| 绵竹市| 墨江| 宜城市| 临江市| 浮梁县| 湘潭县| 东源县| 荣昌县| 广汉市| 美姑县| 内江市| 安福县| 洞口县| 永安市| 安阳县| 南乐县| 太湖县| 慈溪市| 永吉县| 新巴尔虎左旗| 杨浦区| 朝阳区| 绥棱县| 滦平县| 七台河市| 崇仁县| 平陆县| 孝义市|