I want to convert an elementary stream(.264) to container format(.mp4). Can someone please help me on this? How can I use ffmpeg to do this task? What are all the other methods that could accomplish the same task?
3 Answers
This is easy with ffmpeg
:
ffmpeg -framerate 24 -i input.264 -c copy output.mp4
This simply stream copies (re-muxes) the video so there is no unnecessary re-encoding occurring; therefore the quality is preserved and the whole process is quick.
Frame rate is by default assumed to be 25. You can change this with the
-framerate
input option. Typical values are30000/1001
,25
(default),24000/1001
,24
, or frame rate aliases such asntsc
,ntsc-film
, orpal
.If you don't know the frame rate, you can perform the conversion using your best guess as to the frame rate, and then compare the running duration of the output file with the input file running duration and then calculate the actual frame rate. e.g. assume 24 fps and actual running time of 1:00:00 (60 mins) if resulting file has running time of 1:02:30 (62.5 mins) then actual frame rate is 25 fps (24 * 62.5 / 60)
-
1One should note that raw H.264 streams don't carry a rate information, so FFmpeg will display a warning and default to 25 frames/second. If you want a different frame rate you can use the
-r
switch, e. g.-r 30
for 30 frames/second. Apr 21, 2017 at 12:58 -
1@DavidFoerster Yes, good point, but the H.264 demuxer uses
-framerate
instead of-r
.– lloganApr 21, 2017 at 18:04 -
You're correct. I should have read the entire paragraph in the FFmpeg documentation: “If in doubt use
-framerate
instead of the input option-r
.” For some reason-framerate
isn't documented in this manual here though. Apr 21, 2017 at 22:45 -
1That of
ffmpeg(1)
(Ctrl+F for-framrate
). There's documentation for it in the avfoundation input device section but it doesn't look like it applies to other cases. Apr 22, 2017 at 0:27 -
1@MotsManish I recommend asking a new question. In the question you should provide the complete output of
ffmpeg -i input
whereinput
is the file from the camera.– lloganFeb 7, 2020 at 18:20
Try these commands :
sudo apt-get install x264
x264 raw_stream.264 -o playable_video.mp4
Run the MP4 files in VLC
-
2
I wrote a simple bash script to convert all the files in a directory. Make sure the directory only contains the source files since the operation will run on all files in a given directory.
touch ./convert
chmod +x ./convert
edit convert
#!/bin/bash
for f in *; do
if [ -f "$f" ] && [ "$f" != "convert" ]; then
ffmpeg -framerate 25 -i "$f" -c copy "$f.mp4"
fi
done
Drop in a directory with only the source files, double click and choose run
This script assumes ffmpeg is set up on you system. Not sure which libs are needed, this is what I installed before running: sudo apt install ffmpeg x264 x265 h264enc mencoder mplayer
Only run it once
-
"this is what I installed before running: sudo apt install ffmpeg x264 x265 h264enc mencoder mplayer" Only ffmpeg is needed for this script, so the other packages are not necessary.– lloganFeb 16, 2021 at 17:48
-