当我使用这个命令时:
C:\Windows\bin\ffmpeg.exe -y -i f:\1.flv -vcodec h264 -s 1280x720 -acodec copy f:\output.mp4
视频输出.mp4信息:
General
Complete name : F:\output.mp4
Format : MPEG-4
Format profile : Base Media
Codec ID : isom
File size : 129 MiB
Duration : 10mn 15s
Overall bit rate : 1 759 Kbps
Writing application : Lavf57.14.100
Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : [email protected]
Format settings, CABAC : Yes
Format settings, ReFrames : 4 frames
Format settings, GOP : M=4, N=45
Codec ID : avc1
Codec ID/Info : Advanced Video Coding
Duration : 10mn 15s
Bit rate mode : Variable
Bit rate : 1 624 Kbps
Width : 1 280 pixels
Height : 720 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 25.000 fps
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.071
Stream size : 119 MiB (92%)
Writing library : x264 core 148 r2638 7599210
Encoding settings : cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=12 / lookahead_threads=2 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
Audio
ID : 2
Format : AAC
Format/Info : Advanced Audio Codec
Format profile : LC
Codec ID : 40
Duration : 10mn 15s
Bit rate mode : Constant
Bit rate : 128 Kbps
Channel(s) : 2 channels
Channel positions : Front: L R
Sampling rate : 44.1 KHz
Compression mode : Lossy
Stream size : 9.38 MiB (7%)
所以我想删除“写作库”和“编码设置”,怎么做?
答案1
可以通过输入以下命令来实现:-x265-params no-info=1
例如:
ffmpeg -i input.mkv -c:v libx265 -b:v 4000k -an -x265-params no-info=1 output.hevc
答案2
对于 AVC:
ffmpeg -i INPUT -bsf:v 'filter_units=remove_types=6' -c copy OUTPUT
对于 HEVC 来说,情况更为复杂,因为 ffmpeg 不会因为某种原因直接将其删除:
ffmpeg -i INPUT -c:v copy -bsf hevc_mp4toannexb source-video.hevc
ffmpeg -i source-video.hevc -i INPUT -map 0 -map 1:a -bsf:v 'filter_units=remove_types=39' -c copy OUTPUT
答案3
事实证明,“写入库”和“编码设置”都只是文件开头附近的一个 ASCII 字符串。这是我编写的一个简单的 perl 脚本,用于用空格覆盖字符串,而保留文件其余内容。虽然很粗糙,而且测试有限,但显然很有效。使用时风险自负。
#!/usr/bin/perl
use strict;
use Fcntl qw(SEEK_SET);
my $file = $ARGV[0];
open(my $fh, "+<:raw", $file) or die "$file: open: $!";
my $len = sysread($fh, my $buf, 102400);
die "$file: read: $!" if !defined($len);
die "$file: Too short." if ($len < 1000);
die "$file: No x264/5 parameters found." unless $buf =~ /(?:x265 \(build|x264 [ -]*core) [ -~]{30,}/;
sysseek($fh, $-[0],SEEK_SET) or die "$file: seek: $!";
$len = syswrite($fh, ' ' x ($+[0] - $-[0]));
die "$file: write: $!" if !defined($len);
$len -= $+[0] - $-[0];
die "$file: Failed to fully overwrite ($len bytes short)." if ($len > 0);
放入一个名为“x264-265-decomment.pl”的文件,并使用您要修改的一个文件的名称运行它,例如,
x264-265-decomment.pl video.mkv
答案4
对“For Fun”的回答补充解释:
AVC 流使用 NAL 单元进行分组,比特流过滤器filter_units
会移除/传递特定的 NAL 类型。在这种情况下,我们要过滤掉的 NAL 单元是Supplemental enhancement information (SEI)
H.264 规范表 7-1 中类型 6 的单元。