使用 FFmpeg 将一个视频处理为多个输出会导致最后一个输出中没有音频
Posted
技术标签:
【中文标题】使用 FFmpeg 将一个视频处理为多个输出会导致最后一个输出中没有音频【英文标题】:Manipulating one video into multi outputs with FFmpeg results in no audio in the last output 【发布时间】:2016-01-25 10:29:22 【问题描述】:使用 FFmpeg,我正在尝试对一个输入视频进行一些过滤操作以对其进行缩放 (out1)、缩放和修剪 (out2)。 这是我正在使用的命令:
ffmpeg -y \
-i "Robotica_1080.mkv" \
-filter_complex "[0:v]split=2[v1][v2]; \
[v1]scale=640:360,setpts=PTS-STARTPTS[vout1]; \
[v2]trim=10:15,scale=640:360,setpts=PTS-STARTPTS[vout2]; \
[0:a]asplit=2[a1][a2]; \
[a1]anull,asetpts=PTS-STARTPTS[aout1]; \
[a2]atrim=10:15,asetpts=PTS-STARTPTS[aout2]; \
[vout1][aout1]concat=n=1:v=1:a=1[out1]; \
[vout2][aout2]concat=n=1:v=1:a=1[out2]" \
-map "[out1]" "1.mp4" \
-map "[out2]" "2.mp4"
1.mp4 没问题,而 2.mp4 按预期持续 5 秒但根本没有音频(QuickTime 检查器不编写音频编解码器)
我试图删除修剪/atrim 过滤器,所以 filter_complex 参数看起来像这样:
-filter_complex "[0:v]split=2[v1][v2]; \
[v1]scale=640:360[vout1]; \
[v2]scale=640:360[vout2]; \
[0:a]asplit=2[a1][a2]; \
[a1]anull[aout1]; \
[a2]anull[aout2]; \
[vout1][aout1]concat=n=1:v=1:a=1[out1]; \
[vout2][aout2]concat=n=1:v=1:a=1[out2]" \
但 2.mp4 上仍然没有音频
谁能给我一个提示?
--编辑-- 这是第一个 ffmpeg 命令的输出:
Mac-mini:~ Luca$ /Applications/XAMPP/xamppfiles/htdocs/MediaGallery/ffmpeg/ffmpeg -y \
> -i "/Users/Luca/Desktop/_TEMP UPLOAD/Video/Robotica_1080.mkv" \
> -filter_complex "[0:v]split=2[v1][v2]; \
> [v1]scale=640:360,setpts=PTS-STARTPTS[vout1]; \
> [v2]trim=10:15,scale=640:360,setpts=PTS-STARTPTS[vout2]; \
> [0:a]asplit=2[a1][a2]; \
> [a1]anull,asetpts=PTS-STARTPTS[aout1]; \
> [a2]atrim=10:15,asetpts=PTS-STARTPTS[aout2]; \
> [vout1][aout1]concat=n=1:v=1:a=1[out1]; \
> [vout2][aout2]concat=n=1:v=1:a=1[out2]" \
> -map "[out1]" "/Users/Luca/Downloads/1.mp4" \
> -map "[out2]" "/Users/Luca/Downloads/2.mp4"
ffmpeg version N-72460-gc5a07f1-tessus Copyright (c) 2000-2015 the FFmpeg developers
built with Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --as=yasm --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzmq --enable-version3 --disable-ffplay --disable-indev=qtkit --disable-indev=x11grab_xcb
libavutil 54. 23.101 / 54. 23.101
libavcodec 56. 40.100 / 56. 40.100
libavformat 56. 33.101 / 56. 33.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 16.101 / 5. 16.101
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Input #0, matroska,webm, from '/Users/Luca/Desktop/_TEMP UPLOAD/Video/Robotica_1080.mkv':
Metadata:
encoder : libDivXMediaFormat 4.0.0.0578
Duration: 00:00:20.04, start: 0.000000, bitrate: 4282 kb/s
Stream #0:0(eng): Video: hevc (Main), yuvj420p(pc), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 1k tbn, 25 tbc (default)
Stream #0:1(en): Audio: aac (LC), 44100 Hz, stereo, fltp (default)
[swscaler @ 0x7fb4d181c400] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0x7fb4d185be00] deprecated pixel format used, make sure you did set range correctly
No pixel format specified, yuvj420p for H.264 encoding chosen.
Use -pix_fmt yuv420p for compatibility with outdated media players.
Last message repeated 1 times
[libx264 @ 0x7fb4d183f400] using SAR=1/1
[libx264 @ 0x7fb4d183f400] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.1 Cache64
[libx264 @ 0x7fb4d183f400] profile High, level 3.0
[libx264 @ 0x7fb4d183f400] 264 - 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=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=3 lookahead_threads=1 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
[libx264 @ 0x7fb4d184e400] using SAR=1/1
[libx264 @ 0x7fb4d184e400] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.1 Cache64
[libx264 @ 0x7fb4d184e400] profile High, level 3.0
[libx264 @ 0x7fb4d184e400] 264 - 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=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=3 lookahead_threads=1 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 '/Users/Luca/Downloads/1.mp4':
Metadata:
encoder : Lavf56.33.101
Stream #0:0: Audio: aac (libvo_aacenc) ([64][0][0][0] / 0x0040), 44100 Hz, stereo, s16, 128 kb/s (default)
Metadata:
encoder : Lavc56.40.100 libvo_aacenc
Stream #0:1: Audio: aac (libvo_aacenc) ([64][0][0][0] / 0x0040), 44100 Hz, stereo, s16, 128 kb/s
Metadata:
encoder : Lavc56.40.100 libvo_aacenc
Stream #0:2: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuvj420p(pc), 640x360 [SAR 1:1 DAR 16:9], q=-1--1, 25 fps, 12800 tbn, 25 tbc (default)
Metadata:
encoder : Lavc56.40.100 libx264
Output #1, mp4, to '/Users/Luca/Downloads/2.mp4':
Metadata:
encoder : Lavf56.33.101
Stream #1:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuvj420p(pc), 640x360 [SAR 1:1 DAR 16:9], q=-1--1, 25 fps, 12800 tbn, 25 tbc (default)
Metadata:
encoder : Lavc56.40.100 libx264
Stream mapping:
Stream #0:0 (hevc) -> split
Stream #0:1 (aac) -> asplit
concat:out:a0 -> Stream #0:0 (libvo_aacenc)
concat:out:a0 -> Stream #0:1 (libvo_aacenc)
concat:out:v0 -> Stream #0:2 (libx264)
concat:out:v0 -> Stream #1:0 (libx264)
Press [q] to stop, [?] for help
frame= 501 fps= 26 q=-1.0 Lq=-1.0 size= 1512kB time=00:00:19.97 bitrate= 620.1kbits/s
video:1385kB audio:392kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
[libx264 @ 0x7fb4d183f400] frame I:3 Avg QP:19.30 size: 3879
[libx264 @ 0x7fb4d183f400] frame P:321 Avg QP:24.53 size: 3024
[libx264 @ 0x7fb4d183f400] frame B:177 Avg QP:26.20 size: 825
[libx264 @ 0x7fb4d183f400] consecutive B-frames: 40.7% 34.7% 5.4% 19.2%
[libx264 @ 0x7fb4d183f400] mb I I16..4: 24.8% 65.9% 9.3%
[libx264 @ 0x7fb4d183f400] mb P I16..4: 7.5% 10.5% 2.5% P16..4: 22.9% 7.4% 2.7% 0.0% 0.0% skip:46.5%
[libx264 @ 0x7fb4d183f400] mb B I16..4: 0.4% 0.6% 0.3% B16..8: 17.2% 2.9% 0.7% direct: 0.9% skip:77.1% L0:37.2% L1:51.8% BI:11.0%
[libx264 @ 0x7fb4d183f400] 8x8 transform intra:51.6% inter:69.2%
[libx264 @ 0x7fb4d183f400] coded y,uvDC,uvAC intra: 40.2% 24.2% 1.1% inter: 8.5% 4.0% 0.0%
[libx264 @ 0x7fb4d183f400] i16 v,h,dc,p: 9% 65% 1% 25%
[libx264 @ 0x7fb4d183f400] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 29% 16% 4% 6% 6% 7% 6% 6%
[libx264 @ 0x7fb4d183f400] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 22% 34% 12% 3% 7% 6% 7% 4% 4%
[libx264 @ 0x7fb4d183f400] i8c dc,h,v,p: 63% 25% 11% 1%
[libx264 @ 0x7fb4d183f400] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x7fb4d183f400] ref P L0: 69.3% 11.5% 12.5% 6.7%
[libx264 @ 0x7fb4d183f400] ref B L0: 82.4% 16.7% 0.8%
[libx264 @ 0x7fb4d183f400] ref B L1: 98.6% 1.4%
[libx264 @ 0x7fb4d183f400] kb/s:450.44
[libx264 @ 0x7fb4d184e400] frame I:1 Avg QP:22.23 size: 6699
[libx264 @ 0x7fb4d184e400] frame P:78 Avg QP:24.94 size: 2998
[libx264 @ 0x7fb4d184e400] frame B:46 Avg QP:27.93 size: 1036
[libx264 @ 0x7fb4d184e400] consecutive B-frames: 32.0% 56.0% 2.4% 9.6%
[libx264 @ 0x7fb4d184e400] mb I I16..4: 53.5% 26.6% 19.9%
[libx264 @ 0x7fb4d184e400] mb P I16..4: 9.8% 7.6% 3.1% P16..4: 25.0% 8.0% 2.8% 0.0% 0.0% skip:43.8%
[libx264 @ 0x7fb4d184e400] mb B I16..4: 0.8% 0.5% 0.4% B16..8: 22.4% 3.5% 0.8% direct: 1.1% skip:70.4% L0:41.1% L1:48.0% BI:10.9%
[libx264 @ 0x7fb4d184e400] 8x8 transform intra:36.1% inter:66.1%
[libx264 @ 0x7fb4d184e400] coded y,uvDC,uvAC intra: 33.5% 24.6% 1.8% inter: 8.5% 3.8% 0.0%
[libx264 @ 0x7fb4d184e400] i16 v,h,dc,p: 4% 82% 1% 13%
[libx264 @ 0x7fb4d184e400] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 17% 40% 18% 3% 4% 4% 7% 3% 5%
[libx264 @ 0x7fb4d184e400] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 23% 40% 13% 3% 5% 5% 6% 3% 4%
[libx264 @ 0x7fb4d184e400] i8c dc,h,v,p: 54% 36% 8% 2%
[libx264 @ 0x7fb4d184e400] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x7fb4d184e400] ref P L0: 60.6% 10.5% 17.5% 11.4%
[libx264 @ 0x7fb4d184e400] ref B L0: 77.6% 22.0% 0.4%
[libx264 @ 0x7fb4d184e400] ref B L1: 99.1% 0.9%
[libx264 @ 0x7fb4d184e400] kb/s:461.15
【问题讨论】:
您需要显示每个ffmpeg
命令的完整控制台输出。
@LordNeckbeard 添加了第一个命令的控制台输出。第二个几乎一样
【参考方案1】:
在 concat 过滤器中,“n”定义了段数。所以 n 在你的过滤器中必须是“2”,像这样:
ffmpeg -y \
-i "Robotica_1080.mkv" \
-filter_complex "[0:v]split=2[v1][v2]; \
[v1]scale=640:360,setpts=PTS-STARTPTS[vout1]; \
[v2]trim=10:15,scale=640:360,setpts=PTS-STARTPTS[vout2]; \
[0:a]asplit=2[a1][a2]; \
[a1]anull,asetpts=PTS-STARTPTS[aout1]; \
[a2]atrim=10:15,asetpts=PTS-STARTPTS[aout2]; \
[vout1][aout1]concat=n=2:v=1:a=1[vout1][aout1]; \
[vout2][aout2]concat=n=2:v=1:a=1[vout2][aout2]" \
-map [vout1] -map [aout1] "1.mp4" \
-map [vout2] -map [aout2] "2.mp4"
或者您可以在以下命令中映射音频:
ffmpeg -y \
-i "Robotica_1080.mkv" \
-filter_complex "[0:v]split=2[v1][v2]; \
[v1]scale=640:360,setpts=PTS-STARTPTS[vout1]; \
[v2]trim=10:15,scale=640:360,setpts=PTS-STARTPTS[vout2]; \
[0:a]asplit=2[a1][a2]; \
[a1]anull,asetpts=PTS-STARTPTS[aout1]; \
[a2]atrim=10:15,asetpts=PTS-STARTPTS[aout2]"
-map [vout1] -map [aout1] "1.mp4" \
-map [vout2] -map [aout2] "2.mp4"
【讨论】:
Setting concat filter "n" to 2 给我这个错误:Cannot find a matching stream for unlabeled input pad 2 on filter Parsed_concat_11 将映射设置为您的第二个命令会导致此错误:Output pad "default " 带有未连接到任何目的地的 setpts 的过滤器实例 "Parsed_setpts_5" 的视频类型 抱歉,我修复了一些问题。你可以用固定的命令行再试一次吗?在这种情况下,我认为 concat 过滤器什么也没做,只是将帧传递出去,所以你应该使用第二个。 谢谢!第二个按预期工作!我仍然不知道为什么 concat 过滤器不能完成这项工作,但我刚刚学会了 -map 选项(根据文档:“将一个或多个输入流指定为输出文件的源”)以上是关于使用 FFmpeg 将一个视频处理为多个输出会导致最后一个输出中没有音频的主要内容,如果未能解决你的问题,请参考以下文章
ffmpeg 在同一个文件中对一个输入视频流和多个输出视频流进行转码