【问题标题】:How to detect Audio or Video or Both exist in converted file如何检测转换文件中存在的音频或视频或两者
【发布时间】:2013-07-25 01:21:45
【问题描述】:

我正在尝试使用以下 (mencoder) 命令将 mp4 或 3gp 视频文件转换为 Flash (flv) 格式(使用 Perl 脚本):

mencoder test.mp4 -of lavf -ovc lavc -lavcopts vcodec=flv:vbitrate=1000:mbd=2 -fps 20.80 -ofps 20.80 -oac mp3lame -lameopts abr:br=32 -srate 22050 -o test.flv

可以正常使用,但是手机附件中的一些文件有问题,转换后的FLV文件只有音频。

我也使用了ffmpeg命令如下:

ffmpeg -i test.mp4 -ar 22050 -acodec libmp3lame -ab 32K -r 25 -vcodec flv test.flv

这个ffmpeg命令帮助转换成flv,被mencoder失败了。

我正在考虑一些解决方案,例如,需要检查转换后的 flv 是否有音频和视频,然后根据它采取行动。你能帮我解决这个问题吗?

这里有更多信息(日志):

[mov,mp4,m4a,3gp,3g2,mj2 @ 0xb6b9a3a0]多个编辑列表条目,可能会出现音视频不同步,欢迎补丁 ** MUXER_LAVF ************* *************** ********* 记住:MEncoder 的 libavformat muxing 目前已损坏,可以生成 存在 B 帧的文件不正确。此外,由于错误 MPlayer 将播放这些 INCORRECT 文件,就好像没有任何问题一样!


不支持的像素格式 61 不支持的像素格式 53 不支持的像素格式 81 [flv @ 0xb6b9a3a0]流 0 的编解码器不使用全局标头,但容器格式需要全局标头 [flv @ 0xb6b9a3a0]流 1 的编解码器不使用全局标头,但容器格式需要全局标头 [flv @ 0xb6b9a3a0]pts

[flv @ 0xb6b9a3a0]pts

[flv @ 0xb6b9a3a0]pts

[flv @ 0xb6b9a3a0]pts

[flv @ 0xb6b9a3a0]pts

跳帧!

.......................

【问题讨论】:

  • 如果它适用于 ffmpeg 而不是 mencoder,那为什么不直接使用 ffmpeg?
  • ffmpeg 不是 100% 工作,它无法转换一些 mp4 文件。我需要同时使用两者来解决我的问题。问题:如何检测(使用mencoder或ffmpeg)转换后的文件中是否存在音视频。
  • 请显示无法转换某些 mp4 文件的命令的完整 ffmpeg 控制台输出。

标签: ffmpeg video-streaming audio-streaming video-capture mencoder


【解决方案1】:

这应该可以解决问题。

ffmpeg -i test.avi 2>&1 | grep Audio | awk '{print $0}' | tr -d ,

ffmpeg -i test.avi 2>&1 | grep Video | awk '{print $0}' | tr -d ,

【讨论】:

  • 请编辑更多信息。不建议使用纯代码和“试试这个”的答案,因为它们不包含可搜索的内容,也没有解释为什么有人应该“试试这个”。
  • 很好的解决方案,tnx :)
【解决方案2】:

一个可能的解决方案是:

  1. 使用ffmpeg或ffprobe分析输出文件,

    ffmpeg -i test.flv

带有 A/V 流的文件的命令行输出应如下所示:

ffmpeg -i test.flv
ffmpeg version N-53818-gfca435f Copyright (c) 2000-2013 the FFmpeg developers
built on Jun  4 2013 01:41:53 with gcc 4.7.3 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-liray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enabibopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enablevpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil      52. 34.100 / 52. 34.100
libavcodec     55. 15.100 / 55. 15.100
libavformat    55.  8.102 / 55.  8.102
libavdevice    55.  2.100 / 55.  2.100
libavfilter     3. 74.101 /  3. 74.101
libswscale      2.  3.100 /  2.  3.100
libswresample   0. 17.102 /  0. 17.102
libpostproc    52.  3.100 / 52.  3.100
Input #0, flv, from 'test.flv':
Metadata:
 starttime       : 0
 totalduration   : 5162
 totaldatarate   : 583
 bytelength      : 376445710
 canseekontime   : true
 sourcedata      : BD075FAE3HH1363450117735644
 purl            :
 pmsg            :
Duration: 01:26:01.70, start: 0.000000, bitrate: 533 kb/s
Stream #0:0: Video: h264 (Main), yuv420p, 640x356, 457 kb/s, 23.98 tbr, 1k tbn, 47.95 tbc
Stream #0:1: Audio: aac, 44100 Hz, stereo, fltp, 131 kb/s
  1. 使用正则表达式匹配来检测 ffmpeg 输出是否包含类似“Stream #.....: Video”和“Stream #.....: Audio”的内容。您可以在所有主要的 shell 和语言中实现和使用正则表达式。

例子:

  "^\s+Stream.+Video." and ^\s+Stream.+Audio.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多