Multithreading 如何在保持纵横比的情况下,在hls输出上构建带有burn文本的ffmpeg

Multithreading 如何在保持纵横比的情况下,在hls输出上构建带有burn文本的ffmpeg,multithreading,ffmpeg,ubuntu-14.04,http-live-streaming,subtitle,Multithreading,Ffmpeg,Ubuntu 14.04,Http Live Streaming,Subtitle,我的目标是在输出的hls视频上的特定时间范围内刻录文本(水印),我还必须更改高度并保持纵横比,我可以这样做,但刻录文本部分不起作用。首先,我使用的ffmpeg用于14.04 ubuntu,详细信息如下。我认为这个构建不支持subtitle()过滤器,正如前面所描述的那样,我本可以将其用于我的目的。当我将ffmpeg输入终端时,这就是输出 (ffmpeg)aameer@falcon:~/Documents/projects/ffmpeg$ ffmpeg ffmpeg version N-7859

我的目标是在输出的hls视频上的特定时间范围内刻录文本(水印),我还必须更改高度并保持纵横比,我可以这样做,但刻录文本部分不起作用。首先,我使用的ffmpeg用于14.04 ubuntu,详细信息如下。我认为这个构建不支持subtitle()过滤器,正如前面所描述的那样,我本可以将其用于我的目的。当我将ffmpeg输入终端时,这就是输出

(ffmpeg)aameer@falcon:~/Documents/projects/ffmpeg$ ffmpeg 
ffmpeg version N-78590-g5590ab4 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.1)
  configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --mandir=/usr/share/man --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libpulse --enable-libfreetype --enable-gnutls --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvidstab
  libavutil      55. 18.100 / 55. 18.100
  libavcodec     57. 24.103 / 57. 24.103
  libavformat    57. 25.100 / 57. 25.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 32.100 /  6. 32.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'
我试过了

(ffmpeg)aameer@falcon:~/Documents/projects/ffmpeg$ ffmpeg -threads 4 -i "input_sintel_trailer_720p.mp4" -profile:v baseline -level 4.0 -vf scale="trunc(360*a/2)*2:360, subtitles='subtitles.srt'"  -start_number 0 -hls_time 10 -hls_list_size 0 -f hls videos/4444/index_4444_360_.m3u8
我犯了一个错误

[Parsed_subtitles_1 @ 0x2f1b7e0] Shaper: FriBidi 0.19.6 (SIMPLE) HarfBuzz-ng 0.9.27 (COMPLEX)
[Parsed_subtitles_1 @ 0x2f1b7e0] Unable to open subtitles.srt
[AVFilterGraph @ 0x2f1ac00] Error initializing filter 'subtitles' with args 'subtitles.srt'
Error opening filters!
Could not write header for output file #0 (incorrect codec parameters ?): No such file or directory
然后我试了这个

(ffmpeg)aameer@falcon:~/Documents/projects/ffmpeg$ ffmpeg -threads 4 -i "input_sintel_trailer_720p.mp4" -profile:v baseline -level 4.0 -vf "scale='trunc(360*a/2)*2:360', drawtext:drawtext"  -start_number 0 -hls_time 10 -hls_list_size 0 -f hls videos/4444/index_4444_360_.m3u8
基于一个答案,得到了这个错误

[AVFilterGraph @ 0x2695c20] No such filter: 'drawtext:drawtext'
Error opening filters!
我也尝试了一个静态构建,但仍然无法使它工作。使用此静态构建,我尝试:

ffmpeg version N-63893-gc69defd Copyright (c) 2000-2014 the FFmpeg developers
  built on Jul 16 2014 05:38:01 with gcc 4.6 (Debian 4.6.3-1)
  configuration: --prefix=/root/ffmpeg-static/64bit --extra-cflags='-I/root/ffmpeg-static/64bit/include -static' --extra-ldflags='-L/root/ffmpeg-static/64bit/lib -static' --extra-libs='-lxml2 -lexpat -lfreetype' --enable-static --disable-shared --disable-ffserver --disable-doc --enable-bzlib --enable-zlib --enable-postproc --enable-runtime-cpudetect --enable-libx264 --enable-gpl --enable-libtheora --enable-libvorbis --enable-libmp3lame --enable-gray --enable-libass --enable-libfreetype --enable-libopenjpeg --enable-libspeex --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-version3 --enable-libvpx
  libavutil      52. 89.100 / 52. 89.100
  libavcodec     55. 66.101 / 55. 66.101
  libavformat    55. 43.100 / 55. 43.100
  libavdevice    55. 13.101 / 55. 13.101
  libavfilter     4.  8.100 /  4.  8.100
  libswscale      2.  6.100 /  2.  6.100
  libswresample   0. 19.100 /  0. 19.100
  libpostproc    52.  3.100 / 52.  3.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'

(ffmpeg)aameer@falcon:~/Documents/projects/ffmpeg$ ./ffmpeg -threads 4 -i "input_sintel_trailer_720p.mp4" -profile:v baseline -level 4.0 -vf scale="trunc(360*a/2)*2:360, subtitles='subtitle.srt'"  -start_number 0 -hls_time 10 -hls_list_size 0 -f hls videos/4444/index_4444_360_.m3u8
但我犯了一个错误

[Parsed_subtitles_1 @ 0x2f1b7e0] Shaper: FriBidi 0.19.6 (SIMPLE) HarfBuzz-ng 0.9.27 (COMPLEX)
[Parsed_subtitles_1 @ 0x2f1b7e0] Unable to open subtitles.srt
[AVFilterGraph @ 0x2f1ac00] Error initializing filter 'subtitles' with args 'subtitles.srt'
Error opening filters!
Could not write header for output file #0 (incorrect codec parameters ?): No such file or directory
在此方面的任何帮助都将不胜感激。我在编译方面没有太多经验,否则我会使用文档中提到的对libass的支持

尝试第一个可能的答案后的控制台输出:

(ffmpeg)aameer@falcon:~/Documents/projects/ffmpeg$ ls
bbb_sunflower_1080p_30fps_normal.mp4  ffmpeg_log_multiprocess.txt  ffmpeg.static.64bit.latest  input_sintel_trailer_720p.mp4  watermark.png
encoding_script.sh                    ffmpeg_log_simple.txt        ffprobe                     subtitle.srt
ffmpeg                                ffmpeg_log.txt               fontconfig                  videos
(ffmpeg)aameer@falcon:~/Documents/projects/ffmpeg$ ffmpeg -threads 4 -i input_sintel_trailer_720p.mp4 -profile:v baseline -level 4.0 -vf "scale=-2:360,subtitles='subtitle.srt'" -start_number 0 -hls_time 10 -hls_list_size 0 -f hls videos/4444/index_4444_360_.m3u8
ffmpeg version N-78590-g5590ab4 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.1)
  configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --mandir=/usr/share/man --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libpulse --enable-libfreetype --enable-gnutls --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvidstab
  libavutil      55. 18.100 / 55. 18.100
  libavcodec     57. 24.103 / 57. 24.103
  libavformat    57. 25.100 / 57. 25.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 32.100 /  6. 32.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input_sintel_trailer_720p.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    title           : Sintel Trailer
    artist          : Durian Open Movie Team
    encoder         : Lavf52.62.0
    copyright       : (c) copyright Blender Foundation | durian.blender.org
    description     : Trailer for the Sintel open movie project
  Duration: 00:00:52.21, start: 0.000000, bitrate: 1165 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 1033 kb/s, 24 fps, 24 tbr, 24 tbn, 48 tbc (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 126 kb/s (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : SoundHandler
[Parsed_subtitles_1 @ 0x2bdb700] Shaper: FriBidi 0.19.6 (SIMPLE) HarfBuzz-ng 0.9.27 (COMPLEX)
[Parsed_subtitles_1 @ 0x2bdb700] Using font provider fontconfig
[libx264 @ 0x2bc8b60] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 0x2bc8b60] profile Constrained Baseline, level 4.0
Output #0, hls, to 'videos/4444/index_4444_360_.m3u8':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    description     : Trailer for the Sintel open movie project
    title           : Sintel Trailer
    artist          : Durian Open Movie Team
    copyright       : (c) copyright Blender Foundation | durian.blender.org
    encoder         : Lavf57.25.100
    Stream #0:0(und): Video: h264 (libx264), yuv420p, 640x360, q=-1--1, 24 fps, 24 tbn, 24 tbc (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
      encoder         : Lavc57.24.103 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    Stream #0:1(und): Audio: aac (LC), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : SoundHandler
      encoder         : Lavc57.24.103 aac
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Could not write header for output file #0 (incorrect codec parameters ?): No such file or directory
[aac @ 0x2bc9ac0] Qavg: -nan
(ffmpeg)aameer@falcon:~/Documents/projects/ffmpeg$ 

使用较新的ffmpeg build#N-78590,该版本根据横幅启用了
libass
,以尝试以下命令:

使用drawtext 使用字幕
在@Mulvya和ffmpeg小组的Mortiz的指导下,我终于能够得到我正在寻找的解决方案,我正在为任何正在寻找类似解决方案的人粘贴该解决方案。我使用的ffmpeg很好(你可以得到我使用的ffmpeg),有一个新的静态构建也可以工作,正如mortiz所指出的,你可以得到它,但不知何故,我使用的命令中的小错误就是问题所在,命令对我有效:

ffmpeg -threads 4 -i input_sintel_trailer_720p.mp4 -profile:v baseline -level 4.0 -vf "scale=-2:360,subtitles=subtitle.ass:force_style='FontName=Aaargh/Aaargh.ttf,PrimaryColour=&HAA00FF00" -start_number 0 -hls_time 10 -hls_list_size 0 -f hls index_sub_ass_360_.m3u8
注意,我正在使用.ass subtitle文件进行一些字幕样式设置。对于搜索该文件的任何人,这里有一个.ass文件,该文件具有两种不同的样式,用于两个不同的字幕:

[Script Info]
; Script generated by FFmpeg/Lavc57.24.103
ScriptType: v4.00+
PlayResX: 384
PlayResY: 288

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,5,10,10,10,0

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:10.00,0:00:10.04,Default,,0,0,0,,Senator, we're making\Nour final approach into Coruscant.
Dialogue: 0,0:00:30.00,0:00:30.05,Default,,0,0,0,,Very good, Lieutenant.
此外,我覆盖了颜色和字体,正如Mulvya提到的,“scale=-2:360”部分保持了纵横比。此外,我想提及一些重要的链接,这些链接帮助我达到这一点:

ffmpeg字幕文档 .ass格式说明 带线程的ffmpeg 我还为不同格式的hls视频创建了一个主列表,如果您对该外观感兴趣的话 我和莫蒂斯的讨论 用于使用ffmpeg检查将.srt转换为.ass字幕文件
希望这能有所帮助。

您能分享一些关于我在哪里以及如何获得此版本(#N-78590)的观点吗?您已经拥有了它。这是您用于前两个命令的命令。它给了我一个语法错误:(ffmpeg)aameer@falcon:~/Documents/projects/ffmpeg$ffmpeg-threads 4-i“input_sintel_trailer_720p.mp4”-profile:v基线-level 4.0-vf“scale=-2:360,drawtext=“fontfile=/path/to/font.ttf:fontcolor=white:fontsize=30:text='Your text':x=(W-tw)/2:y=H-th-30”-start_number 0-hls_time 10-hls_list_size 0-f hls videos/4444/index_4444\u 360.m3u8 bash:意外标记附近的语法错误“(”此外scale=trunc(360*a/2)*2:360是用于视频保持纵横比的。我在windows上,所以在linux上,你必须尝试使用单引号或双引号,或者转义特殊字符。这很好,但它应该适用于SRT文件,因为这是最常见的子格式,并且它成功地适用于许多人,包括我。我确信它确实适用于Mulvya,但对于我来说因为某些原因,它对我不起作用,我只是在分享对我起作用的东西。但是你的答案很有帮助,所以这就是为什么我投了赞成票。无论如何,非常感谢你的帮助。老兄,我会为你的帮助买一些纸杯蛋糕的