欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

Linux依賴說明:

說明: 使用到的 依賴包  

1. ffmpeg

sudo apt update 
sudo apt-get install ffmpeg

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

sudo apt-get install imagemagick

備注: 
指令及相關(guān)參數(shù)說明

核心指令: (作用: 執(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 命令從視頻流中提取幀并保存為圖片,具體的參數(shù)含義如下:

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

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

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

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

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

    :視頻幀選擇器,這里

    mod(n,10)
    

    表示每 10 幀提取一次幀。

    n
    

    是當(dāng)前幀的編號,

    mod(n,10)
    

    計(jì)算幀編號除以 10 的余數(shù),

    not(mod(n,10))
    

    選擇那些編號是 10 的倍數(shù)的幀。

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

3. -frames:v 5

  • 只提取 5 幀圖片。

4. -q:v 1

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

5. output_%03d.jpg

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

整體含義:

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

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

具體的命令可根據(jù)需求情況進(jìn)行修改, 到這里文章的標(biāo)題功能就已經(jīng)實(shí)現(xiàn)了.

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

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

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

這里準(zhǔn)備了三個腳本文件如下:

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

extract_frames.sh

提取視頻幀輸出指定張數(shù)據(jù)照片并存到指定位置 并執(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 參數(shù)
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=""

# 進(jìn)入圖片所在目錄
cd /data/hikuser/handler_video_to_picture || exit 1

# 遍歷每張圖片并計(jì)算邊緣值
for img in output_*.jpg; do
    # 計(jì)算圖片的邊緣檢測值
    edge_value=$(convert "$img" -edge 1 -format "%[mean]" info:)
    echo "$img 邊緣檢測值: $edge_value"
    
    # 比較邊緣值,保留最大值對應(yīng)的圖片
    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í)行效果示例:

所以截取的圖片大小因?yàn)閿?shù)據(jù)源是一個靜態(tài)視頻, 當(dāng)然如果采集幀率過快時也會出現(xiàn)這樣的情況, 注意空值

create_directory.sh

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

#!/bin/bash

# 檢查是否提供了文件夾名稱參數(shù)
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

總結(jié) 

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

相關(guān)文章

  • shell 生成隨機(jī)數(shù)的實(shí)現(xiàn)方法總結(jié)

    shell 生成隨機(jī)數(shù)的實(shí)現(xiàn)方法總結(jié)

    這篇文章主要介紹了 shell 生成隨機(jī)數(shù)的實(shí)現(xiàn)方法總結(jié)的相關(guān)資料,希望通過本能幫助到大家,讓大家徹底掌握這幾種隨機(jī)數(shù)的方法,需要的朋友可以參考下
    2017-09-09
  • linux腳本實(shí)現(xiàn)自動發(fā)送和收取郵件的設(shè)置方法

    linux腳本實(shí)現(xiàn)自動發(fā)送和收取郵件的設(shè)置方法

    這篇文章主要是介紹linux下通過腳本自動發(fā)送和收取郵件的設(shè)置方法,有需要的朋友可以參考下
    2013-05-05
  • Linux中自定義shell腳本啟動jar包的方法

    Linux中自定義shell腳本啟動jar包的方法

    這篇文章主要介紹了Linux中自定義shell腳本啟動jar包的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • shell高級學(xué)習(xí)之正則表達(dá)式

    shell高級學(xué)習(xí)之正則表達(dá)式

    這篇文章主要給大家介紹了關(guān)于shell高級學(xué)習(xí)之正則表達(dá)式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用shell具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • shell腳本for循環(huán)實(shí)現(xiàn)文件和目錄遍歷

    shell腳本for循環(huán)實(shí)現(xiàn)文件和目錄遍歷

    本文主要介紹了shell腳本for循環(huán)實(shí)現(xiàn)文件和目錄遍歷,首先進(jìn)行一個要遍歷的文件夾,然后循環(huán)查看每個文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Linux命令學(xué)習(xí)之原來最簡單的ls命令這么復(fù)雜

    Linux命令學(xué)習(xí)之原來最簡單的ls命令這么復(fù)雜

    ls命令應(yīng)該是我們最常用的命令之一了,但是我們可能容易忽略那些看起來最簡單的東西。本文就來和大家詳細(xì)聊聊ls命令的使用,需要的可以了解一下
    2022-10-10
  • 在Linux?中使用?pidstat?命令監(jiān)控進(jìn)程性能?的操作方法

    在Linux?中使用?pidstat?命令監(jiān)控進(jìn)程性能?的操作方法

    pidstat是Linux系統(tǒng)中一個用于監(jiān)控各種統(tǒng)計(jì)信息的命令行工具,它能夠幫助用戶了解系統(tǒng)中各個進(jìn)程的資源使用情況,如CPU、內(nèi)存、I/O等,本文介紹了如何安裝pidstat,以及如何使用其不同的選項(xiàng)來監(jiān)控進(jìn)程的各種性能指標(biāo),感興趣的朋友一起看看吧
    2024-09-09
  • bash提取字符串${string:position:length}的具體使用

    bash提取字符串${string:position:length}的具體使用

    本文主要介紹了bash提取字符串${string:position:length}的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Linux?常用nvidia-smi命令詳解(最新推薦)

    Linux?常用nvidia-smi命令詳解(最新推薦)

    NVIDIA-smi?在?Linux?上附帶?NVIDIA?GPU?顯示驅(qū)動程序,以及?64?位?Windows?Server?2008?R2?和?Windows?7,這篇文章主要介紹了Linux?常用nvidia-smi命令詳解,需要的朋友可以參考下
    2023-01-01
  • linux shell命令行參數(shù)用法詳解

    linux shell命令行參數(shù)用法詳解

    本文介紹了linux shell命令行參數(shù)的具體用法,用戶登錄到Linux系統(tǒng)時,可以看到一個shell提示符,標(biāo)識了命令行的開始。用戶可以在提示符后面輸入任何命令及參數(shù)。
    2014-04-04

最新評論