群晖NAS上FFmpeg无法将.ts转成.mp4的问题求助
群晖NAS下FFmpeg转TS到MP4失败的解决方法
问题背景
在群晖NAS上使用FFmpeg将DVR录制的.ts格式视频转换为.mp4,执行命令后失败,具体命令及输出如下:
$ ffmpeg -analyzeduration 2147483647 -probesize 2147483647 -i 'video.ts' -acodec -vcodec copy 'video.mp4'
输出信息:
ffmpeg version 4.1.8 Copyright (c) 2000-2021 the FFmpeg developers built with gcc 8.5.0 (GCC) configuration: --prefix=/usr --incdir='${prefix}/include/ffmpeg' --arch=i686 --target-os=linux --cross-prefix=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu- --enable-cross-compile --enable-optimizations --enable-pic --enable-gpl --enable-shared --disable-static --disable-stripping --enable-version3 --enable-encoders --enable-pthreads --disable-protocols --disable-protocol=rtp --enable-protocol=file --enable-protocol=pipe --disable-muxer=image2 --disable-muxer=image2pipe --disable-swscale-alpha --disable-ffplay --disable-ffprobe --disable-doc --disable-devices --disable-bzlib --disable-altivec --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libmp3lame --disable-vaapi --disable-cuvid --disable-nvenc --disable-decoder=aac --disable-decoder=aac_fixed --disable-encoder=aac --disable-decoder=amrnb --disable-decoder=ac3 --disable-decoder=ac3_fixed --disable-encoder=zmbv --disable-encoder=dca --disable-decoder=dca --disable-encoder=ac3 --disable-encoder=ac3_fixed --disable-encoder=eac3 --disable-decoder=eac3 --disable-encoder=truehd --disable-decoder=truehd --disable-encoder=hevc_vaapi --disable-decoder=hevc --disable-muxer=hevc --disable-demuxer=hevc --disable-parser=hevc --disable-bsf=hevc_mp4toannexb --x86asmexe=yasm --cc=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu-wrap-gcc --enable-yasm --enable-libx264 --enable-encoder=libx264 libavutil 56. 22.100 / 56. 22.100 libavcodec 58. 35.100 / 58. 35.100 libavformat 58. 20.100 / 58. 20.100 libavdevice 58. 5.100 / 58. 5.100 libavfilter 7. 40.101 / 7. 40.101 libswscale 5. 3.100 / 5. 3.100 libswresample 3. 3.100 / 3. 3.100 libpostproc 55. 3.100 / 55. 3.100 [mpegts @ 0x5591c4feb4c0] Could not find codec parameters for stream 1 (Audio: aac ([15][0][0][0] / 0x000F), 0 channels, 199 kb/s): unspecified sample rate Consider increasing the value for the 'analyzeduration' and 'probesize' options Input #0, mpegts, from 'video.ts': Duration: 02:01:58.77, start: 1.405122, bitrate: 4094 kb/s Program 1 Metadata: service_name : Service01 service_provider: FFmpeg Stream #0:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], Closed Captions, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc Stream #0:1[0x101]: Audio: aac ([15][0][0][0] / 0x000F), 0 channels, 199 kb/s [NULL @ 0x5591c6034980] Unable to find a suitable output format for 'copy' copy: Invalid argument
通过VLC查看,该.ts文件的音频为AAC格式,当前使用的FFmpeg(来自SynoCommunity)支持的音频编码器列表如下:
A..... adpcm_adx SEGA CRI ADX ADPCM A..... g722 G.722 ADPCM (codec adpcm_g722) A..... g726 G.726 ADPCM (codec adpcm_g726) A..... g726le G.726 little endian ADPCM ("right-justified") (codec adpcm_g726le) A..... adpcm_ima_qt ADPCM IMA QuickTime A..... adpcm_ima_wav ADPCM IMA WAV A..... adpcm_ms ADPCM Microsoft A..... adpcm_swf ADPCM Shockwave Flash A..... adpcm_yamaha ADPCM Yamaha A..... alac ALAC (Apple Lossless Audio Codec) A..... libopencore_amrnb OpenCORE AMR-NB (Adaptive Multi-Rate Narrow-Band) (codec amr_nb) A..... aptx aptX (Audio Processing Technology for Bluetooth) A..... aptx_hd aptX HD (Audio Processing Technology for Bluetooth) A..... comfortnoise RFC 3389 comfort noise generator A..... flac FLAC (Free Lossless Audio Codec) A..... g723_1 G.723.1 A..X.. mlp MLP (Meridian Lossless Packing) A..... mp2 MP2 (MPEG audio layer 2) A..... mp2fixed MP2 fixed point (MPEG audio layer 2) (codec mp2) A..... libmp3lame libmp3lame MP3 (MPEG audio layer 3) (codec mp3) A..... nellymoser Nellymoser Asao A..X.. opus Opus A..... pcm_alaw PCM A-law / G.711 A-law A..... pcm_f32be PCM 32-bit floating point big-endian A..... pcm_f32le PCM 32-bit floating point little-endian A..... pcm_f64be PCM 64-bit floating point big-endian A..... pcm_f64le PCM 64-bit floating point little-endian A..... pcm_mulaw PCM mu-law / G.711 mu-law A..... pcm_s16be PCM signed 16-bit big-endian A..... pcm_s16be_planar PCM signed 16-bit big-endian planar A..... pcm_s16le PCM signed 16-bit little-endian A..... pcm_s16le_planar PCM signed 16-bit little-endian planar A..... pcm_s24be PCM signed 24-bit big-endian A..... pcm_s24daud PCM D-Cinema audio signed 24-bit A..... pcm_s24le PCM signed 24-bit little-endian A..... pcm_s24le_planar PCM signed 24-bit little-endian planar A..... pcm_s32be PCM signed 32-bit big-endian A..... pcm_s32le PCM signed 32-bit little-endian A..... pcm_s32le_planar PCM signed 32-bit little-endian planar A..... pcm_s64be PCM signed 64-bit big-endian A..... pcm_s64le PCM signed 64-bit little-endian A..... pcm_s8 PCM signed 8-bit A..... pcm_s8_planar PCM signed 8-bit planar A..... pcm_u16be PCM unsigned 16-bit big-endian A..... pcm_u16le PCM unsigned 16-bit little-endian A..... pcm_u24be PCM unsigned 24-bit big-endian A..... pcm_u24le PCM unsigned 24-bit little-endian A..... pcm_u32be PCM unsigned 32-bit big-endian A..... pcm_u32le PCM unsigned 32-bit little-endian A..... pcm_u8 PCM unsigned 8-bit A..... pcm_vidc PCM Archimedes VIDC A..... real_144 RealAudio 1.0 (14.4K) (codec ra_144) A..... roq_dpcm id RoQ DPCM A..X.. s302m SMPTE 302M A..... sbc SBC (low-complexity subband codec) A..X.. sonic Sonic A..X.. sonicls Sonic lossless A..... tta TTA (True Audio) A..X.. vorbis Vorbis A..... wavpack WavPack A..... wmav1 Windows Media Audio 1 A..... wmav2 Windows Media Audio 2
问题诊断
- 命令语法错误:原命令中
-acodec后未指定编码器参数,直接接-vcodec,导致FFmpeg误将-vcodec识别为音频编码器,进而把copy当成输出格式,触发“Unable to find a suitable output format for 'copy'”错误。 - FFmpeg缺少AAC支持:从FFmpeg的编译配置可以看到,已明确禁用AAC解码器和编码器(
--disable-decoder=aac --disable-decoder=aac_fixed --disable-encoder=aac),无法直接解码输入的AAC音频流,也不能通过copy模式复用该音频流到MP4容器。
解决办法
1. 转码音频为FFmpeg支持的格式
当前FFmpeg支持MP3编码(libmp3lame),可以将音频转码为MP3,视频保持原编码直接拷贝,命令如下:
ffmpeg -analyzeduration 2147483647 -probesize 2147483647 -i 'video.ts' -c:v copy -c:a libmp3lame 'video.mp4'
如需调整音频比特率(比如设置为192kbps),可添加-b:a参数:
ffmpeg -analyzeduration 2147483647 -probesize 2147483647 -i 'video.ts' -c:v copy -c:a libmp3lame -b:a 192k 'video.mp4'
2. 修正命令(仅当FFmpeg支持AAC时可用)
如果后续更换了支持AAC的FFmpeg版本,可使用以下命令直接拷贝音视频流(无转码,速度更快):
ffmpeg -analyzeduration 2147483647 -probesize 2147483647 -i 'video.ts' -c copy 'video.mp4'
或者分开指定音视频拷贝:
ffmpeg -analyzeduration 2147483647 -probesize 2147483647 -i 'video.ts' -c:v copy -c:a copy 'video.mp4'
3. 更换支持AAC的FFmpeg版本
- 寻找群晖平台上带有AAC支持的FFmpeg第三方包
- 自行编译FFmpeg,编译时移除
--disable-decoder=aac等相关禁用参数,添加--enable-aac或--enable-libfdk-aac以开启AAC编码和解码支持
内容的提问来源于stack exchange,提问作者cpo
相关产品推荐
相关产品推荐

