Skip to content

h264

x264参数分析

x264 core:159 r2991 1771b55 Syntax: x264 [options] -o outfile infile Infile can be raw (in which case resolution is required), or YUV4MPEG (*.y4m), or Avisynth if compiled with support (yes). or libav* formats if compiled with lavf support (yes) or ffms support (no). Outfile type is selected by filename: .264 -> Raw bytestream .mkv -> Matroska .flv -> Flash Video .mp4 -> MP4 if compiled with GPAC or L-SMASH support (no) Output bit depth: 8/10 . Options: -h, --help List basic options --longhelp List more options --fullhelp List all options Example usage: Constant quality mode: x264 --crf 24 -o <output> <input> Two-pass with a bitrate of 1000kbps: x264 --pass 1 --bitrate 1000 -o <output> <input> x264 --pass 2 --bitrate 1000 -o <output> <input> Lossless: x264 --qp 0 -o <output> <input> Maximum PSNR at the cost of speed and visual quality: x264 --preset placebo --tune psnr -o <output> <input> Constant bitrate Read more

使用gperftools分析ffmpeg与x264库的性能

gperftools分析ffmpeg的结果 CPU使用分析 点击查看大图 堆内存使用分析 点击查看大图 编译ffmpeg,链接gperftool库 这里需要先编译安装好gperftools,然后修改一下ffmpeg编译时的参数 PKG_CONFIG_PATH="/usr/local/lib/pkgconfig" ./configure --enable-libx264 --enable-gpl --extra-ldflags=-lprofiler --extra-ldflags=-ltcmalloc --extra-cflags="-I/usr/local/include" --extra-ldflags="-L/usr/local/lib" --disable-stripping make make install 设置以下两个环境变量,指定输出profile数据 export HEAPPROFILE=/root/prof/heapprof.out export CPUPROFILE=/root/prof/prof.out 设置好 Read more

h264参考资料

x264编码器参数解析: https://blog.csdn.net/qq_34771252/article/details/90207617 http://www.lighterra.com/papers/videoencodingh264/ gperftool 分析ffmpeg https://blog.csdn.net/zsl_oo7/article/details/72625520 https://github.com/gperftools/gperftools

编译ffmpeg和x264,并生成性能分析图

编译nasm cd $HOME mkdir $HOME/ffmpeg_build wget https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.bz2 tar xjvf nasm-2.14.02.tar.bz2 cd nasm-2.14.02 PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" make make install 编译x264 下载x264代码 https://www.videolan.org/developers/x264.html cd $HOME wget https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.bz2 tar xvf x264-master.tar.bz2 mv x264-master x264 cd x264 PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --enable-pic --enable-gprof --enable-debug make make install 编译ffmpeg 下载ffmpeg代码 cd $HOME wget https://www.ffmpeg.org/releases/ffmpeg-4.2.2.tar.gz tar xvf ffmpeg-4.2.2.tar.gz 编译 cd ffmpeg-4.2.2 PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --pkg-config-flags="--static" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --extra-cflags=-pg --extra-ldflags=-pg --extra-cxxflags=-pg --disable-stripping --enable-libx264 --enable-gpl make make install 执行ffmpeg转码,性能分析 ffmpeg -re -i input -c:v libx264 -c:a copy -profile:v baseline -b:v 1.5M -bufsize 1M -level 3.1 -bsf:a aac_adtstoasc -s 720x1280 output.mp4 可以看到当 Read more

编译x264,并使用x264进行视频编码

生成原始YUV文件,给第二步编码用 ffmpeg -i input.mp4 origin_1280x720.yuv 可以尝试用ffplay播放这个文件 ffplay -s 1280x720 origin_1280x720.yuv 编译x264 ./configure Make 用x264将原始视频yuv文件编码为h264文件 ./x264 -o out.264 origin_1280x720.yuv 用ffplay播放h264文件 ffplay -I out.264 用gprof可以进行性能分析 gprof x264 gmon.out > x264_gprof.txt

为什么go不支持递归锁

先来看一段代码: package main import ( "fmt" "sync" ) var mu sync.Mutex var chain string func main() { chain = "main" A() fmt.Println(chain) } func A() { mu.Lock() defer mu.Unlock() chain = chain + " --> A" B() } func B() { chain = chain + " --> B" C() } func C() { mu.Lock() defer mu.Unlock() chain = chain + " --> C" } 这段代码最终编译执行结果为: fatal error: all goroutines are asleep - deadlock! 由于对同一个锁 mu 加锁两次,导致死锁 查了一下,发现go 语言不支持递归锁 Go开发团队的 Russ Cox 在这里做了一个解释 https://groups.google.com/d/msg/golang-nuts/XqW1qcuZgKg/Ui3nQkeLV80J 内容如下 Read more