人工知能

ffmpegコマンドはChatGPTに作らせる

2023-04-16

動画の処理によく使うffmpegコマンドですが、多機能がゆえに使いこなすのが難しいという問題がありました。

ffmpegを使おうとしたとき、毎回Google先生に聞いているという人も多いと思います。

でも、今やChatGPTがあります🤓。

同僚に「こういう処理したいんだけど、ffmpegのパラメータ何が必要か調べといて」と頼むような感覚でChatGPTに頼むと、めっちゃ的確な仕事をしてくれることがわかったので、レポートします。

ChatGPTに頼んでみる

例1:動画のフォーマットを変換するffmpegコマンドを教えてもらう

sample.movからsample.mp4にファイルフォーマットを変換するコマンドをChatGPTに教えてもらいます。

ffmpegコマンドを使うことと、change(変更)ではなくconvert(変換)を指定するところがキモです。

質問
I want to convert sample.mov to sample.mp4 by using ffmpeg command.
ffmpegコマンドを使ってsample.movをsample.mp4に変換したい。
ChatGPT回答の一部
Certainly! Here's an example ffmpeg command to convert "sample.mov" to "sample.mp4":
かしこまりました。次のffmpegコマンドを使うと"sample.mov"を"sample.mp4"に変換できます。

ffmpeg -i sample.mov sample.mp4

実際に実行してみると、ちゃんとsample.mp4が出来上がりました。

jimaru@book work % ffmpeg -i sample.mov sample.mp4
jimaru@book work % ls -l
total 172832
-rw-r--r--@ 1 jimaru  staff  71706613  4 16 07:01 sample.mov
-rw-r--r--  1 jimaru  staff  16753086  4 16 15:01 sample.mp4

ちなみにChatGPTへの聞き方の注意点として、「ffmpegコマンドを使って」という指定をしない場合は、ファイル名を変更するだけの回答になるので注意です。

ChatGPT回答の一部
Certainly! To change the file extension from ".mov" to ".mp4", you can follow these steps:
かしこまりました。ファイル拡張子を".mov"から".mp4"への変更は、次のステップでできます。

1. Locate the "sample.mov" file on your computer.
"sample.mov"ファイルに移動

2. Right-click on the file and select "Rename" from the context menu.
ファイルを右クリックしてコンテキストメニューからリネームを選択

3. Change the file name from "sample.mov" to "sample.mp4", making sure to change the file extension from ".mov" to ".mp4".
ファイル名を"sample.mov"から"sample.mp4"に変更し、拡張子が".mov"から"mp4"に変わっていることを確認

4. Press Enter to save the new file name.
Enterキーを押して確定

さらに、convert(変換)ではなくchange(変更)で指定すると、ffmpegコマンドは使うものの、コーデックが変更されないコマンドが回答として出てきてしまいます。(これは人間でもやりかねないミスです)

ChatGPT回答の一部
Sure! You can use the following ffmpeg command to change the file extension from .mov to .mp4:
喜んで!次のffmpegコマンドを使うとファイル拡張子を.movから.mp4に変更できます。

ffmpeg -i sample.mov -c copy sample.mp4

例2:動画から画像を取り出すffmpegコマンドを教えてもらう

ChatGPTに動画の中にある画像を取り出すコマンドを教えてもらいます。

質問
I want to get images for each frame in a movie file.
動画ファイルのそれぞれのフレーム画像を取得したい。

The movie file name is "sample.mp4".
動画ファイル名は"sample.mp4"です。

The target directory name to output images is "output".
出力先のディレクトリ名は"output"です。

To do that, I use ffmpeg command. What parameter should I assign?
ffmpegコマンドを使って実施する場合、どんなパラメーターを指定する必要がありますか?
ChatGPT回答の一部
To extract images for each frame in a movie file using ffmpeg, you can use the following command:
ffmpegを使って動画のそれぞれのフレームの画像を抽出するには、次のコマンドが使えます。:

ffmpeg -i sample.mp4 output/frame_%04d.jpg

試しにiPhoneで撮影した、我が家の世界一かわゆい猫様の動画を画像にしてみます。

ffmpeg -i sample.mp4 output/frame_%04d.jpg

[image2 @ 0x153606850] Could not open file : output/frame_0001.jpg
av_interleaved_write_frame(): Input/output error

どうやらoutputフォルダが無くてエラーになってしまったようです。

ChatGPTもこの辺りの配慮まではしてくれなかったようですね。いや、outputフォルダが存在しないことを伝えていないこちらの落ち度なのか?

outputフォルダを作ってから再度実行してみると、問題なく処理できました。

例3:画像のサイズを確認するコマンドを教えてもらう

楽しくなってきたので出力した画像の高さと幅を確認してみましょう。ここからはffmpegコマンドに関する内容ではありません。このケンヂまる、もはや暴走しています。ChatGPTとのお話が楽しすぎて。

と、いうことで、画像ファイルの縦横サイズを確認するコマンドをChatGPTに聞いてみましょう。

質問
What command is fit to get image size of a file?
ファイルの画像サイズを取得するコマンドは何がいい?

I'm on MacOS.
僕はMacOS使ってるけど。
ChatGPT回答の一部
On macOS, you can use the sips command to get the image size of a file.
MacOSならsipsコマンドを使えばファイルの画像サイズを取得できます。

The sips command stands for Scriptable Image Processing System and is a built-in command-line tool for image manipulation on macOS.
sipsというのはScriptable Image Processing Systemのことで、ビルトインの画像操作コマンドラインツールです。

To get the image size of a file using sips, you can use the following command:
sipsを使ってファイルの画像サイズを取得するには、次のコマンドが使えます:

sips -g pixelWidth -g pixelHeight /path/to/image.jpg

言われた通りにコマンドを実行してみると、見事に取得できました。

jimaru@book output % sips -g pixelWidth -g pixelHeight frame_1273.jpg    
/Users/jimaru/work/output/frame_1273.jpg
  pixelWidth: 1080
  pixelHeight: 1920

例4:全ての画像サイズを一括で縮小するコマンドを教えてもらう

さらに話は脱線し続け、暴走は続きます。(この記事のテーマって何だっけ?🤷‍♂️な状況)

動画から取得した画像ファイルのサイズ1080x1920はちょっと大きすぎるので、縮小するコマンドをChatGPTに教えてもらいましょう。(もはやChatGPTに教えてもらうという手段が目的と化していることは自分でもわかってるっスよ)

質問
I want to minify images in my current directory on Mac OS. What command should I use?
MacOSでカレントディレクトリの画像たちを縮小したいけど、何のコマンド使ったらいい?
ChatGPT回答の一部
To minify images in your current directory on macOS, you can use the sips command in combination with other tools, such as find, xargs, and mogrify, which are also available on macOS. Here's an example command that you can use:
macOSでカレントディレクトリにある画像を縮小するには、sipsコマンド、findコマンド、xargsコマンド、mogrifyコマンドを連携して使います。どれもmacOSで使えるコマンドです。
これがサンプルコマンドです:

find . -type f -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" | xargs -I {} mogrify -strip -resize 50% {}

この後それぞれのコマンドの説明がツラツラ

おや?sipsコマンドを使うって言ってるけど、提案されたコマンドにsipsコマンドが含まれていないぞ?

さらに、画像の縮小をしたいだけなのに、画像のコメント情報やプロファイル情報を削除するmogrify -stripパラメータの指定までしてくれやがっていますぞ?「画像の縮小=ファイルサイズの縮小」という考えで、よかれと思って指定してくれたんでしょうか。

複雑なコマンドなのでChatGPTの回答を理解して評価するのにある程度時間がかかりましたが、man xargsなども読んですべて理解し、そのうえでコマンドを実行してみました。(理解せずにAIを信じきった時が人間がAIに支配される日)

jimaru@book output % find . -type f -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" | xargs -I {} mogrify -strip -resize 50% {}

jimaru@book output % sips -g pixelWidth -g pixelHeight frame_1273.jpg
/Users/jimaru/work/output/frame_1273.jpg
  pixelWidth: 540
  pixelHeight: 960

みごとに画像サイズが半分になりました。複雑なコマンドも作ってくれる頼もしさよ!

結果の正しさを判断する能力が求められる

ChatGPTが提案したコマンドについて、それが正しいと判断できたのは、ケンヂまるがこれまでffmpegコマンドをはじめ、いろいろなコマンドを使ってきて調べる力や理解する能力があったからです。

ffmpegコマンドについて何も知らない人や、そもそもコマンドの文法や、動画フォーマット、フォルダ構造など、コンピュータについての経験が浅い人にとってはChatGPTが返す結果の正しさを判断することはできないと思います。

我々人間には、結果の正しさを判断する責任があり、その能力が必要になります。

丁寧に依頼する能力が求められる

それと、丁寧に依頼する能力も求められます。

同僚や部下に対して単純作業を丁寧に依頼するのと同じ感覚でChatGPTを活用できれば、ほぼ完璧な仕事をしてくれます。

ChatGPTが使えないとか言う人ほど、人間に対しても適切に指示できないんじゃないかって気がします。あ、これって僕の個人的な意見ですよ?

AIに奪われる側ではなくAIを使う側になろう

実は今回ffmpegとChatGPTの組み合わせについて記事を書こうと思い立ったきっかけは、「ffmpegコマンドをGUI操作して作るツールとか需要あるんじゃね?」と閃いたのが始まりでした。

そこから少し考えて「これからはChatGPTに頼む時代なんじゃね?」という考えが脳裏をよぎったので実際に試してみたところ、見事に予想通りChatGPTには敵わないやという結論に至った、という経緯があります。

僕の「ffmpegコマンドを作るツール」を作るという存在意義がAIに奪われた瞬間でした。

どんどんAIによって人間の仕事が奪われていく時代になりつつありますが、AIに奪われるのではなく、AIを使う側として生き残っていきたいと思った、とある日曜日でした。

おまけ

ちなみに、この記事の最初に登場するアイキャッチ画像。

この不思議なGマーク。OpenAIDALL-Eを使って「ChatGPT in a human shape」という表現を画像化して作りました。

出来上がった画像を見た瞬間は、「なんか思ってたのと違うのが出来上がってきたー!」と思ったものですが、とりあえず文字と組み合わせて加工しました。

なんとも味があってこれはこれで🧐

-人工知能

© 2024 ヂまるBlog