Linuxコマンド(画像・動画)のチートシート - oasis3855/webpage GitHub Wiki

Home > Software > ソフトウエア開発・PC管理のメモ帳 > this page (このページ)


Linuxで画像、音楽、動画を扱うコマンドを個人的にメモしたものです



Table of Contents

jpeg

ロスレス回転
 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

imagemagick

コマンドラインの公式リファレンス
Examples of ImageMagick Usage
サムネイル画像の作成
画像ファイルが1個のとき
 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に変換
取り出す解像度は[1〜6]で指定。[5]=16Base:3072x2048, [6]=64Base:4096x6144
 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' \;
その他画像変換の例
png画像をjpeg画像に変換
 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;
部分切り抜き
1920*1080画像の左右150pxずつを切り落とす場合(-crop 幅x高さ+開始X座標+開始Y座標)
 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タグの表示
全ての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公式リファレンス
Jhead command line options
ファイルのタイムスタンプを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

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ファイルに変換する
それぞれのページをpdfに変換し、pdftkで各ページの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
 〜 以下省略 〜

ghostscript

公式マニュアル 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 はファイル消去や改名コマンドを無効化するスイッチ
複数ページのpdfまたはpsを画像に変換する場合は、%d識別子を使って
 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 は再エンコードせずにそのままコピーの設定。

⚠️ **GitHub.com Fallback** ⚠️