簡體   English   中英

FFMPEG 多次截圖命令

[英]FFMPEG multiple screenshots command

我正在嘗試編碼 function,它使用 ffmpeg 從視頻文件創建圖像。

但現在我想知道如何使用 ffmpeg命令准確地做到這一點,因為我使用包裝器,現在我有一些限制,所以我必須以本機方式使用 go。

所以,首先我決定使用一個叫做 node-fluent-ffmpeg 的包裝器。

這是我使用 Wrapper 的解決方法:

ffmpeg({
        source: `The video file...`,
      })
        .on("filenames", async (filenames) => {
        })
        .on("error", function (err) {
          console.log("Error in filenames section: " + JSON.stringify(err));
        })
        .on("end", function () {
          console.log("Screenshots taken");
        })
        .screenshots({
          count: 60,
          folder: "tmp/",
          filename: "thumbnail-at-%i.png",
          size: "1600x900",
        })
        .on("end", function (stdout, stderr) {
            let newImg = await fs.createReadStream(`/tmp/${img}`);
            destparams = await {
              Bucket: dstBucket,
              Key: "uploaded-" + img,
              Body: newImg,
              ContentType: "image",
            };
           await s3.putObject(destparams).promise();

});

更好地理解我的注意事項:

  • 我還是想在node.js

  • 假設文件是:“視頻文件...”

  • 我以隨機方式從視頻中截取 60 個屏幕截圖,就像視頻的長度無關緊要一樣,從視頻開始到結束只截取 60 個屏幕截圖。

  • 截取的每張屏幕截圖都會有一個前綴和有序的數字和每一幀的名稱。 例如: thumbnail-at-1.png、thumbnail-at-2.png、thumbnail-at-3.png 並一直持續到達到 60 個屏幕截圖限制。

  • 每個屏幕截圖都將以 1600x900 的分辨率保存。

  • 每個屏幕截圖都將保存在 TMP 文件夾中。

  • 不要介意閱讀此內容:畢竟我會將每個屏幕截圖上傳到 s3 存儲桶。

  • 我搜索了很多舊論壇,但似乎 ffmpeg 的文檔很差(我被卡住了,很難理解)。

所以我的主要目標是:

我如何使用 FFMPEG 命令准確制作代碼示例和快速注釋中顯示的 function? (不帶包裝紙)

(對不起,我試圖讓它更簡單)

我的意思是,我必須使用哪些命令,以及以下代碼示例中的 FFMPEG 命令?

順便說一句:它是node.js,

真的不知道該怎么辦,抱歉

spawnSync(
      "/opt/ffmpeg/ffmpeg",
      [
        "-i",
        ``,
        "-f",
        "",
        ``
      ],
      { stdio: "inherit" }
 );

謝謝你的耐心!

環境:

  • Node.js 12.x
  • FFMPEG (4.3.1)

主要問題是獲取視頻的持續時間,所以只要你有 ffprobe 你就應該能夠做到這一點:

獲取持續時間然后除以 60,將數字轉換為時間戳

ffprobe -v quiet -print_format json -show_format -show_streams "<FILENAME>"

然后將 JSON 解析為format.duration ,然后除以你想要的屏幕數。

然后通過執行dateformat('H:i:s', i * (format.duration / 60)) (偽)循環 60 多次以在特定時間戳獲得單個幀:

ffmpeg -ss 00:00:00 -i "infile.mp4" -t 00:00:01 -r 1 -f mjpeg "thumbnail-at-0.png"
ffmpeg -ss 00:00:10 -i "infile.mp4" -t 00:00:01 -r 1 -f mjpeg "thumbnail-at-1.png"
ffmpeg -ss 00:00:20 -i "infile.mp4" -t 00:00:01 -r 1 -f mjpeg "thumbnail-at-2.png"
...
ffmpeg -ss 00:09:30 -i "infile.mp4" -t 00:00:01 -r 1 -f mjpeg "thumbnail-at-57.png"
ffmpeg -ss 00:09:40 -i "infile.mp4" -t 00:00:01 -r 1 -f mjpeg "thumbnail-at-58.png"
ffmpeg -ss 00:09:50 -i "infile.mp4" -t 00:00:01 -r 1 -f mjpeg "thumbnail-at-59.png"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM