多媒体处理 Cheatsheet
# Image format conversion
magick input.gif output.png
magick %03d.png[0-255] output.pdf
magick %03d.png[0-255] -delay 2 -loop 0 output.gif
magick mogrify -format jpg *.png
gs -dSAFER -dBATCH -dNOPAUSE -dEPSCrop -r300 -sDEVICE=pngalpha -sOutputFile=output.png input.eps
rsvg-convert -z 2 --no-keep-image-data input.svg output.png

# Batch Processing
magick *.png -set filename:f "%f" +adjoin -other-options "path/to/output/%[filename:f]"
magick mogrify -path path/to/output -other-options *.png

# Transparenting white background
magick input.png -transparent white output.png

# Zeroing all transparent background
magick input.png -background none -alpha Background output.png

# Cropping
magick input.png[32x32+16+16] output.png
magick input.png -crop 32x32+16+16 output.png

# Resizing
magick input.png[64x64] output.png
magick input.png -filter box -resize 50% output.png

# Composition
magick destination.png source.png -geometry +32+32 -compose Over -composite output.png

# Removing alpha channel
magick input.png -alpha off output.png

# Clearing a rectangle
magick input.png -alpha set -size 32x32 xc: -geometry +32+32 -compose DstOut -composite output.png

# Conversion from video to image
#   Every frame
ffmpeg -i input.mp4 "output_%04d.png"
#   With fixed fps
ffmpeg -i input.mp4 -vf "select='between(t,10,20)',fps=30" "output_%04d.png"

# Merging video and audio
#   Without re-encoding
ffmpeg -i input.mp4 -i audio.m4a -c copy output.mp4
#   With re-encoding
ffmpeg -i input.mp4 -i audio.wav -c:v copy -c:a aac output.mp4

# Cutting video
ffmpeg -i input.mp4 -c copy -ss 00:11:22 -to 00:33:44 output.mp4

# Delay video or audio with re-encoding
ffmpeg -i input.mp4 -itsoffset 1.0 -i input.mp4 -map 1:v -map 0:a -c:v libx265 -crf 28 -preset veryslow -c:a copy movie-video-delayed.mp4
ffmpeg -i input.mp4 -itsoffset 1.0 -i input.mp4 -map 0:v -map 1:a -c:v libx265 -crf 28 -preset veryslow -c:a copy movie-audio-delayed.mp4

# Submit to bilibili
ffmpeg -y -i input.mp4 -c:v libx264 -pass 1 -fastfirstpass 0 -b:v 2990k -preset placebo -tune animation -vf format=yuv420p -psy-rd 0:0 -aq-strength 0.8 -aq-mode 2 -g 600 -bf 9 -b_strategy 2 -qcomp 0.75 -trellis 2 -subq 10 -refs 4 -8x8dct 1 -partitions all -qdiff 7 -me_method tesa -c:a copy -f mp4 NUL
ffmpeg -y -i input.mp4 -c:v libx264 -pass 2 -b:v 2990k -preset placebo -tune animation -vf format=yuv420p -psy-rd 0:0 -aq-strength 0.8 -aq-mode 2 -g 600 -bf 9 -b_strategy 2 -qcomp 0.75 -trellis 2 -subq 10 -refs 4 -8x8dct 1 -partitions all -qdiff 7 -me_method tesa -c:a copy output.mp4

# Optimize PNG image
optipng -i 0 -o 7 -zm 1-9 -strip all input.png
pngcrush -blacken -brute -reduce -remove alla -ow input.png

# Remove exif data
#  one file
exiftool -all= input.jpg
#  recursively (. for current directory)
exiftool -all= -r -overwrite_original -ext jpg .
本博客已改用 flex 布局

本博客已改用 flex 布局,解决了一些基本不存在的 bug,并象征性地适配了移动端虽然并没有什么卵用

IE?不存在的。

用浏览器阅读 txt 电子书
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
#txt {
  margin: auto;
  width: 80%;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
  font-size: 20px;
}

#txt p {
  white-space: pre-wrap;
  text-indent: 2em;
}
</style>
<script>
window.addEventListener('load', () => {
  txt.innerHTML = txt.innerHTML.replace(/.+/g, "<p>$&</p>")
})
</script>
</head>
<body>
<div id="txt">
将 txt 电子书的内容放在这里,并将这段代码保存成 html 文件。
用浏览器打开该 html 文件,即可开始阅读电子书。阅读体验相对于文本编辑器(如 nodepad)会有一定的提升。
txt 电子书中,段首无需空格。如果电子书中段首已经空格,可以将 css 中的 "text-indent: 2em;" 删去,以防止额外的段首缩进。
可以自由地更改 CSS 代码以获得最佳的阅读效果。
</div>
</body>
</html>

效果示例: