使用 ffmpeg 将 mp4 转换为 x264 时数据无效,但将 flv 转换为 x264 时数据正常
Invalid data when converting mp4 to x264 with ffmpeg but fine when converting flv to x264
我有一个 PHP 脚本可以将上传的视频转换为 x264,如果我上传 FLV 它可以正常工作,但是对于 MP4 它不起作用,这是命令和输出:
命令:
ffmpeg -y -i ../../flv/rjaRGKzSMtksUJ4kGbsLMYEcr.mp4 -crf 0 -vcodec libx264 -movflags faststart ../../flv/rjaRGKzSMtksUJ4kGbsLMYEcr.mp4 2>&1
输出:
ffmpeg version N-67321-ge5054c8 Copyright (c) 2000-2014 the FFmpeg developers
built on Nov 1 2014 12:53:28 with gcc 4.8.2 (GCC) 20140120 (Red Hat 4.8.2-16)
configuration: --extra-libs=-ldl --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libx264
libavutil 54. 11.100 / 54. 11.100
libavcodec 56. 10.100 / 56. 10.100
libavformat 56. 11.101 / 56. 11.101
libavdevice 56. 2.100 / 56. 2.100
libavfilter 5. 2.100 / 5. 2.100
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '../../flv/rjaRGKzSMtksUJ4kGbsLMYEcr.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
creation_time : 2018-10-08 12:03:53
encoder : Lavf56.15.102
Duration: 00:03:03.08, start: 0.023129, bitrate: 1647 kb/s
Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 720x404 [SAR 1:1 DAR 180:101], 1547 kb/s, 24 fps, 24 tbr, 12288 tbn, 24 tbc (default)
Metadata:
creation_time : 2018-10-08 12:03:53
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 95 kb/s (default)
Metadata:
creation_time : 2018-10-08 12:03:53
handler_name : SoundHandler
[libx264 @ 0x1f0a080] using SAR=1/1
[libx264 @ 0x1f0a080] using cpu capabilities: MMX2 SSE Cache64
[libx264 @ 0x1f0a080] profile High 4:4:4 Predictive, level 3.0, 4:2:0 8-bit
[libx264 @ 0x1f0a080] 64 - core 142 - 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=0x1:0x111 me=hex subme=7 psy=0 mixed_ref=1 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=0 chroma_qp_offset=0 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=2 keyint=250 keyint_min=24 scenecut=40 intra_refresh=0 rc=cqp mbtree=0 qp=0
Output #0, mp4, to '../../flv/rjaRGKzSMtksUJ4kGbsLMYEcr.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
encoder : Lavf56.11.101
Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 720x404 [SAR 1:1 DAR 180:101], q=-1--1, 24 fps, 12288 tbn, 24 tbc (default)
Metadata:
creation_time : 2018-10-08 12:03:53
handler_name : VideoHandler
encoder : Lavc56.10.100 libx264
Stream #0:1(und): Audio: aac (libfdk_aac) ([64][0][0][0] / 0x0040), 44100 Hz, stereo, s16, 128 kb/s (default)
Metadata:
creation_time : 2018-10-08 12:03:53
handler_name : SoundHandler
encoder : Lavc56.10.100 libfdk_aac
Stream mapping:
Stream #0:0 -> #0:0 (mpeg4 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (aac (native) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
[mpeg4 @ 0x2004420] ac-tex damaged at 1 1
[mpeg4 @ 0x2004420] Error at MB: 47
[mpeg4 @ 0x2004420] concealing 1170 DC, 1170 AC, 1170 MV errors in P frame
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1ed3ec0] stream 1, offset 0xee5b: partial file
../../flv/rjaRGKzSMtksUJ4kGbsLMYEcr.mp4: Invalid data found when processing input
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1ed3ec0] stream 0, offset 0xef98: partial file
../../flv/rjaRGKzSMtksUJ4kGbsLMYEcr.mp4: Invalid data found when processing input
[mp4 @ 0x1f08f40] Starting second pass: moving the moov atom to the beginning of the file
frame= 3 fps=0.0 q=-1.0 Lsize= 116kB time=00:00:00.12 bitrate=7585.3kbits/s dup=1 drop=0
video:113kB audio:2kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.171168%
[libx264 @ 0x1f0a080] frame I:1 Avg QP: 0.00 size:113785
[libx264 @ 0x1f0a080] frame P:2 Avg QP: 0.00 size: 518
[libx264 @ 0x1f0a080] mb I I16..4: 38.4% 0.0% 61.6%
[libx264 @ 0x1f0a080] mb P I16..4: 0.2% 0.0% 0.1% P16..4: 1.2% 0.1% 0.2% 0.0% 0.0% skip:98.3%
[libx264 @ 0x1f0a080] 8x8 transform intra:0.0% inter:3.1%
[libx264 @ 0x1f0a080] coded y,uvDC,uvAC intra: 91.6% 88.7% 88.7% inter: 0.7% 0.2% 0.2%
[libx264 @ 0x1f0a080] i16 v,h,dc,p: 46% 53% 1% 0%
[libx264 @ 0x1f0a080] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 44% 40% 3% 2% 3% 2% 2% 2% 2%
[libx264 @ 0x1f0a080] i8c dc,h,v,p: 2% 55% 43% 0%
[libx264 @ 0x1f0a080] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x1f0a080] kb/s:7348.61
如您所见,那里有一些错误。我已经尝试使用来自不同来源的几个不同的 mp4 文件,所以这不是视频文件的问题。
我也尝试过不使用 -movflags faststart
选项,也尝试过使用 -q:v 0
而不是 -crf 0
,没有任何效果,但如上所述,它适用于 FLV -> MP4 ,我做错了什么?
PS:"Nothing works" 我的意思是生成的 MP4 在浏览器中播放 1 帧后停止。
FFmpeg 不会就地编辑文件,所以输入不能与输出相同 - 直到最近*这没有被检查,所以 ffmpeg 将静默执行这样的指令,只要覆盖标志存在.
写入与输入不同的文件。
*2018-09-17
我有一个 PHP 脚本可以将上传的视频转换为 x264,如果我上传 FLV 它可以正常工作,但是对于 MP4 它不起作用,这是命令和输出:
命令:
ffmpeg -y -i ../../flv/rjaRGKzSMtksUJ4kGbsLMYEcr.mp4 -crf 0 -vcodec libx264 -movflags faststart ../../flv/rjaRGKzSMtksUJ4kGbsLMYEcr.mp4 2>&1
输出:
ffmpeg version N-67321-ge5054c8 Copyright (c) 2000-2014 the FFmpeg developers
built on Nov 1 2014 12:53:28 with gcc 4.8.2 (GCC) 20140120 (Red Hat 4.8.2-16)
configuration: --extra-libs=-ldl --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libx264
libavutil 54. 11.100 / 54. 11.100
libavcodec 56. 10.100 / 56. 10.100
libavformat 56. 11.101 / 56. 11.101
libavdevice 56. 2.100 / 56. 2.100
libavfilter 5. 2.100 / 5. 2.100
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '../../flv/rjaRGKzSMtksUJ4kGbsLMYEcr.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
creation_time : 2018-10-08 12:03:53
encoder : Lavf56.15.102
Duration: 00:03:03.08, start: 0.023129, bitrate: 1647 kb/s
Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 720x404 [SAR 1:1 DAR 180:101], 1547 kb/s, 24 fps, 24 tbr, 12288 tbn, 24 tbc (default)
Metadata:
creation_time : 2018-10-08 12:03:53
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 95 kb/s (default)
Metadata:
creation_time : 2018-10-08 12:03:53
handler_name : SoundHandler
[libx264 @ 0x1f0a080] using SAR=1/1
[libx264 @ 0x1f0a080] using cpu capabilities: MMX2 SSE Cache64
[libx264 @ 0x1f0a080] profile High 4:4:4 Predictive, level 3.0, 4:2:0 8-bit
[libx264 @ 0x1f0a080] 64 - core 142 - 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=0x1:0x111 me=hex subme=7 psy=0 mixed_ref=1 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=0 chroma_qp_offset=0 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=2 keyint=250 keyint_min=24 scenecut=40 intra_refresh=0 rc=cqp mbtree=0 qp=0
Output #0, mp4, to '../../flv/rjaRGKzSMtksUJ4kGbsLMYEcr.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
encoder : Lavf56.11.101
Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 720x404 [SAR 1:1 DAR 180:101], q=-1--1, 24 fps, 12288 tbn, 24 tbc (default)
Metadata:
creation_time : 2018-10-08 12:03:53
handler_name : VideoHandler
encoder : Lavc56.10.100 libx264
Stream #0:1(und): Audio: aac (libfdk_aac) ([64][0][0][0] / 0x0040), 44100 Hz, stereo, s16, 128 kb/s (default)
Metadata:
creation_time : 2018-10-08 12:03:53
handler_name : SoundHandler
encoder : Lavc56.10.100 libfdk_aac
Stream mapping:
Stream #0:0 -> #0:0 (mpeg4 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (aac (native) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
[mpeg4 @ 0x2004420] ac-tex damaged at 1 1
[mpeg4 @ 0x2004420] Error at MB: 47
[mpeg4 @ 0x2004420] concealing 1170 DC, 1170 AC, 1170 MV errors in P frame
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1ed3ec0] stream 1, offset 0xee5b: partial file
../../flv/rjaRGKzSMtksUJ4kGbsLMYEcr.mp4: Invalid data found when processing input
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1ed3ec0] stream 0, offset 0xef98: partial file
../../flv/rjaRGKzSMtksUJ4kGbsLMYEcr.mp4: Invalid data found when processing input
[mp4 @ 0x1f08f40] Starting second pass: moving the moov atom to the beginning of the file
frame= 3 fps=0.0 q=-1.0 Lsize= 116kB time=00:00:00.12 bitrate=7585.3kbits/s dup=1 drop=0
video:113kB audio:2kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.171168%
[libx264 @ 0x1f0a080] frame I:1 Avg QP: 0.00 size:113785
[libx264 @ 0x1f0a080] frame P:2 Avg QP: 0.00 size: 518
[libx264 @ 0x1f0a080] mb I I16..4: 38.4% 0.0% 61.6%
[libx264 @ 0x1f0a080] mb P I16..4: 0.2% 0.0% 0.1% P16..4: 1.2% 0.1% 0.2% 0.0% 0.0% skip:98.3%
[libx264 @ 0x1f0a080] 8x8 transform intra:0.0% inter:3.1%
[libx264 @ 0x1f0a080] coded y,uvDC,uvAC intra: 91.6% 88.7% 88.7% inter: 0.7% 0.2% 0.2%
[libx264 @ 0x1f0a080] i16 v,h,dc,p: 46% 53% 1% 0%
[libx264 @ 0x1f0a080] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 44% 40% 3% 2% 3% 2% 2% 2% 2%
[libx264 @ 0x1f0a080] i8c dc,h,v,p: 2% 55% 43% 0%
[libx264 @ 0x1f0a080] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x1f0a080] kb/s:7348.61
如您所见,那里有一些错误。我已经尝试使用来自不同来源的几个不同的 mp4 文件,所以这不是视频文件的问题。
我也尝试过不使用 -movflags faststart
选项,也尝试过使用 -q:v 0
而不是 -crf 0
,没有任何效果,但如上所述,它适用于 FLV -> MP4 ,我做错了什么?
PS:"Nothing works" 我的意思是生成的 MP4 在浏览器中播放 1 帧后停止。
FFmpeg 不会就地编辑文件,所以输入不能与输出相同 - 直到最近*这没有被检查,所以 ffmpeg 将静默执行这样的指令,只要覆盖标志存在.
写入与输入不同的文件。
*2018-09-17