ffmpeg图像concat文件,具有不同的文件扩展名

时间:2018-07-03 23:51:25

标签: shell ffmpeg command ffmpeg-php php-ffmpeg

我一直在使用ffmpeg,并且可以使ffmpeg完美地工作很多次,但是最近我遇到了一个问题,即我的文本文件中的所有图像都没有被使用。

我的文本文件看起来像-

ffconcat version 1.0
file 'gallery-house-77-west-55th-street-01.jpg'
duration 4.44
file 'img03.jpg'
duration 4.44
file 'inside.png'
duration 4.44
file 'placeholder.png'

(文件,文件名和扩展名的数量始终会有所不同)

我已经尝试了几种组合,但是到目前为止,我的ffmpeg函数看起来像-

ffmpeg -i audio.mp3 -safe 0 -f concat -i paths.txt -c:a copy -c:v libx264 \
-vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,fps=25,format=yuv420p" -vsync vfr -movflags +faststart -y output.mp4 2>&1');

尝试运行该视频时,该视频似乎可以转换,但是具有各种奇怪的行为-有时仅显示列表中的中间文件(图像),或者仅显示/呈现前2个文件。

虽然音频正确播放。

我尝试为输入设置帧率,也尝试为输出设置帧率,但这会导致更奇怪的行为。

这是在运行我上面的ffmpeg命令时回显的内容-

 libavutil      56. 15.100 / 56. 15.100
  libavcodec     58. 19.100 / 58. 19.100
  libavformat    58. 13.100 / 58. 13.100
  libavdevice    58.  4.100 / 58.  4.100
  libavfilter     7. 18.100 /  7. 18.100
  libswscale      5.  2.100 /  5.  2.100
  libswresample   3.  2.100 /  3.  2.100
  libpostproc    55.  2.100 / 55.  2.100
[mp3 @ 0xb46780] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from 'audio.mp3':
  Metadata:
    encoder         : Lavf57.71.100
  Duration: 00:00:19.98, start: 0.000000, bitrate: 48 kb/s
    Stream #0:0: Audio: mp3, 22050 Hz, mono, fltp, 48 kb/s
Input #1, concat, from 'paths.txt':
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #1:0: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 754x424 [SAR 72:72 DAR 377:212], 25 tbr, 25 tbn, 25 tbc
Stream mapping:
  Stream #1:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
  Stream #0:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
[swscaler @ 0xba25c0] deprecated pixel format used, make sure you did set range correctly
[libx264 @ 0xb710c0] using SAR=3393/3392
[libx264 @ 0xb710c0] using cpu capabilities: none!
[libx264 @ 0xb710c0] profile High, level 3.1
[libx264 @ 0xb710c0] 264 - core 155 r2901 7d0ff22 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - 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=22 lookahead_threads=3 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
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf58.13.100
    Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 3393:3392 DAR 377:212], q=-1--1, 25 fps, 12800 tbn, 25 tbc
    Metadata:
      encoder         : Lavc58.19.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    Stream #0:1: Audio: mp3 (mp4a / 0x6134706D), 22050 Hz, mono, fltp, 48 kb/s
[swscaler @ 0xb93140] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0xb93140] Warning: data is not aligned! This can lead to a speed loss
[mjpeg @ 0xb6e200] mjpeg: unsupported coding type (cd)
[mjpeg @ 0xb6e200] mjpeg: unsupported coding type (c8)
[mjpeg @ 0xb6e200] Found EOI before any SOF, ignoring
[mjpeg @ 0xb6e200] mjpeg: unsupported coding type (c7)
Error while decoding stream #1:0: Invalid data found when processing input
[mjpeg @ 0xb6e200] invalid id 94
Error while decoding stream #1:0: Invalid data found when processing input
[mp4 @ 0xb6f8c0] Starting second pass: moving the moov atom to the beginning of the file
frame=    1 fps=0.0 q=28.0 Lsize=     179kB time=00:00:19.95 bitrate=  73.6kbits/s speed=44.1x    
video:58kB audio:117kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.446521%
[libx264 @ 0xb710c0] frame I:1     Avg QP:28.86  size: 58683
[libx264 @ 0xb710c0] mb I  I16..4: 21.2% 59.8% 19.0%
[libx264 @ 0xb710c0] 8x8 transform intra:59.8%
[libx264 @ 0xb710c0] coded y,uvDC,uvAC intra: 50.5% 65.2% 31.6%
[libx264 @ 0xb710c0] i16 v,h,dc,p: 10% 60%  3% 28%
[libx264 @ 0xb710c0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 27% 26%  4%  4%  4%  6%  4%  7%
[libx264 @ 0xb710c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 33% 10%  5%  6%  5%  8%  5%  7%
[libx264 @ 0xb710c0] i8c dc,h,v,p: 47% 34% 11%  8%
[libx264 @ 0xb710c0] kb/s:11736.60

有什么想法会导致图像序列失败?

编辑

经过更多调试后,我认为这可能与所有文件都没有相同扩展名的事实有关。我如何才能做到这一点,而不必那样做,或者已经是默认设置,而问题出在哪里?

编辑2

当所有图像扩展名都相同时,我可以使它工作,但是当它到达png或任何其他图像扩展名时,它将渲染影片,但当影片到达该帧时影片停止(不完整)。当我- 1.将所有jpg放在png之前 2.运行以下命令----

ffmpeg -safe 0 -f concat -i paths.txt -c:v libx264 \
-vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2" -pix_fmt yuv420p -movflags +faststart -y output.mp4 2>&1

所以我的最后猜测可能是正确的,这是因为我在ffmpeg命令中混合了多个图像扩展名。

我该如何纠正它以便允许混合使用任何图像文件?

1 个答案:

答案 0 :(得分:0)

不可能。与其说扩展名不同,不如说是编解码器。如果是图片,该扩展程序将跟踪编解码器。

您必须将所有输入都转换为相同的编解码器。我推荐PNG。