ffmpeg 编译以及常用命令行

ffmpeg

python-ldb

windows

export PKG_CONFIG_PATH=C:\msys64\mingw64\lib\pkgconfig

./configure --pkg-config-flags=–static --enable-libfdk_aac --enable-libx264 --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-pic --enable-debug --disable-optimizations --enable-libxml2 --enable-libass

刚分配可能只是虚拟内存,你实际有数据操作时,才会映射到物理内存进行拷贝操作;你写的程序当然会有内存增加,因为你new了,
你在适当的地方,比如不使用时delete [] 掉。这样当然不会内存泄漏,哪有程序不分配内存,不使用内存的。只要做好释放就OK。

使用mysys2 编译出windows下直接执行的文件需要打开enable-cross-compile

sudo apt-get install libsdl2-dev libxvidcore-dev libx265-dev libx264-dev libvorbis-dev libmp3lame-dev libfdk-aac-dev libass-dev nasm libvpx-dev libnuma-dev libxml2-dev

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/local/ssl/lib/pkgconfig

./configure [other options here] --pkg-config-flags="–static"

编译通用参数

# cuda显卡
./configure  --pkg-config-flags="--static" --enable-cuda --enable-cuvid --enable-nvenc  --enable-libnpp \
--extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --enable-shared --enable-libfreetype \
 --enable-libmp3lame --enable-libass --enable-fontconfig --enable-libvorbis --enable-gpl --enable-version3 \
 --enable-nonfree --enable-pthreads --enable-libfdk_aac --enable-libx264 --enable-libx265 --enable-postproc \
 --enable-pic --enable-libvpx --enable-debug --disable-optimizations  --enable-libxml2 --enable-openssl  --enable-ffplay 

# 软编解码
./configure --pkg-config-flags="--static"  --enable-shared --enable-libfreetype  --enable-libmp3lame --enable-libass \
--enable-fontconfig --enable-libvorbis --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads\
 --enable-libfdk_aac --enable-libx264 --enable-libx265 --enable-postproc --enable-pic --enable-libvpx --enable-debug \
 --disable-optimizations  --enable-libxml2 --enable-openssl  --enable-libsrt --enable-ffplay  

ffmpeg -i video_in.mp4 -c:v rawvideo -pix_fmt yuv420p video_i420.yuv
ffmpeg -i video_in.mp4 -c:v rawvideo -pix_fmt nv12 video_nv12.yuv
ffplay -f rawvideo -video_size 504x896 -pix_fmt nv12 video_nv12.yuv

ffmpeg -i video_in.mp4 -c:v rawvideo -pix_fmt yuv420p video_i420.yuv

-of xml
ffprobe -show_frames -select_streams v:0 -of xml
ffprobe -debug qp src.264 | grep -A 1 “New frame, type:”

调试

set args -i test.mp4 -f segment -segment_time 10 -segment_list test.m3u8 test_%03d.ts

硬件编码

-c:v h264_nvenc -preset medium -b:v BITRATE -bufsize BITRATE*2 -profile:v high -bf 3 -b_ref_mode 2 -temporal-aq 1 -rc-lookahead 20 -vsync 0

输出视频详细参数
ffprobe -loglevel quiet -show_streams -show_format -print_format json v_error.mp4

ffprobe -show_frames -select_streams v:0 -of xml out.mp4 2>&1 | grep “pict_type=” | awk ‘{print $17, $18}’ > tmp

ffprobe -show_frames -select_streams v:0 -print_format csv %s.%s 2>&1 | grep -n frame,video,0,1 | awk ‘BEGIN { FS="," } { print $6 }’
ffprobe -show_frames -select_streams a:0 -print_format csv %s.%s 2>&1 | grep -n frame,audio,1,1 | awk ‘BEGIN { FS="," } { print $6 }’

视频切片,不需要转吗时最好加上-avoid_negative_ts 1,防止没有i帧导致黑屏

ffmpeg -ss {start} -t 1 -accurate_seek -i {videoPath} -vcodec copy -avoid_negative_ts 1 -an {outputPath}

ffmpeg -ss {start} -t 1 -accurate_seek -i {videoPath} -vcodec h264 -an {outputPath}

killall -9 ff_encoder ff_encoder_test

arm上nfs可能默认有锁,因此:
mount -o remount,rw /
mkdir /zxf
mount -o nolock 192.168.1.2:/home/zxfeng/tmp /zxf

sudo rm -rvf /var/lib/initramfs-tools/4.4.0
sudo rm -rvf /lib/modules/4.4.0
sudo rm -rvf /boot/vmlinuz-4.4.0
sudo rm -rvf /boot/System.map-4.4.0
sudo rm -rvf /boot/config-4.4.0
sudo rm -rvf /boot/initrd.img-4.4.0

ffmpeg -y -i titles.mp4 -filter_complex ‘ass=one.ass’ -f mp4 output_one.mp4

推流

ffmpeg -re -fflags +genpts -stream_loop -1 -i v_error.mp4 -rtsp_transport tcp -vcodec h264 -c:a libfdk_aac -bsf:v h264_mp4toannexb  -preset slow -f rtsp rtsp://192.168.1.199/zxf-test

ffplay -rtsp_transport tcp rtsp://192.168.1.199/zxf-test

for((;;)); do ffmpeg -re -f v4l2 -i /dev/video0 -f alsa -i hw:0 -tune zerolatency -c:v libx264 -c:a libfdk_aac -r 30 -g 30 -preset ultrafast -f flv rtmp://127.0.0.1/live/test; done;

ffplay rtmp://127.0.0.1/live/test -fflags nobuffer
ffplay http://192.168.1.230:8080/live/test.m3u8 -fflags nobuffer

播放音视频裸流

ffplay -f s16le -ar 44100 out.pcm
ffplay -f rawvideo -video_size 1280x720 xxx.yuv

改变分辨率,-2可以保证计算后的分辨率可以被2整除

-vf: scale=-2:720

改变分辨率,转码后不改变原视频分辨率比例,用黑色填充边缘

-filter_complex “scale=-2:720:force_original_aspect_ratio=decrease,pad=-2:720:(-2-in_w)/2:(720-in_h)/2”

ffmpeg -y -i II_11_3_1.ts -c:v libx264 -c:a copy -bsf:a aac_adtstoasc output.mp4
ffmpeg -y -i -vcodec copy -acodec copy -vbsf h264_mp4toannexb

水印

ffmpeg -y -i 皮神的诞生.mp4 -i wm1.jpg -i wm2.jpg -filter_complex ‘[1:v]scale=400:200[v1];[2:v]scale=400:200[v2];[0:v][v1]overlay=x=10:y=main_h-overlay_h-10[01v];[01v][v2]overlay=x=main_w-overlay_w-10:y=10’ output.mp4

添加视频水印,每隔3s显示1s

ffmpeg -y -i 大司马蝎子_1.mp4 -i pikachu.mp4 -filter_complex “[1:v]fade=t=in:st=0:d=1,fade=t=out:st=10:d=1:alpha=1[v1]; [0:v][v1]overlay=x=0:y=0:eof_action=pass:enable=lt(mod(t,3),1)” -t 20 a.mp4

S… ass ASS (Advanced SubStation Alpha) subtitle
S… dvbsub DVB subtitles (codec dvb_subtitle)
S… dvdsub DVD subtitles (codec dvd_subtitle)
S… mov_text 3GPP Timed Text subtitle
S… srt SubRip subtitle (codec subrip)
S… subrip SubRip subtitle
S… text Raw text subtitle
S… webvtt WebVTT subtitle
S… xsub DivX subtitles (XSUB)

ffmpeg -y -i “E:\git\av_watermark\video\input\7ebf48fa-6366-11ea-ab97-00ff57ee1a2e.mp4” -i “E:\git\av_watermark\video\wm\wm1.mov” -i “E:\git\av_watermark\video\wm\wm2.mov” -i “E:\git\av_watermark\video\wm\wm3.mov” -i “E:\git\av_watermark\video\wm\wm4.mov” -i “E:\git\av_watermark\video\wm\wm5.mov” -filter_complex “[1:v]scale=400:200,setpts=PTS+0/TB[wm0];[0:v][wm0]overlay=0:0:enable=lte(t,5.0)[out0];[2:v]scale=400:200,setpts=PTS+10/TB[wm1];[out0][wm1]overlay=0:0:enable=lte(t,15.0)[out1];[3:v]scale=400:200,setpts=PTS+20/TB[wm2];[out1][wm2]overlay=0:0:enable=lte(t,25.0)[out2];[4:v]scale=400:200,setpts=PTS+30/TB[wm3];[out2][wm3]overlay=0:0:enable=lte(t,35.0)[out3];[5:v]scale=400:200,setpts=PTS+40/TB[wm4];[out3][wm4]overlay=0:0:enable=lte(t,45.0)[out4]” -map [out4] -map 0:a -c:v libx264 -c:a copy -qp 28 -preset veryslow -shortest “E:\git\av_watermark\video\output\7ebf48fa-6366-11ea-ab97-00ff57ee1a2e.mp4”

ffmpeg -i pikachu.mp4 -i custom.mov -filter_complex “[1:v]setpts=PTS-10/TB[a];[0:v][a]overlay=enable=gte(t,5):shortest=1[out]” -map [out] -map 0:a -c:v libx264 -crf 18 -pix_fmt yuv420p -c:a copy output.mov

ffmpeg -y -i 皮神的诞生.mp4 -i wm2.mov -filter_complex “[1:v]setpts=PTS+0/TB,scale=400:200[a];[0:v][a]overlay=enable=lte(t,5)[out]” -map [out] -map 0:a -c:v libx264 -crf 18 -pix_fmt yuv420p -c:a copy output.mov

setpts=PTS-10/TB 改变播放pts,可以设置移动视频播放的时间位置.
enable 可以设置overlay视频显示的时间,可以填函数gte lte等.
shortest 选择最短的流作为duration
loop=0,setpts=N/FRAME_RATE/TB 循环转码播放
文字水印
ffmpeg -y -i wm1.mov -vf “drawtext=fontfile=/home/zxfeng/Videos/ttc/simsun.ttc:text=‘watermark2’:x=t100:y=t100:fontsize=60:fontcolor=yellow@0.8:shadowy=2” -vcodec prores wm2.mov

x = ‘if(gte(t,0), -w+(mod(n*50, W+w)), NAN)’

-vcodec prores: 苹果的转码格式,有alpha通道,透明度

ffmpeg -y -t 5 -i 皮神的诞生.mp4 -c:v libvpx -c:a libvorbis test.webm

[videoCommand]

一些ios 系播放器可能会限定只能播放采样率为44100的音频

FFPROBE_COMMAND: str = (
"ffprobe -loglevel quiet -print_format json -show_format "
“-show_streams {video_path}”
)
TITLE_RESIZE: str = (
"ffmpeg -y -i {video_path} -filter_complex "
"‘scale={w}:{h}:force_original_aspect_ratio=decrease, "
"pad={w}:{h}😦{w}-in_w)/2:({h}-in_h)/2’ -c:v libx264 "
“-c:a libfdk_aac -ar 44100 -g 30 -r 30 -preset veryslow -bsf:v h264_mp4toannexb {target_path}”
)
VIDEO_WITH_ASS: str = (
"ffmpeg -y -i {video_path} -filter_complex "
"‘ass={ass_path}’ -c:v libx264 "
“-c:a libfdk_aac -ar 44100 -g 30 -r 30 -preset veryslow {target_path}”
)
VIDEO_RESIZE: str = (
"ffmpeg -y -i {video_path} -c:v libx264 -c:a libfdk_aac -ar 44100 -b:a {audio_rate} "
"-crf {crf} -b:v {video_avg_rate} -maxrate {max_rate} -bufsize {buf_size} "
“-vf: scale={scale} -g 30 -r 30 -preset veryslow -bsf:v h264_mp4toannexb {target_path}”
)
VIDEO_CONCAT: str = (
“ffmpeg -y -i ‘concat:{title}|{content}’ -c copy -bsf:a aac_adtstoasc {target_path}”
)
TRANSCODE_TO_TS_COPY: str = (
“ffmpeg -y -i {video_path} -c copy -bsf:v h264_mp4toannexb {target_path}”
)
TRANSCODE_TO_TS_CHANGE_RESOLUTION: str = (
"ffmpeg -y -i {video_path} -c:v libx264 -c:a libfdk_aac -ar 44100 -b:a {audio_rate} "
"-crf {crf} -b:v {video_avg_rate} -maxrate {max_rate} -bufsize {buf_size} "
“-vf: scale={scale} -g 30 -r 30 -preset veryslow -bsf:v h264_mp4toannexb {target_path}”
)
VIDEO_SPLIT: str = (
"ffmpeg -y -i {video_path} -c copy -map 0 -f segment "
"-segment_time {split_seconds} -segment_list {m3u8_path} "
“{target_path}”
)
ADD_WATERMARK: str = (
"ffmpeg -y -i {video_path} -vf “movie={wm_path},scale={wm_w}:{wm_h}[wm];”
“[in][wm]overlay={w}:{h}[out]” -c:v libx264 -c:a libfdk_aac -ar 44100 -crf {crf} "
" -b:a {audio_rate} -b:v {video_avg_rate} -maxrate {max_rate} -bufsize {buf_size} "
“-g 30 -r 30 -preset veryslow {target_path}”
)
ADD_WATERMARK_DEFAULT: str = (
“ffmpeg -y -i {video_path} -vf “movie={wm_path},scale={wm_w}:{wm_h}[wm];”
“[in][wm]overlay={w}:{h}[out]” {target_path}”
)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值