我正在尝试使用以下命令将 TVheadend 录制的高清视频降采样为标清大小:
avconv -i infile.ts -map 0:v -map 0:a:0 -map 0:a:1 -c copy -c:v mpeg2video -r 25 -qscale:v 2 -s:v 720x576 -f mpeg outfile.mpeg
到目前为止,avconv 的输出看起来不错:
Input #0, mpegts, from 'infile.ts':
Duration: 02:44:44.69, start: 68943.055278, bitrate: 7408 kb/s
Program 9036
Metadata:
service_provider: upc
Stream #0.0[0x50]: Video: h264 (High), yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 50 fps, 50 tbr, 90k tbn, 100 tbc
Stream #0.1[0x52](eng): Audio: mp2, 48000 Hz, stereo, s16p, 192 kb/s
Stream #0.2[0x5b](ger): Audio: ac3, 48000 Hz, 5.1, fltp, 448 kb/s
No Program
Stream #0.3[0x6e]: Audio: mp1, 0 channels, s16p
[h264 @ 0x1bd9aa0] Ignoring NAL unit 9 during extradata parsing
[mpeg @ 0x1ab4d60] VBV buffer size not set, muxing may fail
Output #0, mpeg, to 'outfile.mpeg':
Metadata:
encoder : Lavf54.20.4
Stream #0.0: Video: mpeg2video, yuv420p, 720x576 [PAR 64:45 DAR 16:9], q=2-31, 200 kb/s, 90k tbn, 25 tbc
Stream #0.1(eng): Audio: mp2, 48000 Hz, stereo, 192 kb/s
Stream #0.2(ger): Audio: ac3, 48000 Hz, 5.1, 448 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (h264 -> mpeg2video)
Stream #0:1 -> #0:1 (copy)
Stream #0:2 -> #0:2 (copy)
Press ctrl-c to stop encoding
而且质量也不错。但是当我在 VLC 中播放它并尝试更改音频通道时,我看到音轨列表不断增加,并且只有第一个可用。而且在代码信息中,我看到一个永久添加新行的列表,几秒钟后,我已经看到 100 多个不同格式的流(字幕、不同格式的音频等):
有谁知道哪里错了?
我想说容器格式由于错误而混乱,但它发生在不同的版本中:我尝试在 ubuntu wily 上使用 ffmpeg 版本 2.7.6-0ubuntu0.15.10.1 和 avconv 版本 9.18-6:9.18-0ubuntu0.14.04 .1 值得信赖。在 wily 上,ffmpegInvalid UE golomb code
每约 25 帧另外打印一次
更新:
以下是用于测试的输入文件的简短序列:内文件.ts
答案1
尝试使用现代选项的更简单的命令:
ffmpeg -i infile.ts -map v -map a -c:a copy -c:v libx264 -crf 18 -s 768x432 outfile.mkv
答案2
在 Xubuntu 16.04 xenial 上,我再次尝试,问题不再出现。
最终的命令行是:
infile=something.ts
outfile=something.mpeg
quality=3.5 # best between small file and good quality
dims=720x576
ffmpeg -i "$infile" -map 0:v -map 0:a:0 -map 0:a:1 -f mpegts -s "$dims" -r 25 -vcodec mpeg2video -qscale:v $quality -acodec copy "$outfile"
生成的文件大小大约是原始文件的 20%。 DVBcut 可以打开并剪切它。
我发布了完整的脚本要点