Linuxコマンド(画像・動画)のチートシート - oasis3855/webpage GitHub Wiki
Home > Software > ソフトウエア開発・PC管理のメモ帳 > this page (このページ)
Linuxで画像、音楽、動画を扱うコマンドを個人的にメモしたものです
- ロスレス回転
jpegtran -rot 90 -copy all input.jpg > output.jpg
右90度回転の時は-rot 90
、左90度回転の時は-rot 270
とする。Exifを(メーカーノートを含めて)全てコピーする時には<copy>-copy all</copy>を指定する。入力ファイルと出力ファイルは同一ファイル名を指定する事はできない。1行のスクリプトで同一ファイル名を指定したい場合は次のようにする
cp input.jpg /tmp/jpegtran.tmp.jpg && jpegtran -rot 90 /tmp/jpegtran.tmp.jpg > input.jpg
- コマンドラインの公式リファレンス
- サムネイル画像の作成
convert -thumbnail 150x150 -sharpen 0x0.8 -quality 85 ./photo/1.jpg ./pics/1.jpg
複数の画像ファイルを一括コンバートするとき(画像のあるディレクトリで実行する)
find * -prune -name '*.jpg' -exec convert -thumbnail 150x150 -sharpen 0x0.8 -quality 85 '{}' ../pics/'{}' \;
複数の画像ファイルを一括コンバートするとき(その他のディレクトリで実行する)
find ./photo/* -prune -name '*.jpg' -exec sh -c 'convert -thumbnail 150x150 -sharpen 0x0.8 -quality 85 {} ./pics/$(basename {})' \;
- マルチページtiff画像をjpegに変換
convert input.tiff output%03d.jpg
- PhotoCD画像をjpegに変換
convert -colorspace RGB IMG0001.PCD[5] output.jpg
複数の画像を連続変換する(16Base画像を対象)
find /media/cdrom/IMAGES/* -name '*.PCD' -exec sh -c 'convert -colorspace RGB {}[5] ./jpeg/$(basename {} .PCD).jpg' \;
- その他画像変換の例
find ./ -name '*.png' -exec sh -c 'convert {} $(basename {} .png).jpg' \;
ppm画像をjpeg画像に変換(同時にコントラストを上げる)
for i in *.ppm; do convert $i -quality 90 -contrast-stretch 0.15x0.05% `basename ${i%.*}.jpg`; done;
- 部分切り抜き
convert input.jpg -crop 1620x1080+150+0 output.jpg
画像の左右150pxずつを切り落とす場合(-shave 幅x高さ)
convert input.jpg -shave 150x0 output.jpg
画像中央の800px*600pxを抜き出す場合
convert input.jpg -gravity center -crop 800x600+0+0 output.jpg
画像右下の800px*600pxを抜き出す場合
convert input.jpg -gravity southeast -crop 800x600+0+0 output.jpg
- exifタグの表示
exif [ファイル名]
日本語表示で画面上の桁がずれる場合はLANG=C;exif [ファイル名]
とする。また、CSV形式にするにはexif -m [ファイル名]
とする。
exiftoolを用い全てのExifタグを表示する(-s, -S スイッチでタグ名の出力方法を変えられる)
exiftool [-s|-s -s|-s -s -s|-S] -G [ファイル名]
特定のExifタグを表示する
exiftool [-s|-s -s|-s -s -s] -タグ名 [ファイル名]
上の例で -s -s -s ではなく、awkを使って同様の出力を行う方法(区切り文字を : とし、前後スペースを含めて削除)
exiftool -S -タグ名 [ファイル名] | awk -F " *[:] *" '{print $2}'
- jhead公式リファレンス
- ファイルのタイムスタンプをExifの日時に変更する
jhead -ft [ファイル名] exiftool -overwrite_original "-FileModifyDate<Exif:CreateDate" [ファイル名|ディレクトリ名]
指定日時以降のタイムスタンプのファイルをExifの日時に変更する
touch -t YYMMDDhhmm ~/start.tmp find *.jpg -newer ~/start.tmp -exec jhead -ft {} \;
- Exifの撮影日時を書き換える
jhead -ts2001:05:25-20:16:59 [ファイル名]
時間をずらす(カメラの時差設定が間違っていた場合など。例は時刻を8時間戻す場合)
jhead -ta-8:00 [ファイル名]
ModifyDate, DateTimeOriginal, CreateDate等に任意の日時を設定する
exiftool -overwrite_original -ModifyDate="2001:05:25 20:16:59" [ファイル名]
フォルダ内全てのjpegに対し、Modify DateにCreate Dateの日時をコピーする
for i in ./*.jpg; do exiftool -overwrite_original -ModifyDate="`exiftool -S -CreateDate $i | sed -e "s/CreateDate: //m"`" $i; done; exiftool -overwrite_original "-Exif:ModifyDate<Exif:CreateDate" [ファイル名|ディレクトリ名]
メーカー名、カメラモデル、ソフトウエア名など任意の文字列に書き換える
exiftool -overwrite_original -Make="任意の文字列" [ファイル名] exiftool -overwrite_original -Model="任意の文字列" [ファイル名] exiftool -overwrite_original -Software="任意の文字列" [ファイル名]
Exifタグが特定の文字列に一致する場合、指定するタグを書き換える(この例は、Gimpで書き換えられてしまったSoftwareタグをリストアしている)
exiftool -if '$Exif:Make =~ /PENTAX/i and $Exif:Software =~ /Gimp/i' -overwrite_original -Exif:Software="K-x Ver 1.03" ./
- ヘッダを新規作成する
jhead -mkexif [ファイル名]
- ヘッダ情報を削除する
jhead -de [ファイル名] ---- Exifヘッダを削除する jhead -purejpg [ファイル名] ---- Exifヘッダ他jpeg画像データ以外を全消去
- pdf情報の表示 (xpdf-common)
pdfinfo [pdfファイル名] pdffonts [pdfファイル名]
画像の抽出
pdfimages -f [開始ページ] -l [終了ページ] [input.pdf] [output ベースファイル名]
- pdfファイルの結合・分割・抽出 (pdftk)
pdftk [input1.pdf] [input2.pdf] cat output [output.pdf]
一部ページの抽出
pdftk [input.pdf] cat 1-10 output [output.pdf] pdftk [input.pdf] cat 1-10 20-end [output.pdf]
奇数ページ (odd)、偶数ページ (even) の抽出
pdftk [input.pdf] cat 1-endodd output [output.pdf]
ページ抽出と結合(Handleを用いる)Aの1~10ページとBの20~最終ページを抽出して結合
pdftk A=[input1.pdf] B=[input2.pdf] cat A1-10 B20-end output [output.pdf]
奇数・偶数ページが逆になったpdfファイルの奇数・偶数を入れ替える(1,2,3,4,5... → 2,1,4,3,6...)
pdftk [input.pdf] cat 1-endodd output [output_odd.pdf] pdftk [input.pdf] cat 1-endeven output [output_even.pdf] pdftk A=[output_odd.pdf] B=[output_even.pdf] shuffle A B output [output.pdf]
回転 (右回転:right、左回転:left、180度回転:down)
pdftk [input.pdf] cat 1-endright output [output.pdf]
pdfファイルを左右に2分割して別々に保存
mutool poster -y 2 [input.pdf] [output.pdf]
- ディレクトリ内の画像ファイルを、それぞれpdfファイルに一括変換する
find ./src/ -name '*.jpg' -exec sh -c 'convert "{}" "./dst/`basename {} .jpg`.pdf"' \;
- 複数のjpegファイルを1つのPDFファイルに変換する
for i in *.jpg; do convert $i `basename ${i%.*}.pdf`; done; pdftk *.pdf cat output ../output.pdf
convertコマンドのみでも変換できるが、遅い
convert *.jpg ../output.pdf
- pdfファイルをjpg/pngファイルに変換する
pdftoppm -jpeg -jpegopt quality=75 [input.pdf] [出力ファイル接頭詞] pdftoppm -png [input.pdf] [出力ファイル接頭詞]
- パスワードで保護する(128bitで暗号化)
pdftk [input.pdf] output [output.pdf] owner_pw OWN_PASSWORD user_pw USR_PASSWORD
パスワードを解除して保存する
pdftk [input.pdf] input_pw password output [output.pdf]
指定ディレクトリのPDFファイルを一括してパスワードを付与する
find ./src/ -name '*.pdf' -exec sh -c 'pdftk "{}" output "./dst/`basename {} .pdf`_enc.pdf" user_pw MY_PASSWORD' \;
- 属性設定
exiftool -Title="ファイルのタイトル" -Subject="サブタイトル" -Author="著作者名" -Keywords="キーワード" -Producer="作成ソフト" -CreateDate="2016:01:01 18:00:00" -ModifyDate="2016:01:01 18:00:00" [target.pdf]
- 属性・目次のバックアップ
pdftk in.pdf dump_data_utf8 output metadata_utf8.txt pdftk in.pdf dump_data output metadata.txt
- 属性・目次のリストア
pdftk in.pdf update_info_utf8 metadata_utf8.txt output out.pdf pdftk in.pdf update_info metadata.txt output out.pdf
※メタデータファイルに不必要なバイナリデータがダンプされている場合は、それを削除してリストアする。メタデータの構成は次のようになっている
InfoBegin InfoKey: ModDate InfoValue: D:20190518125051+09'00' InfoBegin InfoKey: CreationDate InfoValue: D:20190509231651 InfoBegin InfoKey: Author InfoValue: ◯◯出版、著作者名◯◯ InfoBegin InfoKey: Title InfoValue: 本のタイトル InfoBegin NumberOfPages: 289 BookmarkBegin BookmarkTitle: 目次 BookmarkLevel: 1 BookmarkPageNumber: 2 BookmarkBegin BookmarkTitle: 第1章 BookmarkLevel: 1 BookmarkPageNumber: 4 BookmarkBegin BookmarkTitle: 第1節 BookmarkLevel: 1 BookmarkPageNumber: 5 〜 以下省略 〜
公式マニュアル How to use Ghostscript, Details of Ghostscript output devices
- pdfまたはpsを画像に変換する
gs -sDEVICE=jpeg -r200 -dNOPAUSE -dBATCH -sOutputFile=out.jpg in.pdf
-
-sDEVICE=
に出力ファイルの種類を設定する。( jpeg / png16m / pnggray / tiff24nc / tiffgray / tiffg3 ... ) -
-r
に解像度(dpi)を設定する。指定しない場合は72dpiが使われる。( -r200 / r200x100 ) -
-dTextAlphaBits=n
と-dGraphicsAlphaBits=n
スイッチでアンチエイリアスを設定できる。n=4を代入すると最適値となる(とマニュアルには書かれている) -
-dNOPAUSE -dBATCH
は処理実行後すぐにプログラムを終了するスイッチ -
-dSAFER
はファイル消去や改名コマンドを無効化するスイッチ
gs -sDEVICE=jpeg -r200 -dNOPAUSE -dBATCH -sOutputFile=out_%03d.jpg in.pdf
FAX送信用のtiff画像を作成する場合は(efax.rcの標準設定内容)
gs -sDEVICE=tiffg3 -r204x196 -dNOPAUSE -dSAFER -dMaxStripSize=0 -sOutputFile=out.tif in.pdf
- 音楽(オーディオ)に静止画を付けて動画ファイルにする
ffmpeg -loop_input -shortest -i ダミー画像.jpg -i 音楽.wav -acodec libmp3lame -ab 256k -ac 2 -ar 44100 -vcodec mjpeg -r 0.1 -f avi output.avi
-loop_input -shortest
オプションはこの位置、この順番で記述すること。-acodec ac3
とすればAC3に変換され、元のデータをコピーする場合には-acodec copy
とする(この場合はオーディオビットレート指定の-ab
や-ar
などは不要)。ビデオ形式を指定する場合は-vcodec
に続けてmpeg4やflv,libxvidなどを指定する。ビデオのフレームレートは-r
で指定できる。例のように0.1とすれば10秒に1回のレートになる(動画サイズが小さくなる)。
- ディレクトリ内のjpegを結合して動画ファイルにする
mencoder -ovc lavc -lavcopts vcodec=mpeg4 -mf w=640:h=320:fps=1:type=jpg 'mf://./*.jpg' -oac copy -nosound -o output.avi
画像を切り替える速度はfps=nでコントロールできる。1未満の数を指定することもでき、fps=0.5とすれば2秒に1枚の速度で切り替わる。
- 動画プレイリスト m3u8 のストリーミング動画をダウンロードする
ffmpeg -i https://www.example.com/movie/index.m3u8 -c copy -bsf:a aac_adtstoasc ./download.mp4
-bsf:a aac_adtstoasc
は MPEG-2/4 AAC ADTS から MPEG-4 Audio にコンバートするビットストリームフィルター(-bsf)設定。-c copy
は再エンコードせずにそのままコピーの設定。