我尝试使用 FFmpeg 通过 WinFF 将视频文件转换为所需格式。我对输出文件的某些方面有特定要求,而其他方面则应以能够提供最佳输出质量的方式进行设置。澄清一下 - 我希望我的输出文件是:
- 1600×900
- 在 mkv 容器中
- 使用 H.264 视频解码器
- 使用 aac 音频解码器
- 16:9 比例(显然……)
- 与输入相同的音量
- 60 帧/秒
- 没有任何内容被裁剪掉,图像也失去了其原始比例。
不必要
- 使用全部 48 个音频通道。
文件的任何其他方面只要不影响上面列出的内容,就应该能提供最佳的质量。好吧,不是字面意义上的。我不想要一个占用我一半硬盘空间的文件,或者一个需要一周时间才能转换的文件。
无论如何,这是我目前正在做的事情的一些背景。我试图自己弄清楚一切,但我所做的只是得到一个空的 .mkv 文件以及一个日志和一个 234.5 mb 的 .log.[something] 文件。不仅如此 - 转换时间太长了。我正在转换一个 10 分钟长的 Big Buck Bunny,大概需要 1-2 小时。我要转换一些 2 小时长的文件,所以是的,每个文件花一天时间太多了……
这是我使用的参数。
第 1 遍:
avconv -threads 8 -i bbb_sunflower_native_60fps_normal.mp4 \
-acodec aac -vcodec h264 -b:v 50000k -r:v 60 -filter:v yadif,scale=1600:900 \
-aspect 16:9 -b:a 320k -r:a 96000 -ac 48 -vol 256 -f null -an \
-passlogfile "/home/wnerw/Wideo/bbb_sunflower_native_60fps_normal.log" \
-pass 1 -y /dev/null
第二遍
avconv -threads 8 -y -i bbb_sunflower_native_60fps_normal.mp4 -acodec aac \
-vcodec h264 -b:v 50000k -r:v 60 -filter:v yadif,scale=1600:900 -aspect 16:9 \
-b:a 320k -r:a 96000 -ac 48 -vol 256 \
-passlogfile "/home/wnerw/Wideo/bbb_sunflower_native_60fps_normal.log" -pass 2 \
"/home/wnerw/Wideo/bbb_sunflower_native_60fps_normal.mkv"
我知道,50000k 和 96000 这样的值看起来很疯狂,但我只是想尝试一下。
我终于找到我要找的东西了!
- 我第一次做错了什么?
- 哪些参数能给我期望的输出?
如果有人超级好心,我会非常感激有两组参数 - 一组用于最佳但不疯狂的输出,一组用于我真正能得到的最佳输出。我知道后者可能会烧坏我的 CPU,需要一年的时间来处理或比我的整个磁盘大 10 倍。这只是出于我的好奇心。
编辑 这是第一遍的终端输出。实际上现在我记得第二遍没有发生。我无法检索终端中的内容,因为第二遍时崩溃了。我刚按回车键,整个终端就消失了。我现在等不及第一遍完成了,这需要太多时间。
终端输出:
avconv version 9.16-6:9.16-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers
built on Aug 10 2014 18:16:02 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Guessed Channel Layout for Input Stream #0.1 : stereo
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from
/home/wnerw/Pobrane/bbb_sunflower_native_60fps_normal.mp4':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isomavc1
creation_time : 2013-12-24 11:10:47
title : Big Buck Bunny, Sunflower version
artist : Blender Foundation 2008, Janus Bager Kristensen 2013
comment : Creative Commons Attribution 3.0 - http://bbb3d.renderfarming.net
genre : Animation
composer : Sacha Goedegebure
Duration: 00:10:34.56, start: 0.000000, bitrate: 10487 kb/s
Stream #0.0(und): Video: h264 (High), yuv420p, 4000x2250 [PAR 1:1 DAR 16:9], 10002 kb/s,
60 fps, 60 tbr, 60k tbn, 120 tbc
Metadata:
creation_time : 2013-12-24 11:10:47
Stream #0.1(und): Audio: mp3, 48000 Hz, stereo, s16p, 160 kb/s
Metadata:
creation_time : 2013-12-24 11:10:49
Stream #0.2(und): Audio: ac3, 48000 Hz, 5.1, fltp, 320 kb/s
Metadata:
creation_time : 2013-12-24 11:10:49
[libx264 @ 0x16a36e0] using SAR=1/1
[libx264 @ 0x16a36e0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x16a36e0] profile Main, level 5.0
Output #0, null, to '/dev/null':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isomavc1
creation_time : 2013-12-24 11:10:47
title : Big Buck Bunny, Sunflower version
artist : Blender Foundation 2008, Janus Bager Kristensen 2013
comment : Creative Commons Attribution 3.0 - http://bbb3d.renderfarming.net
genre : Animation
composer : Sacha Goedegebure
encoder : Lavf54.20.4
Stream #0.0(und): Video: libx264, yuv420p, 1600x900 [PAR 1:1 DAR 16:9], q=-1--1, pass 1,
50000 kb/s, 90k tbn, 60 tbc
Metadata:
creation_time : 2013-12-24 11:10:47
Stream mapping:
Stream #0:0 -> #0:0 (h264 -> libx264)
Press ctrl-c to stop encoding
frame= 5 fps= 0 q=0.0 size= 0kB time=10000000000.00 bitrate= 0.0kbit
frame= 13 fps= 13 q=0.0 size= 0kB time=10000000000.00 bitrate= 0.0kbit
frame= 21 fps= 13 q=0.0 size= 0kB time=10000000000.00 bitrate= 0.0kbit
frame= 29 fps= 14 q=0.0 size= 0kB time=10000000000.00 bitrate= 0.0kbit
frame= 37 fps= 14 q=0.0 size= 0kB time=10000000000.00 bitrate= 0.0kbit
frame= 45 fps= 14 q=0.0 size= 0kB time=10000000000.00 bitrate= 0.0kbit
frame= 51 fps= 14 q=0.0 size= 0kB time=10000000000.00 bitrate= 0.0kbit
EDIT2 按照建议,我尝试使用-f matroska
参数运行。这次我也尝试只执行一次,因为我认为第二次执行太耗时。
这是我用来转换的命令:
avconv -threads 8 -y -i bbb_sunflower_native_60fps_normal.mp4
-acodec aac -vcodec h264 -f matroska -b:v 10000k -r:v 60
-filter:v yadif,scale=1600:900 -aspect 16:9 -b:a 320k r:a 96000
-ac 48 -vol 256 "bbb_sunflower_native_60fps_normal.mkv"
但不幸的是,当我按下 Enter 确认 avconv 输出时,终端就关闭了。我尝试了相同的命令,只是没有-f matroska
,但没有帮助。同样的事情发生了。
以下是 avconv 的输出:
avconv version 9.16-6:9.16-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers
built on Aug 10 2014 18:16:02 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Guessed Channel Layout for Input Stream #0.1 : stereo
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from
'bbb_sunflower_native_60fps_normal.mp4':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isomavc1
creation_time : 2013-12-24 11:10:47
title : Big Buck Bunny, Sunflower version
artist : Blender Foundation 2008, Janus Bager Kristensen 2013
comment : Creative Commons Attribution 3.0 - http://bbb3d.renderfarming.net
genre : Animation
composer : Sacha Goedegebure
Duration: 00:10:34.56, start: 0.000000, bitrate: 10487 kb/s
Stream #0.0(und): Video: h264 (High), yuv420p, 4000x2250 [PAR 1:1 DAR 16:9], 10002 kb/s,
60 fps, 60 tbr, 60k tbn, 120 tbc
Metadata:
creation_time : 2013-12-24 11:10:47
Stream #0.1(und): Audio: mp3, 48000 Hz, stereo, s16p, 160 kb/s
Metadata:
creation_time : 2013-12-24 11:10:49
Stream #0.2(und): Audio: ac3, 48000 Hz, 5.1, fltp, 320 kb/s
Metadata:
creation_time : 2013-12-24 11:10:49
[libx264 @ 0xe96580] using SAR=1/1
[libx264 @ 0xe96580] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0xe96580] profile High, level 4.2
[libx264 @ 0xe96580] 264 - core 142 r2389 956c8d8 - H.264/MPEG-4 AVC codec - Copyleft
2003-2014 - http://www.videolan.org/x264.html - options: 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=abr mbtree=1 bitrate=10000 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69
qpstep=4 ip_ratio=1.25 aq=1:1.00
encoder 'aac' is experimental and might produce bad results.
Add '-strict experimental' if you want to use it.
Press ENTER to continue...
答案1
总结:我将使用它来实现高质量且缓慢的一次编码:
avconv -threads 8 -i bbb_sunflower_native_60fps_normal.mp4 \
-c:a aac -strict experimental -c:v h264 -crf 16 -preset veryslow \
-filter:v scale=1600:900 -aspect 16:9 -b:a 192k -ac 48 -vol 256 output.mp4
首先,要获得任何输出:
更改
-f null
为-f mp4
或-f matroska
,取决于您想要 MP4 还是 MKV 作为输出。如果您进行一次编码,则根本不需要这样做,因为输出文件名也会自动设置格式。更改
-acodec aac
为-acodec aac -strict experimental
,因为内部 AAC 编码器被认为不稳定并且需要这个额外的标志
然后,让我们开始执行命令。这里有几点需要调整:
比特率和速率控制
比特率极高。1600×900 高清视频不需要那么高,即使是 60fps。一半的比特率就足以获得原始质量。
您提到,视频的比特率不是恒定的。这是意料之中的,因为花费X每一帧都使用 1000 位。您需要尽可能节省比特率,并将其花在需要它的帧上。如果您想要限制比特率,您需要VBV 编码(例如 DVD 或流媒体),但它相当复杂,在实践中通常不需要。两遍 CBR 编码将提供非常好的结果。
另一个建议是使用CRF模式。您可以通过切换-b:v
到-crf
,然后将恒定速率因子设置为 0 到 51 之间来设置它。0 表示无损,15-18 表示质量极佳,23 是默认值。任何更高的值都会导致明显的质量下降。使用 CRF 意味着您无法提前确定比特率,但它将提供最佳质量。
320k 音频比特率已经有点“太多”了,即使对于 AAC-LC 来说也是如此,甚至对于内部编码器也是如此。192k 应该足够了。您可以选择其他编码器libfdk-aac
,例如,它可以在较低的比特率下提供更好的效果。不过,您的 ffmpeg 需要编译时支持它。
帧/采样率和滤波
您无需明确设置帧速率。输入帧速率将保持原样。您也不一定需要为音频设置 96 kHz 采样率 - 取决于您的音响发烧友程度。
您不需要yadif
过滤器,因为它用于反隔行扫描。由于 Big Buck Bunny 显然不是隔行扫描,因此请移除过滤器。
速度
编码预设对速度的影响最大。请参阅H.264 编码指南获得预设列表。速度越慢意味着压缩效率越高(即使用 CRF 时,相同质量的文件大小越小,使用 CBR 时,质量越高),因此请选择您可以等待的最慢的预设。