ffmpeg 中的 ProRes 转码太慢

ffmpeg 中的 ProRes 转码太慢

我们正在尝试使用以下选项将电影/剪辑转码为 ProRes LT:

ffmpeg -threads "16" -i "$2" -flags +ildct -vcodec prores -profile 1 -qscale 4 \
-threads "16" -r 24 -vf "yadif=0:-1:-1, scale=1920:1080" -aspect 16:9 \
-acodec pcm_s32le

问题是我们有一个只进行转码的转码服务器,它有 16 个线程,但只使用一个。FFmpeg 从 14 fps 开始,然后降到 8 fps 左右的转码速率:

frame=    9 fps=0.0 q=0.0 size=    2647kB time=00:00:00.30 bitrate=72271.8kbits/s dup=1 drop=0    
frame=   15 fps= 14 q=0.0 size=    5623kB time=00:00:00.50 bitrate=92120.9kbits/s dup=1 drop=0    
frame=   20 fps= 13 q=0.0 size=    8268kB time=00:00:00.66 bitrate=101600.1kbits/s dup=1 drop=0    
frame=   25 fps= 12 q=0.0 size=   10964kB time=00:00:00.83 bitrate=107785.2kbits/s dup=1 drop=0    
frame=   30 fps= 11 q=0.0 size=   13678kB time=00:00:01.00 bitrate=112052.5kbits/s dup=1 drop=0    
frame=   35 fps= 10 q=0.0 size=   16407kB time=00:00:01.16 bitrate=115204.0kbits/s dup=1 drop=0    
frame=   40 fps= 10 q=0.0 size=   19131kB time=00:00:01.33 bitrate=117539.2kbits/s dup=1 drop=0    
frame=   45 fps=9.8 q=0.0 size=   21842kB time=00:00:01.50 bitrate=119286.8kbits/s dup=1 drop=0    
frame=   50 fps=9.6 q=0.0 size=   24572kB time=00:00:01.66 bitrate=120776.7kbits/s dup=1 drop=0    
frame=   54 fps=9.4 q=0.0 size=   26755kB time=00:00:01.80 bitrate=121767.1kbits/s dup=1 drop=0    
frame=   58 fps=9.3 q=0.0 size=   28946kB time=00:00:01.93 bitrate=122653.0kbits/s dup=1 drop=0    
frame=   62 fps=9.2 q=0.0 size=   31150kB time=00:00:02.06 bitrate=123474.0kbits/s dup=1 drop=0    
frame=   66 fps=9.1 q=0.0 size=   33352kB time=00:00:02.20 bitrate=124189.0kbits/s dup=1 drop=0    
frame=   70 fps=9.0 q=0.0 size=   35569kB time=00:00:02.33 bitrate=124877.8kbits/s dup=1 drop=0    
frame=   74 fps=8.9 q=0.0 size=   37787kB time=00:00:02.46 bitrate=125494.2kbits/s dup=1 drop=0    
frame=   78 fps=8.8 q=0.0 size=   40010kB time=00:00:02.60 bitrate=126062.6kbits/s dup=1 drop=0    
frame=   82 fps=8.7 q=0.0 size=   42229kB time=00:00:02.73 bitrate=126563.9kbits/s dup=1 drop=0    
frame=   86 fps=8.6 q=0.0 size=   44434kB time=00:00:02.86 bitrate=126979.3kbits/s dup=1 drop=0    
frame=   90 fps=8.6 q=0.0 size=   46641kB time=00:00:03.00 bitrate=127361.4kbits/s dup=1 drop=0    
frame=   94 fps=8.5 q=0.0 size=   48846kB time=00:00:03.13 bitrate=127706.8kbits/s dup=1 drop=0    
frame=   98 fps=8.5 q=0.0 size=   51046kB time=00:00:03.26 bitrate=128010.0kbits/s dup=1 drop=0    
frame=  101 fps=8.3 q=0.0 size=   52701kB time=00:00:03.36 bitrate=128235.3kbits/s dup=1 drop=0    
...

我们用谷歌搜索过,但没有找到任何有效的解决方案,你们中有人遇到过同样的问题吗?如果遇到过,你最后是怎么解决的?

@LordNeckbeard 以下是转码的前 50 行和后 50 行:

ffmpeg 版本 0.10.2.git 版权所有 (c) 2000-2012 FFmpeg 开发人员
  于 2013 年 1 月 16 日 15:47:31 使用 gcc 4.1.2 20080704 (Red Hat 4.1.2-51) 构建
  配置:--enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvpx --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --disable-ffplay --enable-shared --enable-gpl --enable-postproc --enable-nonfree --enable-avfilter --enable-pthreads --extra-cflags=-fPIC --enable-libfreetype
  libavutil 51. 55.100 / 51. 55.100
  libavcodec 54. 23.100 / 54. 23.100
  libavformat 54. 6.101 / 54. 6.101
  libavdevice 54. 0.100 / 54. 0.100
  libavfilter 2.77.100 / 2.77.100
  libswscale 2. 1.100 / 2. 1.100
  libswresample 0. 15.100 / 0. 15.100
  libpostproc 52. 0.100 / 52. 0.100
[h264 @ 0x1a574240] 将重新排序缓冲区增加到 1
输入 #0,mov,mp4,m4a,3gp,3g2,mj2,来自‘/content/flowcenter/highres/dokfest/ftp_upload_20131108_2/Cacheu2.mov’:
  元数据:
    主要品牌:qt  
    次要版本:537199360
    兼容品牌:qt  
    创作时间:2012-10-17 05:46:57
LOGGER:将帧数设置为 14950
  时长:00:09:58.00,开始:0.000000,比特率:24157 kb/s
    流 #0:0(eng):视频:h264(主)(avc1 / 0x31637661),yuv420p,1920x1080,23863 kb/s,25 fps,25 tbr,2500 tbn,5k tbc
    元数据:
      创作时间:2012-10-17 08:24:55
      handler_name :Apple 视频媒体处理程序
    流 #0:1(eng):音频:aac(mp4a / 0x6134706D),48000 Hz,立体声,s16,289 kb/s
    元数据:
      创作时间:2012-10-17 08:25:00
      handler_name :Apple 声音媒体处理程序
    流 #0:2(eng):数据:无(tmcd / 0x64636D74)
    元数据:
      创作时间:2012-10-17 08:27:50
      handler_name :时间码媒体处理程序
      时间码:01:00:00:00
请使用 -profile:a 或 -profile:v,-profile 不明确
请使用 -q:a 或 -q:v,-qscale 不明确
[yadif @ 0x1a5a6e40] 模式:0 奇偶校验:-1 自动启用:-1
[缓冲区@0x1a5afb00] w:1920 h:1080 pixfmt:yuv420p tb:1/2500 sar:0/1 sws_param:flags=2
[buffersink @ 0x1a5afa80] 未提供不透明字段
[比例@0x1a5afc60] w:1920 h:1080 fmt:yuv420p sar:0/1 -> w:1920 h:1080 fmt:yuv422p10le sar:0/1 标志:0x4
[aformat @ 0x1a665fa0] 在过滤器“Parsed_anull_0”和过滤器“aformat”之间自动插入过滤器“自动插入重采样器 0”
[aresample @ 0x1a5daf00] chl:立体声 fmt:s16 r:48000Hz -> chl:立体声 fmt:s32 r:48000Hz
输出 #0,mov,到‘/content/flowcenter/other/Cacheu2_2_1.mov.mov’:
  元数据:
    主要品牌:qt  
    次要版本:537199360
    兼容品牌:qt  
    创作时间:2012-10-17 05:46:57
    编码器:Lavf54.6.101
    流 #0:0(eng):视频:prores (apcs) (apcs / 0x73637061),yuv422p10le,1920x1080 [SAR 1:1 DAR 16:9],q=2-31,200 kb/s,25 tbn,25 tbc
    元数据:
      创作时间:2012-10-17 08:24:55
      handler_name :Apple 视频媒体处理程序
    流 #0:1(eng):音频:pcm_s32le(in32 / 0x32336E69),48000 Hz,立体声,s32,3072 kb/s
    元数据:
      创作时间:2012-10-17 08:25:00
      handler_name :Apple 声音媒体处理程序
流映射:
  流 #0:0 -> #0:0 (h264 -> prores)
  流 #0:1 -> #0:1 (aac -> pcm_s32le)
视频:7615955kB 音频:224272kB 全局标头:0kB 多路复用开销 0.004298%
正在执行:
“/home/mfc/ffmpeg/one_for_all.mov.sh” 1281038 “/content/flowcenter/highres/dokfest/ftp_upload_20131108_2/Cacheu2.mov” “/content/flowcenter/other/Cacheu2_2_1.mov.mov”
1c
ffmpeg -threads 16 -i /content/flowcenter/highres/dokfest/ftp_upload_20131108_2/Cacheu2.mov -flags +ildct -vcodec prores -profile 1 -qscale 4 -threads 16 -vf yadif=0:-1:-1,scale=1920:1080 -aspect 16:9 -acodec pcm_s32le /content/flowcenter/other/Cacheu2_2_1.mov.mov
需要 1679 秒

无论如何,我认为发布整个视频太长了。当我再次转码时,我发现了一个微小的变化,因为我找不到昨天剪辑的日志文件。

@Rajib 抱歉,我两次使用了 -threads,这是我的错,我只是认为我可能将线程命令放在了脚本的另一个位置,这样它实际上就会使用该命令,但它不起作用,所以我再次删除了它。至于命令 -i“$2”,我们的软件使用 ffmpeg 命令和变量的混合,据我所知,$2 是描述输入文件路径的另一种方式,因此我们不必再使用 xyz.mov。是的,我们想要 1080p 质量,即使这意味着我们必须升级剪辑。

相关内容