Video-Encoding
avconv 命令行,用於將高畫質影片下採樣到標清
我正在嘗試使用以下命令將 TVheadend 錄製的高畫質影片下採樣為 SD 大小:
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 值得信賴。狡猾地,ffmpeg
Invalid UE golomb code
每約 25 幀額外列印一次更新:
這是用於測試的輸入文件的簡短序列:infile.ts
在 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 可以打開和剪切它。
我在 gist 上發布了完整的腳本
嘗試使用現代選項的更簡單命令:
ffmpeg -i infile.ts -map v -map a -c:a copy -c:v libx264 -crf 18 -s 768x432 outfile.mkv