Dockerランコマンドを簡単にする方法
8877 ワード
私は最近、ビデオからアニメーションGIFを作成したい.アイデアは非常に軽量なファイルで、ビデオのプレビューを取得することでした.クイック検索の後、私はFFMPEG , メディアを操作する素晴らしいマルチメディアフレームワーク.また、別の言語に存在するラッパーもあります(例:C CHERHUNE、JavaScript)ですが、それでも局所的にffmpegをインストールする必要があります.実際、私は雲の中で何かインストールを必要としない単純な解決を望みました.このポストでは、どのように私は最初の1つを達成共有したい.
FFMpegフレームワークは非常に強力であり、多くのことを行うことができますしたがって、それは可能なパラメータと拡張子のトンを持って正常です.ドキュメントといくつかの試行錯誤に費やされた時間の後、私はこの方法で呼ぶ必要があるものを正確に行う方法を見つけました.
これは素晴らしいですが、これは非常に友好的ではありません.一度だけビデオを作成する人は、すべてのこれらのパラメータを覚えていると予想されるか?さらに困難なときには、ビデオが垂直にいくつかのパラメータには異なる値があります.簡単にする時間でした、そして、ここで、私はそれをしました.私がDocker初心者であることに注意してください、そして、あなたが若干のステップをするより単純であるかより良い方法があると思うならば、知らせてください、そして、一緒に学びましょう.
単純なDockerコマンドを実行します
スクリプトは簡単ですが、私はそれを書くいくつかのことを学んだ.これがこのポストに含まれている理由です.目標は単純です:パラメータからいくつかの値を使用してffmpegコマンドを実行します.スクリプトはこちら
スクリプトはできるだけフレンドリーなので、不要な情報を削除する必要があります.ほとんどの動画は水平になりますので、パラメータを省略しましょう.しかし、ユーザーに値を指定する必要はありません
前述のように、コンテナはアルプスから造られるでしょう.そして、アルパインにはbashがありませんが、代わりにダッシュとしてダッシュを使用します.それはほとんど同じですが、いくつかの違いがあります.最初の1つはShebang(別名“第1行)”.そして二つ目は文字列操作でした.同じ名前でスクリプトの異なる拡張子を持つ新しいファイルを生成するには、ファイル名を"."に分割します.これはできます
今すぐDockerFileのすべてのドットを接続する時間です.
スタート 二番目 最後に 今残っている唯一のことは、ビルド、タグ、およびDockerハブにプッシュすることです.
そして今、あなただけのボリュームをマップし、ファイルのパスを指定する必要があります任意のビデオのプレビューを作成するには、ビデオが垂直であるかどうか言及.
Linux/WSLでは以下のようになります.
あなたが興味があるならば、私はビデオ版を録画しました.
フランク
The code and container image are available on GitHub and Docker Hub.
ファーストコンタクト
FFMpegフレームワークは非常に強力であり、多くのことを行うことができますしたがって、それは可能なパラメータと拡張子のトンを持って正常です.ドキュメントといくつかの試行錯誤に費やされた時間の後、私はこの方法で呼ぶ必要があるものを正確に行う方法を見つけました.
ffmpeg -r 60 -i $INPUTFILE -loop 0 -vf scale=320:-1 -c:v gif -f gif -ss 00:00:00.500 -r 10 -t 5 - > $OUTPUTFILE
これはビデオから5番目のアニメーションGIFを作成します.それはビデオをスピードアップし、出力を軽量に保つためにGIFのフレームレートを下げます.以下が例です.
これは素晴らしいですが、これは非常に友好的ではありません.一度だけビデオを作成する人は、すべてのこれらのパラメータを覚えていると予想されるか?さらに困難なときには、ビデオが垂直にいくつかのパラメータには異なる値があります.簡単にする時間でした、そして、ここで、私はそれをしました.私がDocker初心者であることに注意してください、そして、あなたが若干のステップをするより単純であるかより良い方法があると思うならば、知らせてください、そして、一緒に学びましょう.
計画
単純なDockerコマンドを実行します
docker run fboucher/aciffmpeg -i NotInTheSky.mp4
ビデオプレビューを生成します.我々の一時的なコンテナを構築するために、我々は以下のような軽量で始めますalpine
, ffmpegをインストールし、コンテナとして実行されるスクリプトを追加します.それは素晴らしい計画のように聞こえる、それをしましょう!スクリプトを書く
スクリプトは簡単ですが、私はそれを書くいくつかのことを学んだ.これがこのポストに含まれている理由です.目標は単純です:パラメータからいくつかの値を使用してffmpegコマンドを実行します.スクリプトはこちら
#!/bin/sh
while getopts ":i:v" opt; do
case $opt in
i) inputFile="$OPTARG"
;;
v) isVertical=true
;;
\?) echo "Invalid option -$OPTARG" >&2
exit 1
;;
esac
case $OPTARG in
-*) echo "Option $opt needs a valid argument"
exit 1
;;
esac
done
if [ -z "$isVertical" ]; then isVertical=false; fi
# used for bash
#IFS='.'
#read -a filePart <<< "$inputFile"
#outputFile="${filePart[0]}.gif"
# used for dash
filename=$(echo "$inputFile" | cut -d "." -f 1)
outputFile="$filename.gif"
if $isVertical
then
ffmpeg -r 60 -i $inputFile -loop 0 -vf scale=-1:320 -c:v gif -f gif -ss 00:00:00.500 -r 10 -t 5 - > $outputFile
else
ffmpeg -r 60 -i $inputFile -loop 0 -vf scale=320:-1 -c:v gif -f gif -ss 00:00:00.500 -r 10 -t 5 - > $outputFile
fi
私が学んだこと:値のないパラメータ
スクリプトはできるだけフレンドリーなので、不要な情報を削除する必要があります.ほとんどの動画は水平になりますので、パラメータを省略しましょう.しかし、ユーザーに値を指定する必要はありません
script.sh -i myvideo.mp4 -v true
代わりにscript.sh -i myvideo.mp4 -v
. これは非常に簡単です、一度それを知っている.パラメータを取得する際のコードの最初の行では、getopts ":i:v"
"V "の後に":"がないことに注意してください.これは任意の値を期待していないことを指定します.私が学んだこと:bashとダッシュ
前述のように、コンテナはアルプスから造られるでしょう.そして、アルパインにはbashがありませんが、代わりにダッシュとしてダッシュを使用します.それはほとんど同じですが、いくつかの違いがあります.最初の1つはShebang(別名“第1行)”.そして二つ目は文字列操作でした.同じ名前でスクリプトの異なる拡張子を持つ新しいファイルを生成するには、ファイル名を"."に分割します.これはできます
IFS ... read... <<<
bashのコマンド(スクリプトでコメントします)syntax error: unexpected redirection
そして、これはないからです<<<
bashで.代わりに、コマンドを使用する必要がありますcut -d "." -f 1
(ここで- dはデリミタとして使用するcharを指定します.イメージのビルド
今すぐDockerFileのすべてのドットを接続する時間です.
FROM alpine:3.13
LABEL Name=aciffmpeg Version=0.0.2
RUN apk add ffmpeg
COPY ./src/myscript.sh /
RUN chmod +x /myscript.sh
ENTRYPOINT ["/myscript.sh"]
ファイルは非常に複雑ではありませんが、行単位で行を渡しましょう.FROM
アルパインバージョン3.13LABEL
. RUN
ffmpegをインストールするコマンドを実行します.The apk
アルプスのデフォルトのユーティリティは、アプリをインストールするようにapt
Ubuntuで.COPY
ローカルマシンからスクリプトをルートのコンテナにコピーします.RUN
コマンドはスクリプトが実行可能であることを確認することです.ENTRYPOINT
この場合、実行可能ファイルとして実行するコンテナをスクリプトとして設定できます.Dockerに渡されたすべてのパラメータは、スクリプトに渡されます.docker build -t fboucher/aciffmpeg .
docker tag 0f42a672d000 fboucher/aciffmpeg:2.0
docker push fboucher/aciffmpeg:2.0
簡易版
そして今、あなただけのボリュームをマップし、ファイルのパスを指定する必要があります任意のビデオのプレビューを作成するには、ビデオが垂直であるかどうか言及.
Linux/WSLでは以下のようになります.
docker run -v /mnt/c/dev/test:/video fboucher/aciffmpeg -i /video/sample.mp4 -v
そしてそのようなパワーシェルでは:docker run -v c/dev/test:/video fboucher/aciffmpeg -i /video/sample.mp4 -v
私はそのプロジェクトをやっているドッカーについてたくさん学びました.あなたの人生や仕事を簡素化するコンテナを使用して構築されたツールは何ですか?ビデオバージョン
あなたが興味があるならば、私はビデオ版を録画しました.
フランク
Reference
この問題について(Dockerランコマンドを簡単にする方法), 我々は、より多くの情報をここで見つけました https://dev.to/fboucheros/how-to-simplify-a-docker-run-command-328nテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol