我正在尝试将覆盖添加到从 YouTube 获取的 FLV 文件。输入文件为 4.4MB,可使用 QuickTime 播放,因此似乎没有任何问题。
ffmpeg -i input.flv -vf drawtext="fontfile='arial.ttf':text='hello':fontsize=9" output.flv
令人惊奇的短短几秒钟后,我收到了以下输出:
ffmpeg version 1.2.1 Copyright (c) 2000-2013 the FFmpeg developers
built on May 15 2013 13:13:12 with Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
configuration: --prefix=/opt/local --enable-swscale --enable-avfilter --enable-libmp3lame --enable-libvorbis --enable-libopus --enable-libtheora --enable-libschroedinger --enable-libopenjpeg --enable-libmodplug --enable-libvpx --enable-libspeex --enable-libfreetype --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/clang --arch=x86_64 --enable-yasm --enable-gpl --enable-postproc --enable-libx264 --enable-libxvid
libavutil 52. 18.100 / 52. 18.100
libavcodec 54. 92.100 / 54. 92.100
libavformat 54. 63.104 / 54. 63.104
libavdevice 54. 3.103 / 54. 3.103
libavfilter 3. 42.103 / 3. 42.103
libswscale 2. 2.100 / 2. 2.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.flv':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2010-01-31 13:44:29
Duration: 00:02:20.85, start: 0.000000, bitrate: 249 kb/s
Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 22050 Hz, mono, fltp, 56 kb/s
Metadata:
creation_time : 2010-01-31 13:44:29
handler_name : (C) 2007 Google Inc. v08.13.2007.
Stream #0:1(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 191 kb/s, 29.84 fps, 29.97 tbr, 30k tbn, 29.97 tbc
Metadata:
creation_time : 2010-01-31 13:44:29
handler_name : (C) 2007 Google Inc. v08.13.2007.
File 'output.flv' already exists. Overwrite ? [y/N] y
Output #0, flv, to 'output.flv':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
encoder : Lavf54.63.104
Stream #0:0(und): Video: flv1 ([2][0][0][0] / 0x0002), yuv420p, 320x240 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 1k tbn, 29.97 tbc
Metadata:
creation_time : 2010-01-31 13:44:29
handler_name : (C) 2007 Google Inc. v08.13.2007.
Stream #0:1(und): Audio: mp3 ([2][0][0][0] / 0x0002), 22050 Hz, mono, fltp
Metadata:
creation_time : 2010-01-31 13:44:29
handler_name : (C) 2007 Google Inc. v08.13.2007.
Stream mapping:
Stream #0:1 -> #0:0 (mpeg4 -> flv)
Stream #0:0 -> #0:1 (aac -> libmp3lame)
Press [q] to stop, [?] for help
frame= 4201 fps=1386 q=10.0 Lsize= 4304kB time=00:02:20.85 bitrate= 250.3kbits/s
video:3603kB audio:550kB subtitle:0 global headers:0kB muxing overhead 3.618454%
现在,QuickTime 无法播放 output.flv,Flash 抱怨不支持音频编解码器。唯一能够成功播放它的程序是 VLC。其文件大小与 input.flv 相同。这可能是什么原因造成的,哪些选项可以生成可播放的副本?
更新
使用各种编码器收到的截断输出:
ffmpeg -i input.flv -c:v libxvid -c:a copy -q:v 5 output2.flv
...
Stream mapping:
Stream #0:1 -> #0:0 (mpeg4 -> libxvid)
Stream #0:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 4201 fps=303 q=5.0 Lsize= 6597kB time=00:02:20.85 bitrate= 383.7kbits/s
video:5491kB audio:968kB subtitle:0 global headers:0kB muxing overhead 2.120003%
ffmpeg -i input.flv -c:v mpeg4 -c:a copy -q:v 5 output3.flv
...
Stream mapping:
Stream #0:1 -> #0:0 (mpeg4 -> mpeg4)
Stream #0:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 4201 fps=2523 q=5.0 Lsize= 6852kB time=00:02:20.85 bitrate= 398.5kbits/s
video:5746kB audio:968kB subtitle:0 global headers:0kB muxing overhead 2.044082%
ffmpeg -i input.flv -c copy outputcopy.flv
...
Stream mapping:
Stream #0:1 -> #0:0 (copy)
Stream #0:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 4201 fps=0.0 q=-1.0 Lsize= 4394kB time=00:02:20.85 bitrate= 255.6kbits/s
video:3289kB audio:968kB subtitle:0 global headers:0kB muxing overhead 3.216934%
获取任何这些文件的信息都会给我带来许多以下类型的错误(其中 n 是一个增加的整数):
- Stream discovered after head already parsed
- header damaged
- max_analyze_duration 5000000 reached at 5014000 microseconds
- Could not find codec parameters for stream n (Video: mpeg4, yuv420p): unspecified size
Consider increasing the value for the 'analyzeduration' and 'probesize' options
- decoding for stream n failed
接下来是以下类型的消息:
Stream #0:n: Video: mpeg4, yuv420p, 1k tbr, 1k tbn
我刚刚通过 MacPorts 升级了 ffmpeg 及其依赖项,但仍然运气不佳。我尝试从 YouTube 和其他地方播放每个 FLV 文件时都遇到了这种情况。
答案1
Flash 视频
根据规范,Flash Video 仅原生支持 VP-6 和 H.264 视频,以及其他一些视频。这意味着您必须坚持使用 FFmpeg 的flv
编码器,或者使用libx264
编码器切换到 H.264 – 请参阅x264 编码指南对于您可以使用的选项:
ffmpeg -i input.flv … -c:v libx264 output.flv
因此,您不能使用 MPEG-4 Part 2 编码器mpeg4
或libxvid
,因为它们仅受基于 libavformat 的播放器,其中包括从 Android 手机到 VLC 的任何内容,但当然不包括 QuickTime。
QuickTime
至于 QuickTime,它未正式支持 FLV。不幸的是,完全有理由认为 QuickTime 无法播放所有文件。安装佩里安(现在 EOL 应该可以播放)一些FLV 文件,但不是全部。
正如规范所预测的那样,我只能用flv
中所调用的编码器(ffmpeg
即 Sorenson Spark H.263 编解码器)和libx264
编码器来播放 FLV 文件。
声音的
FLV 支持 MP3 和 AAC,所以我不知道为什么 Flash 会抱怨那里的编解码器无效。您可能想尝试使用 AAC 编码器:
ffmpeg -i input.flv … -c:a aac -strict experimental output.flv
…或者使用任何其他 AAC 编码器您的构建支持该功能。