FFmpeg

XDCAM HD422 MXF

分别使用ffmpeg ffmbc 实现 输出XDCAM HD422 MXF文件

ffmpeg #

ffmpeg -i test.mov -pix_fmt yuv422p -vcodec mpeg2video -non_linear_quant 1 -flags +ildct+ilme -top 1 -dc 10 -intra_vlc 1 -qmax 3 -lmin "1*QP2LAMBDA" -vtag xd5c -rc_max_vbv_use 1 -rc_min_vbv_use 1 -g 12 -b:v 50000k -minrate 50000k -maxrate 50000k -bufsize 8000k -acodec pcm_s16le -ar 48000 -bf 2 -ac 2 -f mxf_d10 output.mxf

ffmbc #

ffmbc  -y -threads 8 -i 先导片.mp4 -target xdcamhd422 -tff -acodec pcm_s24le 先导片-out.mov

ffmbc之转DVCPROHD

ffmbc -i xx.ts -vcodec dvvideo -flags +ildct+ilme -tff -pix_fmt yuv422p -vf scale=1440:1080:1 -acodec pcm_s16le -ar 48000 -ac 1 -y xx.mxf

ffmpeg 多音轨混合成多声道

使用FFmpeg制作多声道视频

将8个音轨混合成双声道

ffmpeg -i input.mkv -filter_complex "[0:1][0:2][0:3][0:4][0:5][0:6][0:7][0:8] amerge=inputs=8" -c:a pcm_s16le output.mkv

ffmpeg获取display_picture_number对应帧信息

使用方式 #

ffmpeg -i input  -vf "select=eq(n\,15237)",showinfo -an -f null  /dev/null

输出结果 #

15237为display_picture_number

[Parsed_showinfo_1 @ 0x41ca760] n:   0 pts:54860400 pts_time:609.56  pos:427032896 fmt:yuv420p sar:1/1 s:1920x1080 i:T iskey:0 type:B checksum:A2FB0133 plane_checksum:[7E1FA1A9 3D005549 67BC0A32] mean:[92 127 134] stdev:[62.5 9.2 20.7]

参数解释 #

### showinfo ### 不改变输入而在行中显示每帧信息。
显示的信息以`key/value`的序列形式给出
下面是将显示在输出中的值:

- n
帧序数,从0开始计数

- pts
输入帧的时间戳,以时基为单位,时间依赖于输入

- pts_time
按秒计的时间戳

- pos
输入帧在输入流中的偏移定位,-1表示信息不可用和/或无意义(例如合成视频中)

- fmt
像素格式名

- sar
输入帧的宽高比,表示为`num/den`格式

- s
输入帧尺寸,语法同于[视频尺寸(分辨率)](ffmpeg-doc-cn-07.md#视频尺寸(分辨率))

- i
交错模式 ("P"对应 "逐行", "T" 对应上场优先, "B"为下场优先t)

- iskey
为1表示是关键帧,0则不是

- type
输入帧图片类型 ("I"对应I帧, "P" 对应P帧, "B" 对应B帧,或者 "?"对应未知类型).参考定义与`libavutil/avutil.h`中的`av_get_picture_type_char`函数和`

- checksum
输入帧所有信息内容的 Adler-32校验值 (以16进制输出)

- plane_checksum
输入帧所有信息内容的 Adler-32校验值 (以16进制输出), 以格式"[c0 c1 c2 c3]"显示

ffmpeg逐行扫描转隔行扫描

命令参数 #

ffmpeg -i input -aspect 16:9 -c:v mpeg2video -b:v 4000k -minrate 4000k -maxrate 4000k -bufsize 2000k -dc 9 -flags +ilme+ildct -alternate_scan 1 -top 0 output

其实主要的就是如下参数:

-flags +ilme+ildct -alternate_scan 1 -top 0

alternate_scan使用隔行转码,top不一般没有什么要求的话頂场优先就可以了。

...

Rematrix is needed between 10 channels and 7.1(wide) but there is not enough

解决办法

将10个声道拆分成10个音轨

ffmpeg -i INPUTFILE -filter_complex “[0:a]pan=mono|c0=c0[…

解决办法 #

将10个声道拆分成10个音轨

ffmpeg -i INPUTFILE  -filter_complex "[0:a]pan=mono|c0=c0[a0];[0:a]pan=mono|c0=c1[a1];[0:a]pan=mono|c0=c2[a2];[0:a]pan=mono|c0=c3[a3];[0:a]pan=mono|c0=c4[a4];[0:a]pan=mono|c0=c5[a5];[0:a]pan=mono|c0=c6[a6];[0:a]pan=mono|c0=c7[a7];[0:a]pan=mono|c0=c8[a8];[0:a]pan=mono|c0=c9[a9]" -map "[a0]" -map "[a1]" -map "[a2]" -map "[a3]" -map "[a4]" -map "[a5]" -map "[a6]" -map "[a7]" -map "[a8]" -map "[a9]" -vn -c:a pcm_s24le  OUTPUTFILE

ffmpeg -i INPUTFILE -vn -c:a pcm_s24le -map 0:1 -filter:a:0 "pan=mono|c0=c0" -map 0:1 -filter:a:1 "pan=mono|c0=c1" -map 0:1 -filter:a:2 "pan=mono|c0=c2" -map 0:1 -filter:a:3 "pan=mono|c0=c3" -map 0:1 -filter:a:4 "pan=mono|c0=c4" -map 0:1 -filter:a:5 "pan=mono|c0=c5" -map 0:1 -filter:a:6 "pan=mono|c0=c6" -map 0:1 -filter:a:7 "pan=mono|c0=c7" -map 0:1 -filter:a:8 "pan=mono|c0=c8" -map 0:1 -filter:a:9 "pan=mono|c0=c9" OUTPUTFILE